@mesgflow/ui-kit 0.11.0 → 0.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/mesgflow-ui-kit-core.mjs +39 -9
- package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs +17 -3
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
- package/package.json +1 -1
- package/tokens.json +1 -1
- package/types/mesgflow-ui-kit-dialog.d.ts +1 -1
- package/types/mesgflow-ui-kit-sidebar.d.ts +8 -0
- package/types/mesgflow-ui-kit-table.d.ts +1 -1
|
@@ -351,11 +351,28 @@ class SlidingIndicator {
|
|
|
351
351
|
// genişliği değişince (dil değişimi, font yüklenmesi) kapsayıcı boyutu sabit
|
|
352
352
|
// kalır ama hedefin konumu/genişliği kayar — yalnız kutu izlenseydi gösterge
|
|
353
353
|
// eski ölçüde kalırdı (gerçek bulgu: tr→en geçişi).
|
|
354
|
-
|
|
354
|
+
//
|
|
355
|
+
// Göstergeler (bu ve kardeşi — TabNav'da hover göstergesi) İZLENMEZ: geri
|
|
356
|
+
// çağrı onların genişliğini yazıyor; izlenselerdi yazma → yeniden gözlem
|
|
357
|
+
// döngüsü "ResizeObserver loop completed with undelivered notifications"
|
|
358
|
+
// hatası atıyordu (0.11.0, gerçek bulgu). Yazma ayrıca bir sonraki kareye
|
|
359
|
+
// ertelenir ve aynı karedeki bildirimler tek yazmada birleşir.
|
|
360
|
+
let frame = null;
|
|
361
|
+
const schedule = () => {
|
|
362
|
+
if (frame !== null)
|
|
363
|
+
return;
|
|
364
|
+
frame = requestAnimationFrame(() => {
|
|
365
|
+
frame = null;
|
|
366
|
+
this.update(false);
|
|
367
|
+
});
|
|
368
|
+
};
|
|
369
|
+
const observer = new ResizeObserver(schedule);
|
|
355
370
|
const observeAll = () => {
|
|
356
371
|
observer.observe(box);
|
|
357
|
-
for (const child of Array.from(box.children))
|
|
358
|
-
|
|
372
|
+
for (const child of Array.from(box.children)) {
|
|
373
|
+
if (!child.hasAttribute('mfSlidingIndicator'))
|
|
374
|
+
observer.observe(child);
|
|
375
|
+
}
|
|
359
376
|
};
|
|
360
377
|
observeAll();
|
|
361
378
|
// Sonradan eklenen öğeler (ör. `@for` ile gelen sekmeler) de izlensin.
|
|
@@ -363,10 +380,12 @@ class SlidingIndicator {
|
|
|
363
380
|
? null
|
|
364
381
|
: new MutationObserver(() => {
|
|
365
382
|
observeAll();
|
|
366
|
-
|
|
383
|
+
schedule();
|
|
367
384
|
});
|
|
368
385
|
mutations?.observe(box, { childList: true });
|
|
369
386
|
destroyRef.onDestroy(() => {
|
|
387
|
+
if (frame !== null)
|
|
388
|
+
cancelAnimationFrame(frame);
|
|
370
389
|
observer.disconnect();
|
|
371
390
|
mutations?.disconnect();
|
|
372
391
|
});
|
|
@@ -395,18 +414,29 @@ class SlidingIndicator {
|
|
|
395
414
|
this.current = null;
|
|
396
415
|
return;
|
|
397
416
|
}
|
|
417
|
+
const vertical = this.axis() === 'y';
|
|
418
|
+
const transform = vertical
|
|
419
|
+
? `translateY(${target.offsetTop}px)`
|
|
420
|
+
: `translateX(${target.offsetLeft}px)`;
|
|
421
|
+
const size = `${vertical ? target.offsetHeight : target.offsetWidth}px`;
|
|
422
|
+
// Hiçbir şey değişmediyse DOM'a dokunma (gözlemci bildirimleri çoğunlukla böyle).
|
|
423
|
+
if (this.current === target &&
|
|
424
|
+
style.opacity === '1' &&
|
|
425
|
+
style.transform === transform &&
|
|
426
|
+
(vertical ? style.height : style.width) === size) {
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
398
429
|
const animate = allowAnimate && this.current !== null && this.current !== target;
|
|
399
430
|
// Anında yol: geometri geçişsiz yazılır, opaklık yine yumuşak kalır.
|
|
400
431
|
if (!animate)
|
|
401
432
|
style.transitionProperty = 'opacity';
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
style.height =
|
|
433
|
+
style.transform = transform;
|
|
434
|
+
if (vertical) {
|
|
435
|
+
style.height = size;
|
|
405
436
|
style.width = '';
|
|
406
437
|
}
|
|
407
438
|
else {
|
|
408
|
-
style.
|
|
409
|
-
style.width = `${target.offsetWidth}px`;
|
|
439
|
+
style.width = size;
|
|
410
440
|
style.height = '';
|
|
411
441
|
}
|
|
412
442
|
style.opacity = '1';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-core.mjs","sources":["../../../projects/ui-kit/core/cn.ts","../../../projects/ui-kit/core/direction.ts","../../../projects/ui-kit/core/recipes.ts","../../../projects/ui-kit/core/a11y/ids.ts","../../../projects/ui-kit/core/forms/value-accessor.ts","../../../projects/ui-kit/core/overlay/placements.ts","../../../projects/ui-kit/core/motion.ts","../../../projects/ui-kit/core/sliding-indicator.ts","../../../projects/ui-kit/core/i18n/labels.ts","../../../projects/ui-kit/core/i18n/labels.en.ts","../../../projects/ui-kit/core/i18n/tokens.ts","../../../projects/ui-kit/core/i18n/provide.ts","../../../projects/ui-kit/core/mesgflow-ui-kit-core.ts"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\r\nimport { extendTailwindMerge } from 'tailwind-merge';\r\n\r\n/**\r\n * Kitin kendi utility'lerini tanıyan tailwind-merge örneği. Öncesinde düz\r\n * `twMerge` `text-eyebrow`'u bir METİN RENGİ sanıp `text-fg` ile çakıştırıyor\r\n * (birini siliyor), `h-control-md` ile `h-8`'i ise hiç çözemiyordu (ikisi de\r\n * kalıp CSS sırası kazananı belirliyordu) — `docs/tr/mimari.md` \"twMerge\r\n * gotcha\" artık bu yapılandırmayla kapandı. Yeni bir özel utility\r\n * (`@utility`/`@theme` ile) eklerken buraya da ekleyin.\r\n */\r\nconst twMerge = extendTailwindMerge<'h-control'>({\r\n extend: {\r\n theme: {\r\n text: [\r\n 'label',\r\n 'caption',\r\n 'eyebrow',\r\n 'title-sm',\r\n 'title',\r\n 'title-lg',\r\n 'display',\r\n 'display-lg',\r\n 'metric',\r\n ],\r\n shadow: ['1', '2', '3', 'control', 'filled', 'glow', 'highlight'],\r\n ease: ['emphasis', 'spring', 'exit'],\r\n animate: [\r\n 'progress-slide',\r\n 'spin-slow',\r\n 'dialog-in',\r\n 'dialog-out',\r\n 'sheet-in',\r\n 'sheet-out',\r\n 'drawer-in',\r\n 'drawer-out',\r\n 'drawer-start-in',\r\n 'drawer-start-out',\r\n 'drawer-top-in',\r\n 'drawer-top-out',\r\n 'pop',\r\n 'overlay-in',\r\n 'overlay-out',\r\n 'toast-in',\r\n 'toast-out',\r\n 'countdown',\r\n 'list-in',\r\n 'draw',\r\n 'shimmer',\r\n 'fade-in',\r\n ],\r\n font: ['display'],\r\n tracking: ['label'],\r\n },\r\n classGroups: {\r\n 'h-control': [{ 'h-control': ['xs', 'sm', 'md', 'lg', 'xl'] }],\r\n duration: [{ duration: ['instant', 'fast', 'base', 'slow', 'slower'] }],\r\n z: [{ z: ['sticky', 'nav', 'overlay', 'toast'] }],\r\n },\r\n conflictingClassGroups: {\r\n 'h-control': ['h', 'size'],\r\n h: ['h-control'],\r\n },\r\n },\r\n});\r\n\r\n/** clsx ile koşullu class'ları birleştirir, tailwind-merge ile çakışan utility'leri (ör. iki farklı `bg-*`) sonuncusu kazanacak şekilde çözer — kitin özel token'ları dahil. */\r\nexport function cn(...inputs: ClassValue[]): string {\r\n return twMerge(clsx(inputs));\r\n}\r\n","/**\r\n * Yazı yönü yardımcıları — `dir=\"rtl\"` (öğede ya da bir atada) ya da CSS `direction` kalıtımı.\r\n * Hesaplanan stil okunur: yön bir atadan gelse de doğru sonuç verir. SSR'de (stil yok) LTR.\r\n */\r\nexport function isRtl(el: Element): boolean {\r\n return typeof getComputedStyle !== 'undefined' && getComputedStyle(el).direction === 'rtl';\r\n}\r\n\r\n/** İşaretçinin satır başından (LTR'de sol, RTL'de sağ kenar) oranı, 0–1 aralığına kırpılmış. */\r\nexport function inlineStartRatio(clientX: number, rect: DOMRect, rtl: boolean): number {\r\n if (rect.width === 0) return 0;\r\n const fromLeft = (clientX - rect.left) / rect.width;\r\n return Math.min(1, Math.max(0, rtl ? 1 - fromLeft : fromLeft));\r\n}\r\n\r\n/**\r\n * Yatay kaydırmanın başlangıçtan uzaklığı. Modern tarayıcılarda RTL'de `scrollLeft` 0'dan\r\n * NEGATİFE gider (başlangıç = 0, son = −max); mutlak değer iki yönde de \"başlangıçtan uzaklık\".\r\n */\r\nexport function scrollFromInlineStart(el: Element): number {\r\n return Math.abs(el.scrollLeft);\r\n}\r\n","import type { MfControlSize } from './types';\r\n\r\n/**\r\n * Paylaşılan class reçeteleri — kontrol/overlay/kapsayıcı bileşenlerinin\r\n * TEKRAR TEKRAR yazdığı focus/disabled/boyut/yüzey kalıplarının TEK kaynağı\r\n * (bkz. plan Faz 1a/1b). Öncesinde 5 farklı disabled reçetesi, 4 farklı\r\n * focus-offset kombinasyonu ve 9 elle yazılmış `h-8`/`h-9`/`h-10` sabiti\r\n * vardı — her biri kendi kopyasını sürüklüyordu (gerçek bulgu). Bileşenler\r\n * bunları `cn()` ile kendi özel class'larıyla birleştirir (`cn()` twMerge\r\n * kullandığı için çakışan Tailwind utility'leri güvenle çözülür).\r\n */\r\n\r\n/** `outline`+`outline-offset` tabanlı TEK focus mekanizması — bkz. `button.variants.ts`'in \"Focus — tek mekanizma\" notu. Box-shadow/ring KULLANMA. */\r\nexport const focusRecipe =\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring';\r\n\r\n/** Native `disabled` VE `aria-disabled` (ör. `@angular/aria` desenlerinin kullandığı) ikisini de kapsar — bkz. plan \"Disabled 5 farklı reçete\" bulgusu. */\r\nexport const disabledRecipe =\r\n 'disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none aria-disabled:pointer-events-none aria-disabled:opacity-50';\r\n\r\n/** 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. */\r\nexport const controlSurface =\r\n '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';\r\n\r\n/** `size: MfSize` eksenindeki TÜM kontrollerin ortak yükseklik/dolgu/font eşlemesi — bkz. `radius.css`'teki `--control-h-*` token'ları. */\r\nexport const controlSize: Record<MfControlSize, string> = {\r\n xs: 'h-control-xs px-2 text-xs',\r\n sm: 'h-control-sm px-2.5 text-sm',\r\n md: 'h-control-md px-3 text-sm',\r\n lg: 'h-control-lg px-3.5 text-base',\r\n xl: 'h-control-xl px-4 text-base',\r\n};\r\n\r\n/**\r\n * Popover/Menu/Select/Combobox/... overlay panellerinin ortak kabuğu — BORDER-\r\n * FIRST (2026-09 Deep Emerald geçişi, kullanıcı kararıyla eski \"light modda\r\n * kenarlıksız, sadece gölge\" ilkesinin YERİNE geçti): iki modda da\r\n * `border-hairline` (color.css — %8-12 opak marka-tonlu 1px çizgi) + `shadow-2`.\r\n * Ağır/bulanık gölge yerine ince çizgi \"premium\" hissi artık BÖYLE veriliyor.\r\n */\r\nexport const overlaySurface = 'rounded-lg border border-hairline bg-overlay shadow-2';\r\n\r\n/** 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). */\r\nexport const containerSurface = 'rounded-lg border border-hairline bg-surface';\r\n\r\n/**\r\n * Mikro glassmorphism — Dialog/Sheet/Drawer paneli ve Toast öğeleri (bkz.\r\n * `dialog.variants.ts`, `toast-host.ts`) bunu kullanır. `supports-[…]` ile\r\n * `backdrop-filter` desteklenmediğinde düz `bg-surface`'e düşer (eski\r\n * tarayıcı/headless test ortamı); `reduced-transparency:` (color.css'te\r\n * tanımlı custom variant, `prefers-reduced-transparency: reduce` medya\r\n * sorgusu) kullanıcı saydamlığı azalt istediğinde camı KAPATIR — WCAG 1.4.11\r\n * \"Non-text Contrast\" ve hareket/saydamlık duyarlılığı için. Tüketici kendi\r\n * `border`/`rounded-*` genişliğini üstüne ekler.\r\n */\r\nexport const glassSurface =\r\n 'border-hairline bg-surface supports-[backdrop-filter]:bg-glass supports-[backdrop-filter]:backdrop-blur-md reduced-transparency:bg-surface reduced-transparency:backdrop-blur-none';\r\n\r\n/** `hasError`/`aria-invalid` durumundaki form kontrolleri için — `controlSurface` İLE BİRLİKTE, üstüne eklenir. */\r\nexport const errorRecipe = 'border-danger focus-within:border-danger focus-visible:outline-danger';\r\n\r\n/**\r\n * Renk/gölge geçişlerinin TEK hareket dili — `ease-emphasis` kitin kendi eğrisi\r\n * (bkz. `motion.css`), tarayıcı varsayılanı `ease` DEĞİL. Öncesinde ~35 yerde\r\n * `transition-colors duration-fast` easing'siz kullanılıyordu (gerçek bulgu,\r\n * bkz. plan Faz 1c).\r\n */\r\nexport const transitionRecipe = 'transition-colors duration-fast ease-emphasis';\r\n\r\n/** Basılı-hissi — `active:scale` ekseninde TEK reçete, disabled'da sıfırlanır. */\r\nexport const pressRecipe = 'active:scale-[0.99] disabled:active:scale-100';\r\n","let seq = 0;\r\n\r\n/**\r\n * Bileşen örneği başına kararlı, benzersiz bir DOM id'si üretir —\r\n * `aria-controls`/`aria-describedby`/`aria-activedescendant` gibi bağların\r\n * her component klasöründe kendi elle sayaçlarını (bkz. `combobox.ts`'teki\r\n * `comboboxIdSeq` — bu modül kullanıma girince oraya taşınacak) tekrar\r\n * yazmasına gerek kalmasın diye. SSR'da hydration uyuşmazlığı YARATMAZ —\r\n * her platformda modül yüklendiğinde sıfırdan başlar, sayaç deterministik.\r\n */\r\nexport function nextId(prefix: string): string {\r\n return `${prefix}-${++seq}`;\r\n}\r\n","/**\r\n * `registerOnChange`/`registerOnTouched`'ın HER `ControlValueAccessor`\r\n * implementasyonunda BİREBİR aynı kalan gövdesini tek kaynağa indirger\r\n * (bkz. Select/NumberInput/Combobox/ColorPicker'ın öncesi — 4+ kopya, plan\r\n * Faz 2 \"CVA tamamlama\" notu). Alt sınıf SADECE `writeValue`'yu (kendi\r\n * `model`/`signal`'ına yazan) tanımlar VE kendi `NG_VALUE_ACCESSOR`\r\n * provider'ını `@Component`'ında bildirir — `forwardRef(() => AltSınıf)`\r\n * somut sınıfa ihtiyaç duyduğu için provider MİRAS ALINAMAZ.\r\n *\r\n * Düz bir soyut sınıf (Angular `@Directive()` DEĞİL) — `inject()` ya da\r\n * yaşam döngüsü kancası kullanmıyor, sadece alan/metot mirası; `@Directive()`\r\n * sarmalamak gereksiz karmaşıklık olurdu.\r\n */\r\nexport abstract class ValueAccessorBase<T> {\r\n protected onChange: (value: T) => void = () => {};\r\n protected onTouched: () => void = () => {};\r\n\r\n registerOnChange(fn: (value: T) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n}\r\n","import type { ConnectedPosition } from '@angular/cdk/overlay';\r\nimport type { MfPlacement } from '../types';\r\n\r\ntype Side = 'top' | 'bottom' | 'start' | 'end';\r\ntype Align = 'start' | 'center' | 'end';\r\n\r\nconst OPPOSITE: Record<Side, Side> = { top: 'bottom', bottom: 'top', start: 'end', end: 'start' };\r\n\r\nfunction split(placement: MfPlacement): [Side, Align] {\r\n const [rawSide, rawAlign] = placement.split('-') as [string, Align | undefined];\r\n const side: Side = rawSide === 'left' ? 'start' : rawSide === 'right' ? 'end' : (rawSide as Side);\r\n return [side, rawAlign ?? 'center'];\r\n}\r\n\r\nfunction position(side: Side, align: Align, offset: number): ConnectedPosition {\r\n if (side === 'top' || side === 'bottom') {\r\n const below = side === 'bottom';\r\n return {\r\n originX: align,\r\n originY: below ? 'bottom' : 'top',\r\n overlayX: align,\r\n overlayY: below ? 'top' : 'bottom',\r\n offsetY: below ? offset : -offset,\r\n // Panel aşağıdaysa ÜSTÜNDEN (tetikleyiciye bakan kenarından) büyür.\r\n panelClass: [`mf-side-${side}`, `mf-origin-${below ? 'top' : 'bottom'}-${align}`],\r\n };\r\n }\r\n const atEnd = side === 'end';\r\n const alignY = align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center';\r\n return {\r\n originX: atEnd ? 'end' : 'start',\r\n originY: alignY,\r\n overlayX: atEnd ? 'start' : 'end',\r\n overlayY: alignY,\r\n offsetX: atEnd ? offset : -offset,\r\n panelClass: [`mf-side-${side}`, `mf-origin-${alignY}-${atEnd ? 'start' : 'end'}`],\r\n };\r\n}\r\n\r\n/**\r\n * Tüm bağlı overlay'lerin (Popover, Tooltip, HoverCard, Tour, ContextMenu ve\r\n * Popover üstüne kurulan Select/Combobox/DatePicker/...) TEK konum üreticisi:\r\n * tercih edilen yerleşim + taşmada karşı tarafa çevrilen (flip) yedek.\r\n *\r\n * Her pozisyon bir `panelClass` taşır — CDK hangisini SEÇERSE pane'e o\r\n * eklenir: `mf-side-*` (giriş kayma yönü) + `mf-origin-*` (`transform-origin`),\r\n * bkz. styles/tokens/motion.css. Böylece panel yukarı çevrildiğinde (flip) animasyon\r\n * da tetikleyiciden dışarı doğru açılır (Radix\r\n * `--radix-popper-transform-origin` eşleniği, abonelik gerekmeden).\r\n *\r\n * `left`/`right` MANTIKSAL (`start`/`end`) — RTL'de CDK kendisi çevirir.\r\n */\r\nexport function overlayPositions(placement: MfPlacement, offset = 4): ConnectedPosition[] {\r\n const [side, align] = split(placement);\r\n return [position(side, align, offset), position(OPPOSITE[side], align, offset)];\r\n}\r\n\r\n/**\r\n * İmleç konumuna açılan paneller (ContextMenu) — köşe tetikleyiciye yapışık,\r\n * dört çeyrekte flip; origin her zaman imlece bakan köşe.\r\n */\r\nexport function pointerPositions(): ConnectedPosition[] {\r\n return [\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n panelClass: ['mf-side-bottom', 'mf-origin-top-start'],\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n panelClass: ['mf-side-top', 'mf-origin-bottom-start'],\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'top',\r\n panelClass: ['mf-side-bottom', 'mf-origin-top-end'],\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'bottom',\r\n panelClass: ['mf-side-top', 'mf-origin-bottom-end'],\r\n },\r\n ];\r\n}\r\n","/** `prefers-reduced-motion: reduce` — SSR/jsdom'da (matchMedia yok) `false`. */\r\nexport function prefersReducedMotion(): boolean {\r\n return (\r\n typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches\r\n );\r\n}\r\n\r\n/** CSS süre string'ini (`120ms`, `0.2s`) milisaniyeye çevirir; çözülemezse `null`. */\r\nexport function parseCssDuration(raw: string): number | null {\r\n const value = raw.trim();\r\n const match = /^(-?\\d*\\.?\\d+)(ms|s)$/.exec(value);\r\n if (!match) return null;\r\n const n = Number(match[1]);\r\n return match[2] === 's' ? n * 1000 : n;\r\n}\r\n\r\nconst DEFAULT_EXIT_MS = 120;\r\n\r\n/**\r\n * Overlay/dialog/toast çıkış animasyonunun süresi — `--mf-duration-exit`\r\n * (styles/tokens/motion.css) TEK kaynak. Eskiden `dialog.service.ts`,\r\n * `popover.ts`, `toast.service.ts` her biri `EXIT_MS = 120` sabitini CSS'le\r\n * ELLE eşitliyordu; token değişince JS kısa kalıp panel animasyonun ortasında\r\n * kopuyordu. Reduced-motion'da `0` (panel anında kaldırılır).\r\n */\r\nexport function exitDurationMs(): number {\r\n if (prefersReducedMotion()) return 0;\r\n if (typeof document === 'undefined' || typeof getComputedStyle === 'undefined') {\r\n return DEFAULT_EXIT_MS;\r\n }\r\n const raw = getComputedStyle(document.documentElement).getPropertyValue('--mf-duration-exit');\r\n return parseCssDuration(raw) ?? DEFAULT_EXIT_MS;\r\n}\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n afterNextRender,\r\n afterRenderEffect,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nexport type SlidingIndicatorAxis = 'x' | 'y';\r\n\r\n/**\r\n * `<span mfSlidingIndicator [track]=\"selected()\" class=\"-bottom-px h-0.5 bg-accent-fill\"></span>`\r\n *\r\n * Kitin ortak \"kayan gösterge\" motoru — Tabs'ın çizgisi/hapı, SegmentedControl'ün\r\n * parçası, TabNav'ın çizgisi ve hover-izleme vurgusu AYNI hareketi paylaşsın diye.\r\n * Kapsayıcı (varsayılan `parentElement`, `relative` olmalı) içinde `target`'ı\r\n * bulur, onun `offsetLeft/offsetWidth`'ine (x) ya da `offsetTop/offsetHeight`'ına\r\n * (y) göre `transform` + boyut yazar.\r\n *\r\n * - **Hareket:** hedef bir öğeden BAŞKA bir öğeye geçince yay eğrisiyle kayar\r\n * (`ease-spring`, `duration-slow`). İlk görünüm, hedefin yeniden belirmesi ve\r\n * yeniden boyutlanma (ResizeObserver, font yüklenmesi) ANINDA — göstergenin\r\n * 0'dan \"uçarak\" gelmesi olmaz. Opaklık her zaman yumuşak geçer.\r\n * - **Çapraz eksen** tüketicinin sınıfıdır (`-bottom-px h-0.5`, `inset-y-0`…);\r\n * motor yalnız ana ekseni yazar.\r\n * - **RTL:** `left-0` + `offsetLeft` + `translateX` üçü de fiziksel — birlikte\r\n * RTL'de doğru (bkz. scripts/rtl-rules.mjs allowlist).\r\n * - `target` `null` ise gösterge son konumunda solar (hover bitişi).\r\n * - Azaltılmış harekette `motion.css`'in global anahtarı geçişleri sıfırlar.\r\n */\r\n@Directive({\r\n selector: '[mfSlidingIndicator]',\r\n exportAs: 'mfSlidingIndicator',\r\n host: {\r\n class:\r\n 'pointer-events-none absolute opacity-0 transition-[transform,width,height,opacity] duration-slow ease-spring',\r\n '[class.left-0]': \"axis() === 'x'\",\r\n '[class.top-0]': \"axis() === 'y'\",\r\n 'aria-hidden': 'true',\r\n },\r\n})\r\nexport class SlidingIndicator {\r\n readonly axis = input<SlidingIndicatorAxis>('x');\r\n /** Kapsayıcı içinde çözülen CSS seçici, somut bir öğe ya da `null` (gizli). */\r\n readonly target = input<string | HTMLElement | null>('[aria-selected=\"true\"]');\r\n /** Herhangi bir değer — değişince (ör. seçim sinyali) hedef yeniden ölçülür. */\r\n readonly track = input<unknown>();\r\n /** Ölçüm kapsayıcısı; varsayılan `parentElement` (offsetParent olmalı). */\r\n readonly container = input<HTMLElement>();\r\n\r\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n private current: HTMLElement | null = null;\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n this.target();\r\n this.track();\r\n this.axis();\r\n this.update(true);\r\n });\r\n\r\n const destroyRef = inject(DestroyRef);\r\n afterNextRender(() => {\r\n const box = this.box();\r\n if (!box || typeof ResizeObserver === 'undefined') return;\r\n // Kapsayıcının YANINDA her öğe de izlenir: `w-full` bir şeritte bir etiketin\r\n // genişliği değişince (dil değişimi, font yüklenmesi) kapsayıcı boyutu sabit\r\n // kalır ama hedefin konumu/genişliği kayar — yalnız kutu izlenseydi gösterge\r\n // eski ölçüde kalırdı (gerçek bulgu: tr→en geçişi).\r\n const observer = new ResizeObserver(() => this.update(false));\r\n const observeAll = (): void => {\r\n observer.observe(box);\r\n for (const child of Array.from(box.children)) observer.observe(child);\r\n };\r\n observeAll();\r\n // Sonradan eklenen öğeler (ör. `@for` ile gelen sekmeler) de izlensin.\r\n const mutations =\r\n typeof MutationObserver === 'undefined'\r\n ? null\r\n : new MutationObserver(() => {\r\n observeAll();\r\n this.update(false);\r\n });\r\n mutations?.observe(box, { childList: true });\r\n destroyRef.onDestroy(() => {\r\n observer.disconnect();\r\n mutations?.disconnect();\r\n });\r\n });\r\n }\r\n\r\n /** Dışarıdan yeniden ölçüm (ör. içerik değişti ama seçim değişmedi). */\r\n refresh(animate = false): void {\r\n this.update(animate);\r\n }\r\n\r\n private box(): HTMLElement | null {\r\n return this.container() ?? this.el.parentElement;\r\n }\r\n\r\n private resolve(): HTMLElement | null {\r\n const target = this.target();\r\n if (!target) return null;\r\n if (typeof target !== 'string') return target;\r\n return this.box()?.querySelector<HTMLElement>(target) ?? null;\r\n }\r\n\r\n private update(allowAnimate: boolean): void {\r\n const target = this.resolve();\r\n const style = this.el.style;\r\n if (!target) {\r\n style.opacity = '0';\r\n this.current = null;\r\n return;\r\n }\r\n\r\n const animate = allowAnimate && this.current !== null && this.current !== target;\r\n // Anında yol: geometri geçişsiz yazılır, opaklık yine yumuşak kalır.\r\n if (!animate) style.transitionProperty = 'opacity';\r\n\r\n if (this.axis() === 'y') {\r\n style.transform = `translateY(${target.offsetTop}px)`;\r\n style.height = `${target.offsetHeight}px`;\r\n style.width = '';\r\n } else {\r\n style.transform = `translateX(${target.offsetLeft}px)`;\r\n style.width = `${target.offsetWidth}px`;\r\n style.height = '';\r\n }\r\n style.opacity = '1';\r\n\r\n if (!animate) {\r\n // Yeniden akışı zorla ki geçiş özelliği geri gelince konum değişimi animasyonlanmasın.\r\n void this.el.getBoundingClientRect();\r\n style.transitionProperty = '';\r\n }\r\n this.current = target;\r\n }\r\n}\r\n","/**\r\n * Kitin TÜM metinlerinin TEK şekli — `MF_LABELS` injection token'ının taşıdığı\r\n * tip (bkz. `tokens.ts`). Her alt-nesne bir bileşen ailesinin metinlerini\r\n * gruplar (Dialog'un önceki `MfDialogLabels`'ı ve DatePicker/Table'ın \"grup\r\n * input\" çantalarıyla AYNI emsal — tek fark artık HEPSİ tek bir kökten\r\n * `provideMesgflowUi()` ile sağlanıyor, bkz. `provide.ts`).\r\n */\r\nexport interface MfCommonLabels {\r\n loading: string;\r\n clear: string;\r\n remove: string;\r\n}\r\n\r\nexport interface MfDialogLabels {\r\n close: string;\r\n resize: string;\r\n fullscreenEnter: string;\r\n fullscreenExit: string;\r\n confirmOk: string;\r\n confirmCancel: string;\r\n confirmConfirm: string;\r\n confirmDelete: string;\r\n errorGeneric: string;\r\n discard: {\r\n title: string;\r\n content: string;\r\n confirm: string;\r\n cancel: string;\r\n };\r\n}\r\n\r\nexport interface MfDatePickerLabels {\r\n today: string;\r\n clear: string;\r\n apply: string;\r\n previousMonth: string;\r\n nextMonth: string;\r\n previousYear: string;\r\n nextYear: string;\r\n chooseMonth: string;\r\n chooseYear: string;\r\n startDate: string;\r\n endDate: string;\r\n placeholder: string;\r\n presetToday: string;\r\n presetLast7: string;\r\n presetLast30: string;\r\n presetThisMonth: string;\r\n /** DateTimePicker alt alanlarının adları. */\r\n date: string;\r\n time: string;\r\n}\r\n\r\nexport interface MfTimePickerLabels {\r\n placeholder: string;\r\n clear: string;\r\n}\r\n\r\nexport interface MfTableFilterOperatorLabels {\r\n equal: string;\r\n notEqual: string;\r\n greaterThan: string;\r\n greaterOrEqual: string;\r\n lessThan: string;\r\n lessOrEqual: string;\r\n contains: string;\r\n startsWith: string;\r\n endsWith: string;\r\n in: string;\r\n isNull: string;\r\n isNotNull: string;\r\n between: string;\r\n}\r\n\r\nexport interface MfTableFilterLabels {\r\n addFilter: string;\r\n searchField: string;\r\n noField: string;\r\n operator: string;\r\n value: string;\r\n apply: string;\r\n enterHint: string;\r\n clearAll: string;\r\n and: string;\r\n or: string;\r\n remove: string;\r\n back: string;\r\n dateToday: string;\r\n dateLast7: string;\r\n dateLast30: string;\r\n dateThisMonth: string;\r\n dateCustom: string;\r\n dateFrom: string;\r\n dateTo: string;\r\n operators: MfTableFilterOperatorLabels;\r\n}\r\n\r\nexport interface MfTablePaginationLabels {\r\n records: string;\r\n perPage: string;\r\n page: string;\r\n previous: string;\r\n next: string;\r\n first: string;\r\n last: string;\r\n pageSizeAriaLabel: string;\r\n navAriaLabel: string;\r\n jumpToPage: string;\r\n go: string;\r\n}\r\n\r\nexport interface MfTableLabels {\r\n searchPlaceholder: string;\r\n selectedCount: string;\r\n edit: string;\r\n delete: string;\r\n clearSelection: string;\r\n emptyTitle: string;\r\n emptyDescription: string;\r\n noResultsTitle: string;\r\n noResultsDescription: string;\r\n clearFilters: string;\r\n filterCount: string;\r\n selectAllAriaLabel: string;\r\n selectRowAriaLabel: string;\r\n actionsColumnLabel: string;\r\n columns: string;\r\n density: string;\r\n densityComfortable: string;\r\n densityCompact: string;\r\n resizeColumn: string;\r\n expandRow: string;\r\n collapseRow: string;\r\n filter: MfTableFilterLabels;\r\n pagination: MfTablePaginationLabels;\r\n}\r\n\r\nexport interface MfSidebarLabels {\r\n collapse: string;\r\n expand: string;\r\n switchTenant: string;\r\n noTenants: string;\r\n noUser: string;\r\n nav: string;\r\n}\r\n\r\nexport interface MfTabsLabels {\r\n scrollStart: string;\r\n scrollEnd: string;\r\n close: string;\r\n}\r\n\r\nexport interface MfDropzoneLabels {\r\n label: string;\r\n}\r\n\r\nexport interface MfColorPickerLabels {\r\n ariaLabel: string;\r\n hexAriaLabel: string;\r\n pickFromScreenAriaLabel: string;\r\n}\r\n\r\nexport interface MfBoxInputLabels {\r\n top: string;\r\n right: string;\r\n bottom: string;\r\n left: string;\r\n linkSides: string;\r\n unlinkSides: string;\r\n}\r\n\r\nexport interface MfComboboxLabels {\r\n placeholder: string;\r\n noResults: string;\r\n /** `creatable` satırı — `{query}` yazılan metinle değiştirilir. */\r\n create: string;\r\n /** Çoklu seçimde çip kaldırma düğmesi — `{label}` seçenek adıyla değiştirilir. */\r\n remove: string;\r\n}\r\n\r\nexport interface MfSelectLabels {\r\n placeholder: string;\r\n}\r\n\r\nexport interface MfSearchInputLabels {\r\n placeholder: string;\r\n ariaLabel: string;\r\n clearAriaLabel: string;\r\n}\r\n\r\nexport interface MfToastLabels {\r\n dismiss: string;\r\n}\r\n\r\nexport interface MfOtpInputLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfStepperLabels {\r\n ariaLabel: string;\r\n /** İsteğe bağlı adım etiketi. */\r\n optional: string;\r\n /** Ekran okuyucu için adım durumu (ikon yalnızca görsel). */\r\n completed: string;\r\n error: string;\r\n}\r\n\r\nexport interface MfProgressLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfPasswordInputLabels {\r\n show: string;\r\n hide: string;\r\n}\r\n\r\nexport interface MfQrCodeLabels {\r\n /** `role=\"img\"` için varsayılan erişilebilir ad. */\r\n ariaLabel: string;\r\n /** İçerik seçilen hata düzeltme seviyesiyle sığmadığında. */\r\n error: string;\r\n}\r\n\r\nexport interface MfChipLabels {\r\n remove: string;\r\n}\r\n\r\nexport interface MfAlertLabels {\r\n dismiss: string;\r\n}\r\n\r\nexport interface MfBreadcrumbLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfAvatarGroupLabels {\r\n /** \"+N\" göstergesinin aria-label'ı — `overflowCount() + ' ' + overflowAriaLabel`. */\r\n overflowAriaLabel: string;\r\n}\r\n\r\n/** Grafik ailesi (LineChart/Sparkline) — tablo görünümü anahtarı (grafiğin erişilebilir ikizi) ve tablonun ilk sütun başlığı. */\r\n/** Ağaçtan seçim (`mf-tree-select`). */\r\nexport interface MfTreeSelectLabels {\r\n placeholder: string;\r\n searchPlaceholder: string;\r\n noResults: string;\r\n}\r\n\r\n/** Açık/koyu/sistem değiştirici (`mf-theme-switcher`). */\r\nexport interface MfThemeSwitcherLabels {\r\n ariaLabel: string;\r\n light: string;\r\n dark: string;\r\n system: string;\r\n}\r\n\r\n/** Puanlama — `outOf` iki sayının ARASINA yazılır (\"3 out of 5\"). */\r\nexport interface MfRatingLabels {\r\n ariaLabel: string;\r\n outOf: string;\r\n}\r\n\r\n/** Ürün turu — `stepOf` iki sayının ARASINA yazılır (\"2 of 5\"). */\r\nexport interface MfTourLabels {\r\n next: string;\r\n back: string;\r\n skip: string;\r\n done: string;\r\n stepOf: string;\r\n}\r\n\r\n/** Bağımsız sayfalama (`mf-pagination`) — `page` sayının ÖNÜNE yazılır (\"Page 3\"). */\r\nexport interface MfPaginationLabels {\r\n navAriaLabel: string;\r\n previous: string;\r\n next: string;\r\n first: string;\r\n last: string;\r\n page: string;\r\n}\r\n\r\n/** Kopyala düğmesi + kod bloğu (`code` = kaydırılabilir kod bölgesinin erişilebilir adı). */\r\nexport interface MfCopyLabels {\r\n copy: string;\r\n copied: string;\r\n failed: string;\r\n code: string;\r\n}\r\n\r\n/** Karakter sayacı — sayıların ARDINA yazılır (\"12 characters remaining\"). */\r\nexport interface MfCharacterCountLabels {\r\n remaining: string;\r\n overLimit: string;\r\n characters: string;\r\n}\r\n\r\n/** Komut paleti (`mf-command`) — `resultsCount` sayının ARDINA yazılır (\"8 results\"). */\r\nexport interface MfCommandLabels {\r\n placeholder: string;\r\n ariaLabel: string;\r\n empty: string;\r\n resultsCount: string;\r\n navigate: string;\r\n select: string;\r\n close: string;\r\n}\r\n\r\nexport interface MfChartLabels {\r\n showTable: string;\r\n showChart: string;\r\n category: string;\r\n}\r\n\r\n/** StatTile değişim yönünün ekran okuyucu metni (ikon yalnızca görsel). */\r\nexport interface MfStatTileLabels {\r\n increase: string;\r\n decrease: string;\r\n noChange: string;\r\n}\r\n\r\n/** RangeSlider tutamaçlarının erişilebilir adları. */\r\nexport interface MfSliderLabels {\r\n minThumb: string;\r\n maxThumb: string;\r\n}\r\n\r\nexport interface MfSplitButtonLabels {\r\n /** Menü (▾) düğmesinin erişilebilir adı. */\r\n moreActions: string;\r\n}\r\n\r\nexport interface MfFileUploadLabels {\r\n uploading: string;\r\n done: string;\r\n failed: string;\r\n queued: string;\r\n retry: string;\r\n cancel: string;\r\n remove: string;\r\n /** Liste başlığı — `{count}` dosya sayısıyla değiştirilir. */\r\n files: string;\r\n}\r\n\r\n/**\r\n * Sıralanabilir liste/Kanban klavye duyuruları. Yer tutucular: `{item}`,\r\n * `{position}`, `{total}`, `{column}`.\r\n */\r\nexport interface MfSortableLabels {\r\n instructions: string;\r\n grabbed: string;\r\n moved: string;\r\n movedToColumn: string;\r\n dropped: string;\r\n cancelled: string;\r\n dragHandle: string;\r\n /** Kanban kartının `aria-roledescription`'ı. */\r\n card: string;\r\n}\r\n\r\nexport interface MfCountdownLabels {\r\n days: string;\r\n hours: string;\r\n minutes: string;\r\n seconds: string;\r\n /** Ekran okuyucu özeti — `{time}` kalan süre metniyle değiştirilir. */\r\n remaining: string;\r\n finished: string;\r\n}\r\n\r\nexport interface MfCarouselLabels {\r\n previous: string;\r\n next: string;\r\n /** `{index}` / `{total}` */\r\n slide: string;\r\n pause: string;\r\n play: string;\r\n /** Nokta düğmeleri — `{index}` */\r\n goTo: string;\r\n carousel: string;\r\n}\r\n\r\nexport interface MfInlineEditLabels {\r\n edit: string;\r\n save: string;\r\n cancel: string;\r\n empty: string;\r\n}\r\n\r\nexport interface MfTransferListLabels {\r\n available: string;\r\n selected: string;\r\n moveRight: string;\r\n moveLeft: string;\r\n moveAllRight: string;\r\n moveAllLeft: string;\r\n search: string;\r\n /** `{selected}` / `{total}` */\r\n count: string;\r\n empty: string;\r\n}\r\n\r\nexport interface MfLightboxLabels {\r\n close: string;\r\n previous: string;\r\n next: string;\r\n zoomIn: string;\r\n zoomOut: string;\r\n /** `{index}` / `{total}` */\r\n counter: string;\r\n gallery: string;\r\n}\r\n\r\nexport interface MfNotificationCenterLabels {\r\n title: string;\r\n markAllRead: string;\r\n empty: string;\r\n emptyDescription: string;\r\n unread: string;\r\n /** Tetikleyici adı — `{count}` okunmamış sayısı. */\r\n trigger: string;\r\n viewAll: string;\r\n}\r\n\r\nexport interface MfAgendaLabels {\r\n allDay: string;\r\n empty: string;\r\n today: string;\r\n tomorrow: string;\r\n}\r\n\r\nexport interface MfMentionLabels {\r\n suggestions: string;\r\n noResults: string;\r\n}\r\n\r\nexport interface MfAuthCardLabels {\r\n title: string;\r\n description: string;\r\n email: string;\r\n emailPlaceholder: string;\r\n password: string;\r\n forgotPassword: string;\r\n remember: string;\r\n submit: string;\r\n /** Sağlayıcı düğmeleriyle e-posta formu arasındaki ayırıcı. */\r\n divider: string;\r\n noAccount: string;\r\n signUp: string;\r\n emailRequired: string;\r\n emailInvalid: string;\r\n passwordRequired: string;\r\n errorTitle: string;\r\n}\r\n\r\nexport interface MfInviteMembersLabels {\r\n title: string;\r\n description: string;\r\n emails: string;\r\n emailsPlaceholder: string;\r\n role: string;\r\n submit: string;\r\n /** `{emails}` — geçersiz adresler virgülle. */\r\n invalidEmails: string;\r\n emailsRequired: string;\r\n}\r\n\r\nexport interface MfPanelGroupLabels {\r\n /** Ayırıcı adı — `{index}` */\r\n resize: string;\r\n}\r\n\r\nexport interface MfLabels {\r\n common: MfCommonLabels;\r\n dialog: MfDialogLabels;\r\n datePicker: MfDatePickerLabels;\r\n timePicker: MfTimePickerLabels;\r\n table: MfTableLabels;\r\n sidebar: MfSidebarLabels;\r\n tabs: MfTabsLabels;\r\n dropzone: MfDropzoneLabels;\r\n colorPicker: MfColorPickerLabels;\r\n boxInput: MfBoxInputLabels;\r\n combobox: MfComboboxLabels;\r\n select: MfSelectLabels;\r\n searchInput: MfSearchInputLabels;\r\n toast: MfToastLabels;\r\n otpInput: MfOtpInputLabels;\r\n stepper: MfStepperLabels;\r\n progress: MfProgressLabels;\r\n passwordInput: MfPasswordInputLabels;\r\n qrCode: MfQrCodeLabels;\r\n chip: MfChipLabels;\r\n alert: MfAlertLabels;\r\n breadcrumb: MfBreadcrumbLabels;\r\n avatarGroup: MfAvatarGroupLabels;\r\n chart: MfChartLabels;\r\n command: MfCommandLabels;\r\n characterCount: MfCharacterCountLabels;\r\n copy: MfCopyLabels;\r\n pagination: MfPaginationLabels;\r\n tour: MfTourLabels;\r\n rating: MfRatingLabels;\r\n themeSwitcher: MfThemeSwitcherLabels;\r\n treeSelect: MfTreeSelectLabels;\r\n statTile: MfStatTileLabels;\r\n slider: MfSliderLabels;\r\n splitButton: MfSplitButtonLabels;\r\n fileUpload: MfFileUploadLabels;\r\n sortable: MfSortableLabels;\r\n countdown: MfCountdownLabels;\r\n carousel: MfCarouselLabels;\r\n inlineEdit: MfInlineEditLabels;\r\n transferList: MfTransferListLabels;\r\n lightbox: MfLightboxLabels;\r\n notificationCenter: MfNotificationCenterLabels;\r\n agenda: MfAgendaLabels;\r\n mention: MfMentionLabels;\r\n panelGroup: MfPanelGroupLabels;\r\n authCard: MfAuthCardLabels;\r\n inviteMembers: MfInviteMembersLabels;\r\n}\r\n\r\n/** `provideMesgflowUi({ labels })`'ın kabul ettiği şekil — her alt-alan opsiyonel, verilmeyen her yaprak `mfLabelsEn`'den gelir. */\r\nexport type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;\r\n\r\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n}\r\n\r\n/** `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. */\r\nexport function mergeLabels<T>(base: T, override: DeepPartial<T> | undefined): T {\r\n if (!override) return base;\r\n if (!isPlainObject(base) || !isPlainObject(override)) return override as T;\r\n const baseObj = base as Record<string, unknown>;\r\n const overrideObj = override as Record<string, unknown>;\r\n const result: Record<string, unknown> = { ...baseObj };\r\n for (const key of Object.keys(overrideObj)) {\r\n const overrideValue = overrideObj[key];\r\n if (overrideValue === undefined) continue;\r\n result[key] = mergeLabels(baseObj[key], overrideValue as DeepPartial<unknown>);\r\n }\r\n return result as T;\r\n}\r\n","import type { MfLabels } from './labels';\r\n\r\n/**\r\n * `MF_LABELS`'ın varsayılan değeri — hiçbir `provideMesgflowUi()` çağrısı\r\n * olmayan bir tüketici uygulamada bileşenler bu İngilizce metinlerle çalışır\r\n * (bkz. CLAUDE.md/plan kararı: \"bileşen varsayılan metinleri İngilizce\").\r\n * Türkçe çeviri kümesi için bkz. `@mesgflow/ui-kit/i18n/tr`'nin `mfLabelsTr`'si —\r\n * bu iki dosya AYNI şekli (bkz. `labels.ts`), farklı değerleri taşır.\r\n */\r\nexport const mfLabelsEn: MfLabels = {\r\n common: {\r\n loading: 'Loading',\r\n clear: 'Clear',\r\n remove: 'Remove',\r\n },\r\n dialog: {\r\n close: 'Close dialog',\r\n resize: 'Resize',\r\n fullscreenEnter: 'Enter fullscreen',\r\n fullscreenExit: 'Exit fullscreen',\r\n confirmOk: 'OK',\r\n confirmCancel: 'Cancel',\r\n confirmConfirm: 'Confirm',\r\n confirmDelete: 'Delete',\r\n errorGeneric: 'Something went wrong. Please try again.',\r\n discard: {\r\n title: 'Unsaved changes',\r\n content: 'Closing this panel will discard what you entered.',\r\n confirm: 'Discard and close',\r\n cancel: 'Keep editing',\r\n },\r\n },\r\n datePicker: {\r\n today: 'Today',\r\n clear: 'Clear',\r\n apply: 'Apply',\r\n previousMonth: 'Previous month',\r\n nextMonth: 'Next month',\r\n previousYear: 'Previous year',\r\n nextYear: 'Next year',\r\n chooseMonth: 'Choose month',\r\n chooseYear: 'Choose year',\r\n startDate: 'Start',\r\n endDate: 'End',\r\n placeholder: 'mm/dd/yyyy',\r\n presetToday: 'Today',\r\n presetLast7: 'Last 7 days',\r\n presetLast30: 'Last 30 days',\r\n presetThisMonth: 'This month',\r\n date: 'Date',\r\n time: 'Time',\r\n },\r\n timePicker: {\r\n placeholder: 'hh:mm',\r\n clear: 'Clear',\r\n },\r\n table: {\r\n searchPlaceholder: 'Search...',\r\n selectedCount: 'selected',\r\n edit: 'Edit',\r\n delete: 'Delete',\r\n clearSelection: 'Clear selection',\r\n emptyTitle: 'No records',\r\n emptyDescription: '',\r\n noResultsTitle: 'No results found',\r\n noResultsDescription: 'Try a different search or filter.',\r\n clearFilters: 'Clear filters',\r\n filterCount: 'filters',\r\n selectAllAriaLabel: 'Select all',\r\n selectRowAriaLabel: 'Select row',\r\n actionsColumnLabel: 'Actions',\r\n columns: 'Columns',\r\n density: 'Density',\r\n densityComfortable: 'Comfortable',\r\n densityCompact: 'Compact',\r\n resizeColumn: 'Resize column',\r\n expandRow: 'Expand row',\r\n collapseRow: 'Collapse row',\r\n filter: {\r\n addFilter: 'Filter',\r\n searchField: 'Search field...',\r\n noField: 'No field found',\r\n operator: 'Operator',\r\n value: 'Value',\r\n apply: 'Apply',\r\n enterHint: 'Enter',\r\n clearAll: 'Clear',\r\n and: 'AND',\r\n or: 'OR',\r\n remove: 'Remove',\r\n back: 'Back',\r\n dateToday: 'Today',\r\n dateLast7: 'Last 7 days',\r\n dateLast30: 'Last 30 days',\r\n dateThisMonth: 'This month',\r\n dateCustom: 'Custom range',\r\n dateFrom: 'Start',\r\n dateTo: 'End',\r\n operators: {\r\n equal: 'equals',\r\n notEqual: 'not equal to',\r\n greaterThan: 'greater than',\r\n greaterOrEqual: 'greater than or equal to',\r\n lessThan: 'less than',\r\n lessOrEqual: 'less than or equal to',\r\n contains: 'contains',\r\n startsWith: 'starts with',\r\n endsWith: 'ends with',\r\n in: 'is one of',\r\n isNull: 'is empty',\r\n isNotNull: 'is not empty',\r\n between: 'is between',\r\n },\r\n },\r\n pagination: {\r\n records: 'records',\r\n perPage: 'per page',\r\n page: 'Page',\r\n previous: 'Previous',\r\n next: 'Next',\r\n first: 'First page',\r\n last: 'Last page',\r\n pageSizeAriaLabel: 'Page size',\r\n navAriaLabel: 'Pagination',\r\n jumpToPage: 'Jump to page',\r\n go: 'Go',\r\n },\r\n },\r\n sidebar: {\r\n collapse: 'Collapse menu',\r\n expand: 'Expand menu',\r\n switchTenant: 'Switch tenant',\r\n noTenants: 'No tenants found',\r\n noUser: 'Not signed in',\r\n nav: 'Main navigation',\r\n },\r\n tabs: {\r\n scrollStart: 'Scroll back',\r\n scrollEnd: 'Scroll forward',\r\n close: 'Close',\r\n },\r\n dropzone: {\r\n label: 'Drag files here or click to browse',\r\n },\r\n colorPicker: {\r\n ariaLabel: 'Pick color',\r\n hexAriaLabel: 'Hex color code',\r\n pickFromScreenAriaLabel: 'Pick color from screen',\r\n },\r\n boxInput: {\r\n top: 'Top',\r\n right: 'Right',\r\n bottom: 'Bottom',\r\n left: 'Left',\r\n linkSides: 'Link sides',\r\n unlinkSides: 'Unlink sides',\r\n },\r\n combobox: {\r\n placeholder: 'Search...',\r\n noResults: 'No results',\r\n create: 'Create “{query}”',\r\n remove: 'Remove {label}',\r\n },\r\n select: {\r\n placeholder: 'Select',\r\n },\r\n searchInput: {\r\n placeholder: 'Search...',\r\n ariaLabel: 'Search',\r\n clearAriaLabel: 'Clear',\r\n },\r\n toast: {\r\n dismiss: 'Dismiss',\r\n },\r\n otpInput: {\r\n ariaLabel: 'One-time code',\r\n },\r\n stepper: {\r\n ariaLabel: 'Steps',\r\n optional: 'Optional',\r\n completed: 'Completed',\r\n error: 'Needs attention',\r\n },\r\n progress: {\r\n ariaLabel: 'Progress',\r\n },\r\n passwordInput: {\r\n show: 'Show',\r\n hide: 'Hide',\r\n },\r\n qrCode: {\r\n ariaLabel: 'QR code',\r\n error: 'QR code could not be generated: the content is too long.',\r\n },\r\n chip: {\r\n remove: 'Remove',\r\n },\r\n alert: {\r\n dismiss: 'Dismiss',\r\n },\r\n breadcrumb: {\r\n ariaLabel: 'Breadcrumb',\r\n },\r\n avatarGroup: {\r\n overflowAriaLabel: 'more',\r\n },\r\n chart: {\r\n showTable: 'Show as table',\r\n showChart: 'Show as chart',\r\n category: 'Category',\r\n },\r\n command: {\r\n placeholder: 'Type a command or search…',\r\n ariaLabel: 'Command palette',\r\n empty: 'No results found.',\r\n resultsCount: 'results',\r\n navigate: 'to navigate',\r\n select: 'to select',\r\n close: 'to close',\r\n },\r\n characterCount: {\r\n remaining: 'characters remaining',\r\n overLimit: 'characters over the limit',\r\n characters: 'characters',\r\n },\r\n copy: {\r\n copy: 'Copy',\r\n copied: 'Copied',\r\n failed: 'Copy failed',\r\n code: 'Code',\r\n },\r\n pagination: {\r\n navAriaLabel: 'Pagination',\r\n previous: 'Previous page',\r\n next: 'Next page',\r\n first: 'First page',\r\n last: 'Last page',\r\n page: 'Page',\r\n },\r\n tour: {\r\n next: 'Next',\r\n back: 'Back',\r\n skip: 'Skip tour',\r\n done: 'Done',\r\n stepOf: 'of',\r\n },\r\n rating: {\r\n ariaLabel: 'Rating',\r\n outOf: 'out of',\r\n },\r\n themeSwitcher: {\r\n ariaLabel: 'Color theme',\r\n light: 'Light',\r\n dark: 'Dark',\r\n system: 'System',\r\n },\r\n treeSelect: {\r\n placeholder: 'Select',\r\n searchPlaceholder: 'Search…',\r\n noResults: 'No results',\r\n },\r\n statTile: {\r\n increase: 'Increase',\r\n decrease: 'Decrease',\r\n noChange: 'No change',\r\n },\r\n slider: {\r\n minThumb: 'Minimum',\r\n maxThumb: 'Maximum',\r\n },\r\n splitButton: {\r\n moreActions: 'More actions',\r\n },\r\n fileUpload: {\r\n uploading: 'Uploading…',\r\n done: 'Uploaded',\r\n failed: 'Upload failed',\r\n queued: 'Waiting…',\r\n retry: 'Retry',\r\n cancel: 'Cancel',\r\n remove: 'Remove',\r\n files: '{count} files',\r\n },\r\n sortable: {\r\n instructions: 'Press Space to pick up, arrow keys to move, Space to drop, Escape to cancel.',\r\n grabbed: '{item} grabbed. Position {position} of {total}.',\r\n moved: '{item} moved to position {position} of {total}.',\r\n movedToColumn: '{item} moved to {column}, position {position} of {total}.',\r\n dropped: '{item} dropped at position {position} of {total}.',\r\n cancelled: 'Move cancelled. {item} returned to position {position}.',\r\n dragHandle: 'Reorder {item}',\r\n card: 'card',\r\n },\r\n countdown: {\r\n days: 'days',\r\n hours: 'hours',\r\n minutes: 'minutes',\r\n seconds: 'seconds',\r\n remaining: '{time} remaining',\r\n finished: 'Time is up',\r\n },\r\n carousel: {\r\n previous: 'Previous slide',\r\n next: 'Next slide',\r\n slide: '{index} of {total}',\r\n pause: 'Pause autoplay',\r\n play: 'Start autoplay',\r\n goTo: 'Go to slide {index}',\r\n carousel: 'Carousel',\r\n },\r\n inlineEdit: {\r\n edit: 'Edit',\r\n save: 'Save',\r\n cancel: 'Cancel',\r\n empty: 'Click to add',\r\n },\r\n transferList: {\r\n available: 'Available',\r\n selected: 'Selected',\r\n moveRight: 'Move selected right',\r\n moveLeft: 'Move selected left',\r\n moveAllRight: 'Move all right',\r\n moveAllLeft: 'Move all left',\r\n search: 'Search',\r\n count: '{selected} of {total} selected',\r\n empty: 'No items',\r\n },\r\n lightbox: {\r\n close: 'Close',\r\n previous: 'Previous image',\r\n next: 'Next image',\r\n zoomIn: 'Zoom in',\r\n zoomOut: 'Zoom out',\r\n counter: '{index} of {total}',\r\n gallery: 'Image viewer',\r\n },\r\n notificationCenter: {\r\n title: 'Notifications',\r\n markAllRead: 'Mark all as read',\r\n empty: 'You are all caught up',\r\n emptyDescription: 'New notifications will show up here.',\r\n unread: 'Unread',\r\n trigger: 'Notifications, {count} unread',\r\n viewAll: 'View all',\r\n },\r\n agenda: {\r\n allDay: 'All day',\r\n empty: 'Nothing scheduled',\r\n today: 'Today',\r\n tomorrow: 'Tomorrow',\r\n },\r\n mention: {\r\n suggestions: 'Suggestions',\r\n noResults: 'No matches',\r\n },\r\n panelGroup: {\r\n resize: 'Resize panel {index}',\r\n },\r\n authCard: {\r\n title: 'Welcome back',\r\n description: 'Sign in to continue to your workspace.',\r\n email: 'Email',\r\n emailPlaceholder: 'you@company.com',\r\n password: 'Password',\r\n forgotPassword: 'Forgot password?',\r\n remember: 'Keep me signed in',\r\n submit: 'Sign in',\r\n divider: 'or continue with email',\r\n noAccount: 'New here?',\r\n signUp: 'Create an account',\r\n emailRequired: 'Email is required',\r\n emailInvalid: 'Enter a valid email',\r\n passwordRequired: 'Password is required',\r\n errorTitle: 'Sign-in failed',\r\n },\r\n inviteMembers: {\r\n title: 'Invite teammates',\r\n description: 'They will receive an email with a link to join.',\r\n emails: 'Email addresses',\r\n emailsPlaceholder: 'name@company.com, press Enter',\r\n role: 'Role',\r\n submit: 'Send invites',\r\n invalidEmails: 'Not valid: {emails}',\r\n emailsRequired: 'Add at least one email address',\r\n },\r\n};\r\n","import { computed, inject, InjectionToken, type Signal, signal } from '@angular/core';\r\nimport { enUS, type Locale } from 'date-fns/locale';\r\nimport type { MfLabels } from './labels';\r\nimport { mfLabelsEn } from './labels.en';\r\n\r\n/**\r\n * Kitin TEK metin kaynağı — `provideMesgflowUi()` (bkz. `provide.ts`)\r\n * `provide` etmezse tüketici İngilizce varsayılanlarla çalışır (ng-zorro'nun\r\n * `NZ_I18N`'i / PrimeNG'nin `providePrimeNG` config'iyle aynı desen — bu kit\r\n * daha önce sadece Dialog için uyguluyordu, `MF_DIALOG_LABELS` artık bu\r\n * token'dan türeyen bir \"seçici\" — bkz. aşağıdaki `labelToken`).\r\n */\r\nexport const MF_LABELS = new InjectionToken<Signal<MfLabels>>('mesgflow.labels', {\r\n factory: () => signal(mfLabelsEn),\r\n});\r\n\r\n/** Calendar/DatePicker'ın ay/gün adları için — varsayılan `enUS`, `provideMesgflowUi({ dateLocale })` ile değiştirilir. */\r\nexport const MF_DATE_LOCALE = new InjectionToken<Signal<Locale>>('mesgflow.date-locale', {\r\n factory: () => signal(enUS),\r\n});\r\n\r\n/**\r\n * `MF_LABELS`'ın bir alt-alanına daralan, reaktif bir \"seçici\" token üretir\r\n * — her bileşen ailesi umbrella nesnenin TAMAMINI değil sadece kendi\r\n * alanını inject eder. `computed()` içindeki `labels` referansı DIŞARIDA\r\n * (factory'nin senkron gövdesinde) `inject()` edildiği için geçerli bir DI\r\n * bağlamında çözülüyor; `computed`'ın kendi callback'i içinde `inject()`\r\n * çağırmak ÇALIŞMAZ (lazy değerlendirme DI bağlamının dışında kalır).\r\n */\r\nfunction labelToken<K extends keyof MfLabels>(key: K, name: string) {\r\n return new InjectionToken<Signal<MfLabels[K]>>(`mesgflow.${name}-labels`, {\r\n factory: () => {\r\n const labels = inject(MF_LABELS);\r\n return computed(() => labels()[key]);\r\n },\r\n });\r\n}\r\n\r\nexport const MF_COMMON_LABELS = labelToken('common', 'common');\r\nexport const MF_DIALOG_LABELS = labelToken('dialog', 'dialog');\r\nexport const MF_DATE_PICKER_LABELS = labelToken('datePicker', 'date-picker');\r\nexport const MF_TIME_PICKER_LABELS = labelToken('timePicker', 'time-picker');\r\nexport const MF_TABLE_LABELS = labelToken('table', 'table');\r\nexport const MF_SIDEBAR_LABELS = labelToken('sidebar', 'sidebar');\r\nexport const MF_TABS_LABELS = labelToken('tabs', 'tabs');\r\nexport const MF_DROPZONE_LABELS = labelToken('dropzone', 'dropzone');\r\nexport const MF_COLOR_PICKER_LABELS = labelToken('colorPicker', 'color-picker');\r\nexport const MF_BOX_INPUT_LABELS = labelToken('boxInput', 'box-input');\r\nexport const MF_COMBOBOX_LABELS = labelToken('combobox', 'combobox');\r\nexport const MF_SELECT_LABELS = labelToken('select', 'select');\r\nexport const MF_SEARCH_INPUT_LABELS = labelToken('searchInput', 'search-input');\r\nexport const MF_TOAST_LABELS = labelToken('toast', 'toast');\r\nexport const MF_OTP_INPUT_LABELS = labelToken('otpInput', 'otp-input');\r\nexport const MF_STEPPER_LABELS = labelToken('stepper', 'stepper');\r\nexport const MF_PROGRESS_LABELS = labelToken('progress', 'progress');\r\nexport const MF_PASSWORD_INPUT_LABELS = labelToken('passwordInput', 'password-input');\r\nexport const MF_QR_CODE_LABELS = labelToken('qrCode', 'qr-code');\r\nexport const MF_CHIP_LABELS = labelToken('chip', 'chip');\r\nexport const MF_ALERT_LABELS = labelToken('alert', 'alert');\r\nexport const MF_BREADCRUMB_LABELS = labelToken('breadcrumb', 'breadcrumb');\r\nexport const MF_AVATAR_GROUP_LABELS = labelToken('avatarGroup', 'avatar-group');\r\nexport const MF_CHART_LABELS = labelToken('chart', 'chart');\r\nexport const MF_COMMAND_LABELS = labelToken('command', 'command');\r\nexport const MF_CHARACTER_COUNT_LABELS = labelToken('characterCount', 'character-count');\r\nexport const MF_COPY_LABELS = labelToken('copy', 'copy');\r\nexport const MF_PAGINATION_LABELS = labelToken('pagination', 'pagination');\r\nexport const MF_TOUR_LABELS = labelToken('tour', 'tour');\r\nexport const MF_RATING_LABELS = labelToken('rating', 'rating');\r\nexport const MF_THEME_SWITCHER_LABELS = labelToken('themeSwitcher', 'theme-switcher');\r\nexport const MF_TREE_SELECT_LABELS = labelToken('treeSelect', 'tree-select');\r\nexport const MF_STAT_TILE_LABELS = labelToken('statTile', 'stat-tile');\r\nexport const MF_SLIDER_LABELS = labelToken('slider', 'slider');\r\nexport const MF_SPLIT_BUTTON_LABELS = labelToken('splitButton', 'split-button');\r\nexport const MF_FILE_UPLOAD_LABELS = labelToken('fileUpload', 'file-upload');\r\nexport const MF_SORTABLE_LABELS = labelToken('sortable', 'sortable');\r\nexport const MF_COUNTDOWN_LABELS = labelToken('countdown', 'countdown');\r\nexport const MF_CAROUSEL_LABELS = labelToken('carousel', 'carousel');\r\nexport const MF_INLINE_EDIT_LABELS = labelToken('inlineEdit', 'inline-edit');\r\nexport const MF_TRANSFER_LIST_LABELS = labelToken('transferList', 'transfer-list');\r\nexport const MF_LIGHTBOX_LABELS = labelToken('lightbox', 'lightbox');\r\nexport const MF_NOTIFICATION_CENTER_LABELS = labelToken(\r\n 'notificationCenter',\r\n 'notification-center',\r\n);\r\nexport const MF_AGENDA_LABELS = labelToken('agenda', 'agenda');\r\nexport const MF_MENTION_LABELS = labelToken('mention', 'mention');\r\nexport const MF_PANEL_GROUP_LABELS = labelToken('panelGroup', 'panel-group');\r\nexport const MF_AUTH_CARD_LABELS = labelToken('authCard', 'auth-card');\r\nexport const MF_INVITE_MEMBERS_LABELS = labelToken('inviteMembers', 'invite-members');\r\n","import {\r\n computed,\r\n type EnvironmentProviders,\r\n isSignal,\r\n makeEnvironmentProviders,\r\n type Provider,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport type { Locale } from 'date-fns/locale';\r\nimport { type DeepPartial, mergeLabels, type MfLabels } from './labels';\r\nimport { mfLabelsEn } from './labels.en';\r\nimport { MF_DATE_LOCALE, MF_LABELS } from './tokens';\r\n\r\nexport interface ProvideMesgflowUiOptions {\r\n /**\r\n * `mfLabelsEn`'in üstüne yazılacak alanlar — ya sabit bir `DeepPartial<MfLabels>`\r\n * (ör. `mfLabelsTr`, bkz. `@mesgflow/ui-kit/i18n/tr`) ya da tüketicinin kendi\r\n * i18n sistemine bağlı, dil değişince CANLI güncellenen bir `Signal`. Her\r\n * iki durumda da verilmeyen her yaprak `mfLabelsEn`'den gelir — TAM bir\r\n * `MfLabels` nesnesi sağlamak ZORUNLU değil.\r\n */\r\n labels?: DeepPartial<MfLabels> | Signal<DeepPartial<MfLabels>>;\r\n /** Calendar/DatePicker ay/gün adları — varsayılan `date-fns/locale`'in `enUS`'u. Dil değişince canlı güncellenmesi için bir `Signal` da verilebilir. */\r\n dateLocale?: Locale | Signal<Locale>;\r\n}\r\n\r\n/**\r\n * `app.config.ts`'in `providers` dizisine eklenir — `MF_LABELS`/`MF_DATE_LOCALE`'ı\r\n * (ve bunlardan türeyen `MF_DIALOG_LABELS`/`MF_TABLE_LABELS`/… seçici\r\n * token'larını, bkz. `tokens.ts`) tüketicinin verdiği değerlerle sağlar.\r\n * Hiç çağrılmazsa kit İngilizce varsayılanlarla (`mfLabelsEn`, `enUS`) çalışır.\r\n *\r\n * ```ts\r\n * import { provideMesgflowUi } from '@mesgflow/ui-kit';\r\n * import { mfLabelsTr } from '@mesgflow/ui-kit/i18n/tr';\r\n * import { tr } from 'date-fns/locale';\r\n *\r\n * providers: [provideMesgflowUi({ labels: mfLabelsTr, dateLocale: tr })]\r\n * ```\r\n */\r\nexport function provideMesgflowUi(options: ProvideMesgflowUiOptions = {}): EnvironmentProviders {\r\n const providers: Provider[] = [];\r\n\r\n if (options.labels !== undefined) {\r\n const labelsOption = options.labels;\r\n providers.push({\r\n provide: MF_LABELS,\r\n useFactory: () =>\r\n isSignal(labelsOption)\r\n ? computed(() => mergeLabels(mfLabelsEn, labelsOption()))\r\n : signal(mergeLabels(mfLabelsEn, labelsOption)),\r\n });\r\n }\r\n\r\n if (options.dateLocale) {\r\n const dateLocale = options.dateLocale;\r\n providers.push({\r\n provide: MF_DATE_LOCALE,\r\n useFactory: () => (isSignal(dateLocale) ? dateLocale : signal(dateLocale)),\r\n });\r\n }\r\n\r\n return makeEnvironmentProviders(providers);\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-core.mjs","sources":["../../../projects/ui-kit/core/cn.ts","../../../projects/ui-kit/core/direction.ts","../../../projects/ui-kit/core/recipes.ts","../../../projects/ui-kit/core/a11y/ids.ts","../../../projects/ui-kit/core/forms/value-accessor.ts","../../../projects/ui-kit/core/overlay/placements.ts","../../../projects/ui-kit/core/motion.ts","../../../projects/ui-kit/core/sliding-indicator.ts","../../../projects/ui-kit/core/i18n/labels.ts","../../../projects/ui-kit/core/i18n/labels.en.ts","../../../projects/ui-kit/core/i18n/tokens.ts","../../../projects/ui-kit/core/i18n/provide.ts","../../../projects/ui-kit/core/mesgflow-ui-kit-core.ts"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\r\nimport { extendTailwindMerge } from 'tailwind-merge';\r\n\r\n/**\r\n * Kitin kendi utility'lerini tanıyan tailwind-merge örneği. Öncesinde düz\r\n * `twMerge` `text-eyebrow`'u bir METİN RENGİ sanıp `text-fg` ile çakıştırıyor\r\n * (birini siliyor), `h-control-md` ile `h-8`'i ise hiç çözemiyordu (ikisi de\r\n * kalıp CSS sırası kazananı belirliyordu) — `docs/tr/mimari.md` \"twMerge\r\n * gotcha\" artık bu yapılandırmayla kapandı. Yeni bir özel utility\r\n * (`@utility`/`@theme` ile) eklerken buraya da ekleyin.\r\n */\r\nconst twMerge = extendTailwindMerge<'h-control'>({\r\n extend: {\r\n theme: {\r\n text: [\r\n 'label',\r\n 'caption',\r\n 'eyebrow',\r\n 'title-sm',\r\n 'title',\r\n 'title-lg',\r\n 'display',\r\n 'display-lg',\r\n 'metric',\r\n ],\r\n shadow: ['1', '2', '3', 'control', 'filled', 'glow', 'highlight'],\r\n ease: ['emphasis', 'spring', 'exit'],\r\n animate: [\r\n 'progress-slide',\r\n 'spin-slow',\r\n 'dialog-in',\r\n 'dialog-out',\r\n 'sheet-in',\r\n 'sheet-out',\r\n 'drawer-in',\r\n 'drawer-out',\r\n 'drawer-start-in',\r\n 'drawer-start-out',\r\n 'drawer-top-in',\r\n 'drawer-top-out',\r\n 'pop',\r\n 'overlay-in',\r\n 'overlay-out',\r\n 'toast-in',\r\n 'toast-out',\r\n 'countdown',\r\n 'list-in',\r\n 'draw',\r\n 'shimmer',\r\n 'fade-in',\r\n ],\r\n font: ['display'],\r\n tracking: ['label'],\r\n },\r\n classGroups: {\r\n 'h-control': [{ 'h-control': ['xs', 'sm', 'md', 'lg', 'xl'] }],\r\n duration: [{ duration: ['instant', 'fast', 'base', 'slow', 'slower'] }],\r\n z: [{ z: ['sticky', 'nav', 'overlay', 'toast'] }],\r\n },\r\n conflictingClassGroups: {\r\n 'h-control': ['h', 'size'],\r\n h: ['h-control'],\r\n },\r\n },\r\n});\r\n\r\n/** clsx ile koşullu class'ları birleştirir, tailwind-merge ile çakışan utility'leri (ör. iki farklı `bg-*`) sonuncusu kazanacak şekilde çözer — kitin özel token'ları dahil. */\r\nexport function cn(...inputs: ClassValue[]): string {\r\n return twMerge(clsx(inputs));\r\n}\r\n","/**\r\n * Yazı yönü yardımcıları — `dir=\"rtl\"` (öğede ya da bir atada) ya da CSS `direction` kalıtımı.\r\n * Hesaplanan stil okunur: yön bir atadan gelse de doğru sonuç verir. SSR'de (stil yok) LTR.\r\n */\r\nexport function isRtl(el: Element): boolean {\r\n return typeof getComputedStyle !== 'undefined' && getComputedStyle(el).direction === 'rtl';\r\n}\r\n\r\n/** İşaretçinin satır başından (LTR'de sol, RTL'de sağ kenar) oranı, 0–1 aralığına kırpılmış. */\r\nexport function inlineStartRatio(clientX: number, rect: DOMRect, rtl: boolean): number {\r\n if (rect.width === 0) return 0;\r\n const fromLeft = (clientX - rect.left) / rect.width;\r\n return Math.min(1, Math.max(0, rtl ? 1 - fromLeft : fromLeft));\r\n}\r\n\r\n/**\r\n * Yatay kaydırmanın başlangıçtan uzaklığı. Modern tarayıcılarda RTL'de `scrollLeft` 0'dan\r\n * NEGATİFE gider (başlangıç = 0, son = −max); mutlak değer iki yönde de \"başlangıçtan uzaklık\".\r\n */\r\nexport function scrollFromInlineStart(el: Element): number {\r\n return Math.abs(el.scrollLeft);\r\n}\r\n","import type { MfControlSize } from './types';\r\n\r\n/**\r\n * Paylaşılan class reçeteleri — kontrol/overlay/kapsayıcı bileşenlerinin\r\n * TEKRAR TEKRAR yazdığı focus/disabled/boyut/yüzey kalıplarının TEK kaynağı\r\n * (bkz. plan Faz 1a/1b). Öncesinde 5 farklı disabled reçetesi, 4 farklı\r\n * focus-offset kombinasyonu ve 9 elle yazılmış `h-8`/`h-9`/`h-10` sabiti\r\n * vardı — her biri kendi kopyasını sürüklüyordu (gerçek bulgu). Bileşenler\r\n * bunları `cn()` ile kendi özel class'larıyla birleştirir (`cn()` twMerge\r\n * kullandığı için çakışan Tailwind utility'leri güvenle çözülür).\r\n */\r\n\r\n/** `outline`+`outline-offset` tabanlı TEK focus mekanizması — bkz. `button.variants.ts`'in \"Focus — tek mekanizma\" notu. Box-shadow/ring KULLANMA. */\r\nexport const focusRecipe =\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring';\r\n\r\n/** Native `disabled` VE `aria-disabled` (ör. `@angular/aria` desenlerinin kullandığı) ikisini de kapsar — bkz. plan \"Disabled 5 farklı reçete\" bulgusu. */\r\nexport const disabledRecipe =\r\n 'disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none aria-disabled:pointer-events-none aria-disabled:opacity-50';\r\n\r\n/** 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. */\r\nexport const controlSurface =\r\n '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';\r\n\r\n/** `size: MfSize` eksenindeki TÜM kontrollerin ortak yükseklik/dolgu/font eşlemesi — bkz. `radius.css`'teki `--control-h-*` token'ları. */\r\nexport const controlSize: Record<MfControlSize, string> = {\r\n xs: 'h-control-xs px-2 text-xs',\r\n sm: 'h-control-sm px-2.5 text-sm',\r\n md: 'h-control-md px-3 text-sm',\r\n lg: 'h-control-lg px-3.5 text-base',\r\n xl: 'h-control-xl px-4 text-base',\r\n};\r\n\r\n/**\r\n * Popover/Menu/Select/Combobox/... overlay panellerinin ortak kabuğu — BORDER-\r\n * FIRST (2026-09 Deep Emerald geçişi, kullanıcı kararıyla eski \"light modda\r\n * kenarlıksız, sadece gölge\" ilkesinin YERİNE geçti): iki modda da\r\n * `border-hairline` (color.css — %8-12 opak marka-tonlu 1px çizgi) + `shadow-2`.\r\n * Ağır/bulanık gölge yerine ince çizgi \"premium\" hissi artık BÖYLE veriliyor.\r\n */\r\nexport const overlaySurface = 'rounded-lg border border-hairline bg-overlay shadow-2';\r\n\r\n/** 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). */\r\nexport const containerSurface = 'rounded-lg border border-hairline bg-surface';\r\n\r\n/**\r\n * Mikro glassmorphism — Dialog/Sheet/Drawer paneli ve Toast öğeleri (bkz.\r\n * `dialog.variants.ts`, `toast-host.ts`) bunu kullanır. `supports-[…]` ile\r\n * `backdrop-filter` desteklenmediğinde düz `bg-surface`'e düşer (eski\r\n * tarayıcı/headless test ortamı); `reduced-transparency:` (color.css'te\r\n * tanımlı custom variant, `prefers-reduced-transparency: reduce` medya\r\n * sorgusu) kullanıcı saydamlığı azalt istediğinde camı KAPATIR — WCAG 1.4.11\r\n * \"Non-text Contrast\" ve hareket/saydamlık duyarlılığı için. Tüketici kendi\r\n * `border`/`rounded-*` genişliğini üstüne ekler.\r\n */\r\nexport const glassSurface =\r\n 'border-hairline bg-surface supports-[backdrop-filter]:bg-glass supports-[backdrop-filter]:backdrop-blur-md reduced-transparency:bg-surface reduced-transparency:backdrop-blur-none';\r\n\r\n/** `hasError`/`aria-invalid` durumundaki form kontrolleri için — `controlSurface` İLE BİRLİKTE, üstüne eklenir. */\r\nexport const errorRecipe = 'border-danger focus-within:border-danger focus-visible:outline-danger';\r\n\r\n/**\r\n * Renk/gölge geçişlerinin TEK hareket dili — `ease-emphasis` kitin kendi eğrisi\r\n * (bkz. `motion.css`), tarayıcı varsayılanı `ease` DEĞİL. Öncesinde ~35 yerde\r\n * `transition-colors duration-fast` easing'siz kullanılıyordu (gerçek bulgu,\r\n * bkz. plan Faz 1c).\r\n */\r\nexport const transitionRecipe = 'transition-colors duration-fast ease-emphasis';\r\n\r\n/** Basılı-hissi — `active:scale` ekseninde TEK reçete, disabled'da sıfırlanır. */\r\nexport const pressRecipe = 'active:scale-[0.99] disabled:active:scale-100';\r\n","let seq = 0;\r\n\r\n/**\r\n * Bileşen örneği başına kararlı, benzersiz bir DOM id'si üretir —\r\n * `aria-controls`/`aria-describedby`/`aria-activedescendant` gibi bağların\r\n * her component klasöründe kendi elle sayaçlarını (bkz. `combobox.ts`'teki\r\n * `comboboxIdSeq` — bu modül kullanıma girince oraya taşınacak) tekrar\r\n * yazmasına gerek kalmasın diye. SSR'da hydration uyuşmazlığı YARATMAZ —\r\n * her platformda modül yüklendiğinde sıfırdan başlar, sayaç deterministik.\r\n */\r\nexport function nextId(prefix: string): string {\r\n return `${prefix}-${++seq}`;\r\n}\r\n","/**\r\n * `registerOnChange`/`registerOnTouched`'ın HER `ControlValueAccessor`\r\n * implementasyonunda BİREBİR aynı kalan gövdesini tek kaynağa indirger\r\n * (bkz. Select/NumberInput/Combobox/ColorPicker'ın öncesi — 4+ kopya, plan\r\n * Faz 2 \"CVA tamamlama\" notu). Alt sınıf SADECE `writeValue`'yu (kendi\r\n * `model`/`signal`'ına yazan) tanımlar VE kendi `NG_VALUE_ACCESSOR`\r\n * provider'ını `@Component`'ında bildirir — `forwardRef(() => AltSınıf)`\r\n * somut sınıfa ihtiyaç duyduğu için provider MİRAS ALINAMAZ.\r\n *\r\n * Düz bir soyut sınıf (Angular `@Directive()` DEĞİL) — `inject()` ya da\r\n * yaşam döngüsü kancası kullanmıyor, sadece alan/metot mirası; `@Directive()`\r\n * sarmalamak gereksiz karmaşıklık olurdu.\r\n */\r\nexport abstract class ValueAccessorBase<T> {\r\n protected onChange: (value: T) => void = () => {};\r\n protected onTouched: () => void = () => {};\r\n\r\n registerOnChange(fn: (value: T) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n}\r\n","import type { ConnectedPosition } from '@angular/cdk/overlay';\r\nimport type { MfPlacement } from '../types';\r\n\r\ntype Side = 'top' | 'bottom' | 'start' | 'end';\r\ntype Align = 'start' | 'center' | 'end';\r\n\r\nconst OPPOSITE: Record<Side, Side> = { top: 'bottom', bottom: 'top', start: 'end', end: 'start' };\r\n\r\nfunction split(placement: MfPlacement): [Side, Align] {\r\n const [rawSide, rawAlign] = placement.split('-') as [string, Align | undefined];\r\n const side: Side = rawSide === 'left' ? 'start' : rawSide === 'right' ? 'end' : (rawSide as Side);\r\n return [side, rawAlign ?? 'center'];\r\n}\r\n\r\nfunction position(side: Side, align: Align, offset: number): ConnectedPosition {\r\n if (side === 'top' || side === 'bottom') {\r\n const below = side === 'bottom';\r\n return {\r\n originX: align,\r\n originY: below ? 'bottom' : 'top',\r\n overlayX: align,\r\n overlayY: below ? 'top' : 'bottom',\r\n offsetY: below ? offset : -offset,\r\n // Panel aşağıdaysa ÜSTÜNDEN (tetikleyiciye bakan kenarından) büyür.\r\n panelClass: [`mf-side-${side}`, `mf-origin-${below ? 'top' : 'bottom'}-${align}`],\r\n };\r\n }\r\n const atEnd = side === 'end';\r\n const alignY = align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center';\r\n return {\r\n originX: atEnd ? 'end' : 'start',\r\n originY: alignY,\r\n overlayX: atEnd ? 'start' : 'end',\r\n overlayY: alignY,\r\n offsetX: atEnd ? offset : -offset,\r\n panelClass: [`mf-side-${side}`, `mf-origin-${alignY}-${atEnd ? 'start' : 'end'}`],\r\n };\r\n}\r\n\r\n/**\r\n * Tüm bağlı overlay'lerin (Popover, Tooltip, HoverCard, Tour, ContextMenu ve\r\n * Popover üstüne kurulan Select/Combobox/DatePicker/...) TEK konum üreticisi:\r\n * tercih edilen yerleşim + taşmada karşı tarafa çevrilen (flip) yedek.\r\n *\r\n * Her pozisyon bir `panelClass` taşır — CDK hangisini SEÇERSE pane'e o\r\n * eklenir: `mf-side-*` (giriş kayma yönü) + `mf-origin-*` (`transform-origin`),\r\n * bkz. styles/tokens/motion.css. Böylece panel yukarı çevrildiğinde (flip) animasyon\r\n * da tetikleyiciden dışarı doğru açılır (Radix\r\n * `--radix-popper-transform-origin` eşleniği, abonelik gerekmeden).\r\n *\r\n * `left`/`right` MANTIKSAL (`start`/`end`) — RTL'de CDK kendisi çevirir.\r\n */\r\nexport function overlayPositions(placement: MfPlacement, offset = 4): ConnectedPosition[] {\r\n const [side, align] = split(placement);\r\n return [position(side, align, offset), position(OPPOSITE[side], align, offset)];\r\n}\r\n\r\n/**\r\n * İmleç konumuna açılan paneller (ContextMenu) — köşe tetikleyiciye yapışık,\r\n * dört çeyrekte flip; origin her zaman imlece bakan köşe.\r\n */\r\nexport function pointerPositions(): ConnectedPosition[] {\r\n return [\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n panelClass: ['mf-side-bottom', 'mf-origin-top-start'],\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n panelClass: ['mf-side-top', 'mf-origin-bottom-start'],\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'top',\r\n panelClass: ['mf-side-bottom', 'mf-origin-top-end'],\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'end',\r\n overlayY: 'bottom',\r\n panelClass: ['mf-side-top', 'mf-origin-bottom-end'],\r\n },\r\n ];\r\n}\r\n","/** `prefers-reduced-motion: reduce` — SSR/jsdom'da (matchMedia yok) `false`. */\r\nexport function prefersReducedMotion(): boolean {\r\n return (\r\n typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches\r\n );\r\n}\r\n\r\n/** CSS süre string'ini (`120ms`, `0.2s`) milisaniyeye çevirir; çözülemezse `null`. */\r\nexport function parseCssDuration(raw: string): number | null {\r\n const value = raw.trim();\r\n const match = /^(-?\\d*\\.?\\d+)(ms|s)$/.exec(value);\r\n if (!match) return null;\r\n const n = Number(match[1]);\r\n return match[2] === 's' ? n * 1000 : n;\r\n}\r\n\r\nconst DEFAULT_EXIT_MS = 120;\r\n\r\n/**\r\n * Overlay/dialog/toast çıkış animasyonunun süresi — `--mf-duration-exit`\r\n * (styles/tokens/motion.css) TEK kaynak. Eskiden `dialog.service.ts`,\r\n * `popover.ts`, `toast.service.ts` her biri `EXIT_MS = 120` sabitini CSS'le\r\n * ELLE eşitliyordu; token değişince JS kısa kalıp panel animasyonun ortasında\r\n * kopuyordu. Reduced-motion'da `0` (panel anında kaldırılır).\r\n */\r\nexport function exitDurationMs(): number {\r\n if (prefersReducedMotion()) return 0;\r\n if (typeof document === 'undefined' || typeof getComputedStyle === 'undefined') {\r\n return DEFAULT_EXIT_MS;\r\n }\r\n const raw = getComputedStyle(document.documentElement).getPropertyValue('--mf-duration-exit');\r\n return parseCssDuration(raw) ?? DEFAULT_EXIT_MS;\r\n}\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n afterNextRender,\r\n afterRenderEffect,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nexport type SlidingIndicatorAxis = 'x' | 'y';\r\n\r\n/**\r\n * `<span mfSlidingIndicator [track]=\"selected()\" class=\"-bottom-px h-0.5 bg-accent-fill\"></span>`\r\n *\r\n * Kitin ortak \"kayan gösterge\" motoru — Tabs'ın çizgisi/hapı, SegmentedControl'ün\r\n * parçası, TabNav'ın çizgisi ve hover-izleme vurgusu AYNI hareketi paylaşsın diye.\r\n * Kapsayıcı (varsayılan `parentElement`, `relative` olmalı) içinde `target`'ı\r\n * bulur, onun `offsetLeft/offsetWidth`'ine (x) ya da `offsetTop/offsetHeight`'ına\r\n * (y) göre `transform` + boyut yazar.\r\n *\r\n * - **Hareket:** hedef bir öğeden BAŞKA bir öğeye geçince yay eğrisiyle kayar\r\n * (`ease-spring`, `duration-slow`). İlk görünüm, hedefin yeniden belirmesi ve\r\n * yeniden boyutlanma (ResizeObserver, font yüklenmesi) ANINDA — göstergenin\r\n * 0'dan \"uçarak\" gelmesi olmaz. Opaklık her zaman yumuşak geçer.\r\n * - **Çapraz eksen** tüketicinin sınıfıdır (`-bottom-px h-0.5`, `inset-y-0`…);\r\n * motor yalnız ana ekseni yazar.\r\n * - **RTL:** `left-0` + `offsetLeft` + `translateX` üçü de fiziksel — birlikte\r\n * RTL'de doğru (bkz. scripts/rtl-rules.mjs allowlist).\r\n * - `target` `null` ise gösterge son konumunda solar (hover bitişi).\r\n * - Azaltılmış harekette `motion.css`'in global anahtarı geçişleri sıfırlar.\r\n */\r\n@Directive({\r\n selector: '[mfSlidingIndicator]',\r\n exportAs: 'mfSlidingIndicator',\r\n host: {\r\n class:\r\n 'pointer-events-none absolute opacity-0 transition-[transform,width,height,opacity] duration-slow ease-spring',\r\n '[class.left-0]': \"axis() === 'x'\",\r\n '[class.top-0]': \"axis() === 'y'\",\r\n 'aria-hidden': 'true',\r\n },\r\n})\r\nexport class SlidingIndicator {\r\n readonly axis = input<SlidingIndicatorAxis>('x');\r\n /** Kapsayıcı içinde çözülen CSS seçici, somut bir öğe ya da `null` (gizli). */\r\n readonly target = input<string | HTMLElement | null>('[aria-selected=\"true\"]');\r\n /** Herhangi bir değer — değişince (ör. seçim sinyali) hedef yeniden ölçülür. */\r\n readonly track = input<unknown>();\r\n /** Ölçüm kapsayıcısı; varsayılan `parentElement` (offsetParent olmalı). */\r\n readonly container = input<HTMLElement>();\r\n\r\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n private current: HTMLElement | null = null;\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n this.target();\r\n this.track();\r\n this.axis();\r\n this.update(true);\r\n });\r\n\r\n const destroyRef = inject(DestroyRef);\r\n afterNextRender(() => {\r\n const box = this.box();\r\n if (!box || typeof ResizeObserver === 'undefined') return;\r\n // Kapsayıcının YANINDA her öğe de izlenir: `w-full` bir şeritte bir etiketin\r\n // genişliği değişince (dil değişimi, font yüklenmesi) kapsayıcı boyutu sabit\r\n // kalır ama hedefin konumu/genişliği kayar — yalnız kutu izlenseydi gösterge\r\n // eski ölçüde kalırdı (gerçek bulgu: tr→en geçişi).\r\n //\r\n // Göstergeler (bu ve kardeşi — TabNav'da hover göstergesi) İZLENMEZ: geri\r\n // çağrı onların genişliğini yazıyor; izlenselerdi yazma → yeniden gözlem\r\n // döngüsü \"ResizeObserver loop completed with undelivered notifications\"\r\n // hatası atıyordu (0.11.0, gerçek bulgu). Yazma ayrıca bir sonraki kareye\r\n // ertelenir ve aynı karedeki bildirimler tek yazmada birleşir.\r\n let frame: number | null = null;\r\n const schedule = (): void => {\r\n if (frame !== null) return;\r\n frame = requestAnimationFrame(() => {\r\n frame = null;\r\n this.update(false);\r\n });\r\n };\r\n const observer = new ResizeObserver(schedule);\r\n const observeAll = (): void => {\r\n observer.observe(box);\r\n for (const child of Array.from(box.children)) {\r\n if (!child.hasAttribute('mfSlidingIndicator')) observer.observe(child);\r\n }\r\n };\r\n observeAll();\r\n // Sonradan eklenen öğeler (ör. `@for` ile gelen sekmeler) de izlensin.\r\n const mutations =\r\n typeof MutationObserver === 'undefined'\r\n ? null\r\n : new MutationObserver(() => {\r\n observeAll();\r\n schedule();\r\n });\r\n mutations?.observe(box, { childList: true });\r\n destroyRef.onDestroy(() => {\r\n if (frame !== null) cancelAnimationFrame(frame);\r\n observer.disconnect();\r\n mutations?.disconnect();\r\n });\r\n });\r\n }\r\n\r\n /** Dışarıdan yeniden ölçüm (ör. içerik değişti ama seçim değişmedi). */\r\n refresh(animate = false): void {\r\n this.update(animate);\r\n }\r\n\r\n private box(): HTMLElement | null {\r\n return this.container() ?? this.el.parentElement;\r\n }\r\n\r\n private resolve(): HTMLElement | null {\r\n const target = this.target();\r\n if (!target) return null;\r\n if (typeof target !== 'string') return target;\r\n return this.box()?.querySelector<HTMLElement>(target) ?? null;\r\n }\r\n\r\n private update(allowAnimate: boolean): void {\r\n const target = this.resolve();\r\n const style = this.el.style;\r\n if (!target) {\r\n style.opacity = '0';\r\n this.current = null;\r\n return;\r\n }\r\n\r\n const vertical = this.axis() === 'y';\r\n const transform = vertical\r\n ? `translateY(${target.offsetTop}px)`\r\n : `translateX(${target.offsetLeft}px)`;\r\n const size = `${vertical ? target.offsetHeight : target.offsetWidth}px`;\r\n // Hiçbir şey değişmediyse DOM'a dokunma (gözlemci bildirimleri çoğunlukla böyle).\r\n if (\r\n this.current === target &&\r\n style.opacity === '1' &&\r\n style.transform === transform &&\r\n (vertical ? style.height : style.width) === size\r\n ) {\r\n return;\r\n }\r\n\r\n const animate = allowAnimate && this.current !== null && this.current !== target;\r\n // Anında yol: geometri geçişsiz yazılır, opaklık yine yumuşak kalır.\r\n if (!animate) style.transitionProperty = 'opacity';\r\n\r\n style.transform = transform;\r\n if (vertical) {\r\n style.height = size;\r\n style.width = '';\r\n } else {\r\n style.width = size;\r\n style.height = '';\r\n }\r\n style.opacity = '1';\r\n\r\n if (!animate) {\r\n // Yeniden akışı zorla ki geçiş özelliği geri gelince konum değişimi animasyonlanmasın.\r\n void this.el.getBoundingClientRect();\r\n style.transitionProperty = '';\r\n }\r\n this.current = target;\r\n }\r\n}\r\n","/**\r\n * Kitin TÜM metinlerinin TEK şekli — `MF_LABELS` injection token'ının taşıdığı\r\n * tip (bkz. `tokens.ts`). Her alt-nesne bir bileşen ailesinin metinlerini\r\n * gruplar (Dialog'un önceki `MfDialogLabels`'ı ve DatePicker/Table'ın \"grup\r\n * input\" çantalarıyla AYNI emsal — tek fark artık HEPSİ tek bir kökten\r\n * `provideMesgflowUi()` ile sağlanıyor, bkz. `provide.ts`).\r\n */\r\nexport interface MfCommonLabels {\r\n loading: string;\r\n clear: string;\r\n remove: string;\r\n}\r\n\r\nexport interface MfDialogLabels {\r\n close: string;\r\n resize: string;\r\n fullscreenEnter: string;\r\n fullscreenExit: string;\r\n confirmOk: string;\r\n confirmCancel: string;\r\n confirmConfirm: string;\r\n confirmDelete: string;\r\n errorGeneric: string;\r\n discard: {\r\n title: string;\r\n content: string;\r\n confirm: string;\r\n cancel: string;\r\n };\r\n}\r\n\r\nexport interface MfDatePickerLabels {\r\n today: string;\r\n clear: string;\r\n apply: string;\r\n previousMonth: string;\r\n nextMonth: string;\r\n previousYear: string;\r\n nextYear: string;\r\n chooseMonth: string;\r\n chooseYear: string;\r\n startDate: string;\r\n endDate: string;\r\n placeholder: string;\r\n presetToday: string;\r\n presetLast7: string;\r\n presetLast30: string;\r\n presetThisMonth: string;\r\n /** DateTimePicker alt alanlarının adları. */\r\n date: string;\r\n time: string;\r\n}\r\n\r\nexport interface MfTimePickerLabels {\r\n placeholder: string;\r\n clear: string;\r\n}\r\n\r\nexport interface MfTableFilterOperatorLabels {\r\n equal: string;\r\n notEqual: string;\r\n greaterThan: string;\r\n greaterOrEqual: string;\r\n lessThan: string;\r\n lessOrEqual: string;\r\n contains: string;\r\n startsWith: string;\r\n endsWith: string;\r\n in: string;\r\n isNull: string;\r\n isNotNull: string;\r\n between: string;\r\n}\r\n\r\nexport interface MfTableFilterLabels {\r\n addFilter: string;\r\n searchField: string;\r\n noField: string;\r\n operator: string;\r\n value: string;\r\n apply: string;\r\n enterHint: string;\r\n clearAll: string;\r\n and: string;\r\n or: string;\r\n remove: string;\r\n back: string;\r\n dateToday: string;\r\n dateLast7: string;\r\n dateLast30: string;\r\n dateThisMonth: string;\r\n dateCustom: string;\r\n dateFrom: string;\r\n dateTo: string;\r\n operators: MfTableFilterOperatorLabels;\r\n}\r\n\r\nexport interface MfTablePaginationLabels {\r\n records: string;\r\n perPage: string;\r\n page: string;\r\n previous: string;\r\n next: string;\r\n first: string;\r\n last: string;\r\n pageSizeAriaLabel: string;\r\n navAriaLabel: string;\r\n jumpToPage: string;\r\n go: string;\r\n}\r\n\r\nexport interface MfTableLabels {\r\n searchPlaceholder: string;\r\n selectedCount: string;\r\n edit: string;\r\n delete: string;\r\n clearSelection: string;\r\n emptyTitle: string;\r\n emptyDescription: string;\r\n noResultsTitle: string;\r\n noResultsDescription: string;\r\n clearFilters: string;\r\n filterCount: string;\r\n selectAllAriaLabel: string;\r\n selectRowAriaLabel: string;\r\n actionsColumnLabel: string;\r\n columns: string;\r\n density: string;\r\n densityComfortable: string;\r\n densityCompact: string;\r\n resizeColumn: string;\r\n expandRow: string;\r\n collapseRow: string;\r\n filter: MfTableFilterLabels;\r\n pagination: MfTablePaginationLabels;\r\n}\r\n\r\nexport interface MfSidebarLabels {\r\n collapse: string;\r\n expand: string;\r\n switchTenant: string;\r\n noTenants: string;\r\n noUser: string;\r\n nav: string;\r\n}\r\n\r\nexport interface MfTabsLabels {\r\n scrollStart: string;\r\n scrollEnd: string;\r\n close: string;\r\n}\r\n\r\nexport interface MfDropzoneLabels {\r\n label: string;\r\n}\r\n\r\nexport interface MfColorPickerLabels {\r\n ariaLabel: string;\r\n hexAriaLabel: string;\r\n pickFromScreenAriaLabel: string;\r\n}\r\n\r\nexport interface MfBoxInputLabels {\r\n top: string;\r\n right: string;\r\n bottom: string;\r\n left: string;\r\n linkSides: string;\r\n unlinkSides: string;\r\n}\r\n\r\nexport interface MfComboboxLabels {\r\n placeholder: string;\r\n noResults: string;\r\n /** `creatable` satırı — `{query}` yazılan metinle değiştirilir. */\r\n create: string;\r\n /** Çoklu seçimde çip kaldırma düğmesi — `{label}` seçenek adıyla değiştirilir. */\r\n remove: string;\r\n}\r\n\r\nexport interface MfSelectLabels {\r\n placeholder: string;\r\n}\r\n\r\nexport interface MfSearchInputLabels {\r\n placeholder: string;\r\n ariaLabel: string;\r\n clearAriaLabel: string;\r\n}\r\n\r\nexport interface MfToastLabels {\r\n dismiss: string;\r\n}\r\n\r\nexport interface MfOtpInputLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfStepperLabels {\r\n ariaLabel: string;\r\n /** İsteğe bağlı adım etiketi. */\r\n optional: string;\r\n /** Ekran okuyucu için adım durumu (ikon yalnızca görsel). */\r\n completed: string;\r\n error: string;\r\n}\r\n\r\nexport interface MfProgressLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfPasswordInputLabels {\r\n show: string;\r\n hide: string;\r\n}\r\n\r\nexport interface MfQrCodeLabels {\r\n /** `role=\"img\"` için varsayılan erişilebilir ad. */\r\n ariaLabel: string;\r\n /** İçerik seçilen hata düzeltme seviyesiyle sığmadığında. */\r\n error: string;\r\n}\r\n\r\nexport interface MfChipLabels {\r\n remove: string;\r\n}\r\n\r\nexport interface MfAlertLabels {\r\n dismiss: string;\r\n}\r\n\r\nexport interface MfBreadcrumbLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfAvatarGroupLabels {\r\n /** \"+N\" göstergesinin aria-label'ı — `overflowCount() + ' ' + overflowAriaLabel`. */\r\n overflowAriaLabel: string;\r\n}\r\n\r\n/** Grafik ailesi (LineChart/Sparkline) — tablo görünümü anahtarı (grafiğin erişilebilir ikizi) ve tablonun ilk sütun başlığı. */\r\n/** Ağaçtan seçim (`mf-tree-select`). */\r\nexport interface MfTreeSelectLabels {\r\n placeholder: string;\r\n searchPlaceholder: string;\r\n noResults: string;\r\n}\r\n\r\n/** Açık/koyu/sistem değiştirici (`mf-theme-switcher`). */\r\nexport interface MfThemeSwitcherLabels {\r\n ariaLabel: string;\r\n light: string;\r\n dark: string;\r\n system: string;\r\n}\r\n\r\n/** Puanlama — `outOf` iki sayının ARASINA yazılır (\"3 out of 5\"). */\r\nexport interface MfRatingLabels {\r\n ariaLabel: string;\r\n outOf: string;\r\n}\r\n\r\n/** Ürün turu — `stepOf` iki sayının ARASINA yazılır (\"2 of 5\"). */\r\nexport interface MfTourLabels {\r\n next: string;\r\n back: string;\r\n skip: string;\r\n done: string;\r\n stepOf: string;\r\n}\r\n\r\n/** Bağımsız sayfalama (`mf-pagination`) — `page` sayının ÖNÜNE yazılır (\"Page 3\"). */\r\nexport interface MfPaginationLabels {\r\n navAriaLabel: string;\r\n previous: string;\r\n next: string;\r\n first: string;\r\n last: string;\r\n page: string;\r\n}\r\n\r\n/** Kopyala düğmesi + kod bloğu (`code` = kaydırılabilir kod bölgesinin erişilebilir adı). */\r\nexport interface MfCopyLabels {\r\n copy: string;\r\n copied: string;\r\n failed: string;\r\n code: string;\r\n}\r\n\r\n/** Karakter sayacı — sayıların ARDINA yazılır (\"12 characters remaining\"). */\r\nexport interface MfCharacterCountLabels {\r\n remaining: string;\r\n overLimit: string;\r\n characters: string;\r\n}\r\n\r\n/** Komut paleti (`mf-command`) — `resultsCount` sayının ARDINA yazılır (\"8 results\"). */\r\nexport interface MfCommandLabels {\r\n placeholder: string;\r\n ariaLabel: string;\r\n empty: string;\r\n resultsCount: string;\r\n navigate: string;\r\n select: string;\r\n close: string;\r\n}\r\n\r\nexport interface MfChartLabels {\r\n showTable: string;\r\n showChart: string;\r\n category: string;\r\n}\r\n\r\n/** StatTile değişim yönünün ekran okuyucu metni (ikon yalnızca görsel). */\r\nexport interface MfStatTileLabels {\r\n increase: string;\r\n decrease: string;\r\n noChange: string;\r\n}\r\n\r\n/** RangeSlider tutamaçlarının erişilebilir adları. */\r\nexport interface MfSliderLabels {\r\n minThumb: string;\r\n maxThumb: string;\r\n}\r\n\r\nexport interface MfSplitButtonLabels {\r\n /** Menü (▾) düğmesinin erişilebilir adı. */\r\n moreActions: string;\r\n}\r\n\r\nexport interface MfFileUploadLabels {\r\n uploading: string;\r\n done: string;\r\n failed: string;\r\n queued: string;\r\n retry: string;\r\n cancel: string;\r\n remove: string;\r\n /** Liste başlığı — `{count}` dosya sayısıyla değiştirilir. */\r\n files: string;\r\n}\r\n\r\n/**\r\n * Sıralanabilir liste/Kanban klavye duyuruları. Yer tutucular: `{item}`,\r\n * `{position}`, `{total}`, `{column}`.\r\n */\r\nexport interface MfSortableLabels {\r\n instructions: string;\r\n grabbed: string;\r\n moved: string;\r\n movedToColumn: string;\r\n dropped: string;\r\n cancelled: string;\r\n dragHandle: string;\r\n /** Kanban kartının `aria-roledescription`'ı. */\r\n card: string;\r\n}\r\n\r\nexport interface MfCountdownLabels {\r\n days: string;\r\n hours: string;\r\n minutes: string;\r\n seconds: string;\r\n /** Ekran okuyucu özeti — `{time}` kalan süre metniyle değiştirilir. */\r\n remaining: string;\r\n finished: string;\r\n}\r\n\r\nexport interface MfCarouselLabels {\r\n previous: string;\r\n next: string;\r\n /** `{index}` / `{total}` */\r\n slide: string;\r\n pause: string;\r\n play: string;\r\n /** Nokta düğmeleri — `{index}` */\r\n goTo: string;\r\n carousel: string;\r\n}\r\n\r\nexport interface MfInlineEditLabels {\r\n edit: string;\r\n save: string;\r\n cancel: string;\r\n empty: string;\r\n}\r\n\r\nexport interface MfTransferListLabels {\r\n available: string;\r\n selected: string;\r\n moveRight: string;\r\n moveLeft: string;\r\n moveAllRight: string;\r\n moveAllLeft: string;\r\n search: string;\r\n /** `{selected}` / `{total}` */\r\n count: string;\r\n empty: string;\r\n}\r\n\r\nexport interface MfLightboxLabels {\r\n close: string;\r\n previous: string;\r\n next: string;\r\n zoomIn: string;\r\n zoomOut: string;\r\n /** `{index}` / `{total}` */\r\n counter: string;\r\n gallery: string;\r\n}\r\n\r\nexport interface MfNotificationCenterLabels {\r\n title: string;\r\n markAllRead: string;\r\n empty: string;\r\n emptyDescription: string;\r\n unread: string;\r\n /** Tetikleyici adı — `{count}` okunmamış sayısı. */\r\n trigger: string;\r\n viewAll: string;\r\n}\r\n\r\nexport interface MfAgendaLabels {\r\n allDay: string;\r\n empty: string;\r\n today: string;\r\n tomorrow: string;\r\n}\r\n\r\nexport interface MfMentionLabels {\r\n suggestions: string;\r\n noResults: string;\r\n}\r\n\r\nexport interface MfAuthCardLabels {\r\n title: string;\r\n description: string;\r\n email: string;\r\n emailPlaceholder: string;\r\n password: string;\r\n forgotPassword: string;\r\n remember: string;\r\n submit: string;\r\n /** Sağlayıcı düğmeleriyle e-posta formu arasındaki ayırıcı. */\r\n divider: string;\r\n noAccount: string;\r\n signUp: string;\r\n emailRequired: string;\r\n emailInvalid: string;\r\n passwordRequired: string;\r\n errorTitle: string;\r\n}\r\n\r\nexport interface MfInviteMembersLabels {\r\n title: string;\r\n description: string;\r\n emails: string;\r\n emailsPlaceholder: string;\r\n role: string;\r\n submit: string;\r\n /** `{emails}` — geçersiz adresler virgülle. */\r\n invalidEmails: string;\r\n emailsRequired: string;\r\n}\r\n\r\nexport interface MfPanelGroupLabels {\r\n /** Ayırıcı adı — `{index}` */\r\n resize: string;\r\n}\r\n\r\nexport interface MfLabels {\r\n common: MfCommonLabels;\r\n dialog: MfDialogLabels;\r\n datePicker: MfDatePickerLabels;\r\n timePicker: MfTimePickerLabels;\r\n table: MfTableLabels;\r\n sidebar: MfSidebarLabels;\r\n tabs: MfTabsLabels;\r\n dropzone: MfDropzoneLabels;\r\n colorPicker: MfColorPickerLabels;\r\n boxInput: MfBoxInputLabels;\r\n combobox: MfComboboxLabels;\r\n select: MfSelectLabels;\r\n searchInput: MfSearchInputLabels;\r\n toast: MfToastLabels;\r\n otpInput: MfOtpInputLabels;\r\n stepper: MfStepperLabels;\r\n progress: MfProgressLabels;\r\n passwordInput: MfPasswordInputLabels;\r\n qrCode: MfQrCodeLabels;\r\n chip: MfChipLabels;\r\n alert: MfAlertLabels;\r\n breadcrumb: MfBreadcrumbLabels;\r\n avatarGroup: MfAvatarGroupLabels;\r\n chart: MfChartLabels;\r\n command: MfCommandLabels;\r\n characterCount: MfCharacterCountLabels;\r\n copy: MfCopyLabels;\r\n pagination: MfPaginationLabels;\r\n tour: MfTourLabels;\r\n rating: MfRatingLabels;\r\n themeSwitcher: MfThemeSwitcherLabels;\r\n treeSelect: MfTreeSelectLabels;\r\n statTile: MfStatTileLabels;\r\n slider: MfSliderLabels;\r\n splitButton: MfSplitButtonLabels;\r\n fileUpload: MfFileUploadLabels;\r\n sortable: MfSortableLabels;\r\n countdown: MfCountdownLabels;\r\n carousel: MfCarouselLabels;\r\n inlineEdit: MfInlineEditLabels;\r\n transferList: MfTransferListLabels;\r\n lightbox: MfLightboxLabels;\r\n notificationCenter: MfNotificationCenterLabels;\r\n agenda: MfAgendaLabels;\r\n mention: MfMentionLabels;\r\n panelGroup: MfPanelGroupLabels;\r\n authCard: MfAuthCardLabels;\r\n inviteMembers: MfInviteMembersLabels;\r\n}\r\n\r\n/** `provideMesgflowUi({ labels })`'ın kabul ettiği şekil — her alt-alan opsiyonel, verilmeyen her yaprak `mfLabelsEn`'den gelir. */\r\nexport type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;\r\n\r\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n}\r\n\r\n/** `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. */\r\nexport function mergeLabels<T>(base: T, override: DeepPartial<T> | undefined): T {\r\n if (!override) return base;\r\n if (!isPlainObject(base) || !isPlainObject(override)) return override as T;\r\n const baseObj = base as Record<string, unknown>;\r\n const overrideObj = override as Record<string, unknown>;\r\n const result: Record<string, unknown> = { ...baseObj };\r\n for (const key of Object.keys(overrideObj)) {\r\n const overrideValue = overrideObj[key];\r\n if (overrideValue === undefined) continue;\r\n result[key] = mergeLabels(baseObj[key], overrideValue as DeepPartial<unknown>);\r\n }\r\n return result as T;\r\n}\r\n","import type { MfLabels } from './labels';\r\n\r\n/**\r\n * `MF_LABELS`'ın varsayılan değeri — hiçbir `provideMesgflowUi()` çağrısı\r\n * olmayan bir tüketici uygulamada bileşenler bu İngilizce metinlerle çalışır\r\n * (bkz. CLAUDE.md/plan kararı: \"bileşen varsayılan metinleri İngilizce\").\r\n * Türkçe çeviri kümesi için bkz. `@mesgflow/ui-kit/i18n/tr`'nin `mfLabelsTr`'si —\r\n * bu iki dosya AYNI şekli (bkz. `labels.ts`), farklı değerleri taşır.\r\n */\r\nexport const mfLabelsEn: MfLabels = {\r\n common: {\r\n loading: 'Loading',\r\n clear: 'Clear',\r\n remove: 'Remove',\r\n },\r\n dialog: {\r\n close: 'Close dialog',\r\n resize: 'Resize',\r\n fullscreenEnter: 'Enter fullscreen',\r\n fullscreenExit: 'Exit fullscreen',\r\n confirmOk: 'OK',\r\n confirmCancel: 'Cancel',\r\n confirmConfirm: 'Confirm',\r\n confirmDelete: 'Delete',\r\n errorGeneric: 'Something went wrong. Please try again.',\r\n discard: {\r\n title: 'Unsaved changes',\r\n content: 'Closing this panel will discard what you entered.',\r\n confirm: 'Discard and close',\r\n cancel: 'Keep editing',\r\n },\r\n },\r\n datePicker: {\r\n today: 'Today',\r\n clear: 'Clear',\r\n apply: 'Apply',\r\n previousMonth: 'Previous month',\r\n nextMonth: 'Next month',\r\n previousYear: 'Previous year',\r\n nextYear: 'Next year',\r\n chooseMonth: 'Choose month',\r\n chooseYear: 'Choose year',\r\n startDate: 'Start',\r\n endDate: 'End',\r\n placeholder: 'mm/dd/yyyy',\r\n presetToday: 'Today',\r\n presetLast7: 'Last 7 days',\r\n presetLast30: 'Last 30 days',\r\n presetThisMonth: 'This month',\r\n date: 'Date',\r\n time: 'Time',\r\n },\r\n timePicker: {\r\n placeholder: 'hh:mm',\r\n clear: 'Clear',\r\n },\r\n table: {\r\n searchPlaceholder: 'Search...',\r\n selectedCount: 'selected',\r\n edit: 'Edit',\r\n delete: 'Delete',\r\n clearSelection: 'Clear selection',\r\n emptyTitle: 'No records',\r\n emptyDescription: '',\r\n noResultsTitle: 'No results found',\r\n noResultsDescription: 'Try a different search or filter.',\r\n clearFilters: 'Clear filters',\r\n filterCount: 'filters',\r\n selectAllAriaLabel: 'Select all',\r\n selectRowAriaLabel: 'Select row',\r\n actionsColumnLabel: 'Actions',\r\n columns: 'Columns',\r\n density: 'Density',\r\n densityComfortable: 'Comfortable',\r\n densityCompact: 'Compact',\r\n resizeColumn: 'Resize column',\r\n expandRow: 'Expand row',\r\n collapseRow: 'Collapse row',\r\n filter: {\r\n addFilter: 'Filter',\r\n searchField: 'Search field...',\r\n noField: 'No field found',\r\n operator: 'Operator',\r\n value: 'Value',\r\n apply: 'Apply',\r\n enterHint: 'Enter',\r\n clearAll: 'Clear',\r\n and: 'AND',\r\n or: 'OR',\r\n remove: 'Remove',\r\n back: 'Back',\r\n dateToday: 'Today',\r\n dateLast7: 'Last 7 days',\r\n dateLast30: 'Last 30 days',\r\n dateThisMonth: 'This month',\r\n dateCustom: 'Custom range',\r\n dateFrom: 'Start',\r\n dateTo: 'End',\r\n operators: {\r\n equal: 'equals',\r\n notEqual: 'not equal to',\r\n greaterThan: 'greater than',\r\n greaterOrEqual: 'greater than or equal to',\r\n lessThan: 'less than',\r\n lessOrEqual: 'less than or equal to',\r\n contains: 'contains',\r\n startsWith: 'starts with',\r\n endsWith: 'ends with',\r\n in: 'is one of',\r\n isNull: 'is empty',\r\n isNotNull: 'is not empty',\r\n between: 'is between',\r\n },\r\n },\r\n pagination: {\r\n records: 'records',\r\n perPage: 'per page',\r\n page: 'Page',\r\n previous: 'Previous',\r\n next: 'Next',\r\n first: 'First page',\r\n last: 'Last page',\r\n pageSizeAriaLabel: 'Page size',\r\n navAriaLabel: 'Pagination',\r\n jumpToPage: 'Jump to page',\r\n go: 'Go',\r\n },\r\n },\r\n sidebar: {\r\n collapse: 'Collapse menu',\r\n expand: 'Expand menu',\r\n switchTenant: 'Switch tenant',\r\n noTenants: 'No tenants found',\r\n noUser: 'Not signed in',\r\n nav: 'Main navigation',\r\n },\r\n tabs: {\r\n scrollStart: 'Scroll back',\r\n scrollEnd: 'Scroll forward',\r\n close: 'Close',\r\n },\r\n dropzone: {\r\n label: 'Drag files here or click to browse',\r\n },\r\n colorPicker: {\r\n ariaLabel: 'Pick color',\r\n hexAriaLabel: 'Hex color code',\r\n pickFromScreenAriaLabel: 'Pick color from screen',\r\n },\r\n boxInput: {\r\n top: 'Top',\r\n right: 'Right',\r\n bottom: 'Bottom',\r\n left: 'Left',\r\n linkSides: 'Link sides',\r\n unlinkSides: 'Unlink sides',\r\n },\r\n combobox: {\r\n placeholder: 'Search...',\r\n noResults: 'No results',\r\n create: 'Create “{query}”',\r\n remove: 'Remove {label}',\r\n },\r\n select: {\r\n placeholder: 'Select',\r\n },\r\n searchInput: {\r\n placeholder: 'Search...',\r\n ariaLabel: 'Search',\r\n clearAriaLabel: 'Clear',\r\n },\r\n toast: {\r\n dismiss: 'Dismiss',\r\n },\r\n otpInput: {\r\n ariaLabel: 'One-time code',\r\n },\r\n stepper: {\r\n ariaLabel: 'Steps',\r\n optional: 'Optional',\r\n completed: 'Completed',\r\n error: 'Needs attention',\r\n },\r\n progress: {\r\n ariaLabel: 'Progress',\r\n },\r\n passwordInput: {\r\n show: 'Show',\r\n hide: 'Hide',\r\n },\r\n qrCode: {\r\n ariaLabel: 'QR code',\r\n error: 'QR code could not be generated: the content is too long.',\r\n },\r\n chip: {\r\n remove: 'Remove',\r\n },\r\n alert: {\r\n dismiss: 'Dismiss',\r\n },\r\n breadcrumb: {\r\n ariaLabel: 'Breadcrumb',\r\n },\r\n avatarGroup: {\r\n overflowAriaLabel: 'more',\r\n },\r\n chart: {\r\n showTable: 'Show as table',\r\n showChart: 'Show as chart',\r\n category: 'Category',\r\n },\r\n command: {\r\n placeholder: 'Type a command or search…',\r\n ariaLabel: 'Command palette',\r\n empty: 'No results found.',\r\n resultsCount: 'results',\r\n navigate: 'to navigate',\r\n select: 'to select',\r\n close: 'to close',\r\n },\r\n characterCount: {\r\n remaining: 'characters remaining',\r\n overLimit: 'characters over the limit',\r\n characters: 'characters',\r\n },\r\n copy: {\r\n copy: 'Copy',\r\n copied: 'Copied',\r\n failed: 'Copy failed',\r\n code: 'Code',\r\n },\r\n pagination: {\r\n navAriaLabel: 'Pagination',\r\n previous: 'Previous page',\r\n next: 'Next page',\r\n first: 'First page',\r\n last: 'Last page',\r\n page: 'Page',\r\n },\r\n tour: {\r\n next: 'Next',\r\n back: 'Back',\r\n skip: 'Skip tour',\r\n done: 'Done',\r\n stepOf: 'of',\r\n },\r\n rating: {\r\n ariaLabel: 'Rating',\r\n outOf: 'out of',\r\n },\r\n themeSwitcher: {\r\n ariaLabel: 'Color theme',\r\n light: 'Light',\r\n dark: 'Dark',\r\n system: 'System',\r\n },\r\n treeSelect: {\r\n placeholder: 'Select',\r\n searchPlaceholder: 'Search…',\r\n noResults: 'No results',\r\n },\r\n statTile: {\r\n increase: 'Increase',\r\n decrease: 'Decrease',\r\n noChange: 'No change',\r\n },\r\n slider: {\r\n minThumb: 'Minimum',\r\n maxThumb: 'Maximum',\r\n },\r\n splitButton: {\r\n moreActions: 'More actions',\r\n },\r\n fileUpload: {\r\n uploading: 'Uploading…',\r\n done: 'Uploaded',\r\n failed: 'Upload failed',\r\n queued: 'Waiting…',\r\n retry: 'Retry',\r\n cancel: 'Cancel',\r\n remove: 'Remove',\r\n files: '{count} files',\r\n },\r\n sortable: {\r\n instructions: 'Press Space to pick up, arrow keys to move, Space to drop, Escape to cancel.',\r\n grabbed: '{item} grabbed. Position {position} of {total}.',\r\n moved: '{item} moved to position {position} of {total}.',\r\n movedToColumn: '{item} moved to {column}, position {position} of {total}.',\r\n dropped: '{item} dropped at position {position} of {total}.',\r\n cancelled: 'Move cancelled. {item} returned to position {position}.',\r\n dragHandle: 'Reorder {item}',\r\n card: 'card',\r\n },\r\n countdown: {\r\n days: 'days',\r\n hours: 'hours',\r\n minutes: 'minutes',\r\n seconds: 'seconds',\r\n remaining: '{time} remaining',\r\n finished: 'Time is up',\r\n },\r\n carousel: {\r\n previous: 'Previous slide',\r\n next: 'Next slide',\r\n slide: '{index} of {total}',\r\n pause: 'Pause autoplay',\r\n play: 'Start autoplay',\r\n goTo: 'Go to slide {index}',\r\n carousel: 'Carousel',\r\n },\r\n inlineEdit: {\r\n edit: 'Edit',\r\n save: 'Save',\r\n cancel: 'Cancel',\r\n empty: 'Click to add',\r\n },\r\n transferList: {\r\n available: 'Available',\r\n selected: 'Selected',\r\n moveRight: 'Move selected right',\r\n moveLeft: 'Move selected left',\r\n moveAllRight: 'Move all right',\r\n moveAllLeft: 'Move all left',\r\n search: 'Search',\r\n count: '{selected} of {total} selected',\r\n empty: 'No items',\r\n },\r\n lightbox: {\r\n close: 'Close',\r\n previous: 'Previous image',\r\n next: 'Next image',\r\n zoomIn: 'Zoom in',\r\n zoomOut: 'Zoom out',\r\n counter: '{index} of {total}',\r\n gallery: 'Image viewer',\r\n },\r\n notificationCenter: {\r\n title: 'Notifications',\r\n markAllRead: 'Mark all as read',\r\n empty: 'You are all caught up',\r\n emptyDescription: 'New notifications will show up here.',\r\n unread: 'Unread',\r\n trigger: 'Notifications, {count} unread',\r\n viewAll: 'View all',\r\n },\r\n agenda: {\r\n allDay: 'All day',\r\n empty: 'Nothing scheduled',\r\n today: 'Today',\r\n tomorrow: 'Tomorrow',\r\n },\r\n mention: {\r\n suggestions: 'Suggestions',\r\n noResults: 'No matches',\r\n },\r\n panelGroup: {\r\n resize: 'Resize panel {index}',\r\n },\r\n authCard: {\r\n title: 'Welcome back',\r\n description: 'Sign in to continue to your workspace.',\r\n email: 'Email',\r\n emailPlaceholder: 'you@company.com',\r\n password: 'Password',\r\n forgotPassword: 'Forgot password?',\r\n remember: 'Keep me signed in',\r\n submit: 'Sign in',\r\n divider: 'or continue with email',\r\n noAccount: 'New here?',\r\n signUp: 'Create an account',\r\n emailRequired: 'Email is required',\r\n emailInvalid: 'Enter a valid email',\r\n passwordRequired: 'Password is required',\r\n errorTitle: 'Sign-in failed',\r\n },\r\n inviteMembers: {\r\n title: 'Invite teammates',\r\n description: 'They will receive an email with a link to join.',\r\n emails: 'Email addresses',\r\n emailsPlaceholder: 'name@company.com, press Enter',\r\n role: 'Role',\r\n submit: 'Send invites',\r\n invalidEmails: 'Not valid: {emails}',\r\n emailsRequired: 'Add at least one email address',\r\n },\r\n};\r\n","import { computed, inject, InjectionToken, type Signal, signal } from '@angular/core';\r\nimport { enUS, type Locale } from 'date-fns/locale';\r\nimport type { MfLabels } from './labels';\r\nimport { mfLabelsEn } from './labels.en';\r\n\r\n/**\r\n * Kitin TEK metin kaynağı — `provideMesgflowUi()` (bkz. `provide.ts`)\r\n * `provide` etmezse tüketici İngilizce varsayılanlarla çalışır (ng-zorro'nun\r\n * `NZ_I18N`'i / PrimeNG'nin `providePrimeNG` config'iyle aynı desen — bu kit\r\n * daha önce sadece Dialog için uyguluyordu, `MF_DIALOG_LABELS` artık bu\r\n * token'dan türeyen bir \"seçici\" — bkz. aşağıdaki `labelToken`).\r\n */\r\nexport const MF_LABELS = new InjectionToken<Signal<MfLabels>>('mesgflow.labels', {\r\n factory: () => signal(mfLabelsEn),\r\n});\r\n\r\n/** Calendar/DatePicker'ın ay/gün adları için — varsayılan `enUS`, `provideMesgflowUi({ dateLocale })` ile değiştirilir. */\r\nexport const MF_DATE_LOCALE = new InjectionToken<Signal<Locale>>('mesgflow.date-locale', {\r\n factory: () => signal(enUS),\r\n});\r\n\r\n/**\r\n * `MF_LABELS`'ın bir alt-alanına daralan, reaktif bir \"seçici\" token üretir\r\n * — her bileşen ailesi umbrella nesnenin TAMAMINI değil sadece kendi\r\n * alanını inject eder. `computed()` içindeki `labels` referansı DIŞARIDA\r\n * (factory'nin senkron gövdesinde) `inject()` edildiği için geçerli bir DI\r\n * bağlamında çözülüyor; `computed`'ın kendi callback'i içinde `inject()`\r\n * çağırmak ÇALIŞMAZ (lazy değerlendirme DI bağlamının dışında kalır).\r\n */\r\nfunction labelToken<K extends keyof MfLabels>(key: K, name: string) {\r\n return new InjectionToken<Signal<MfLabels[K]>>(`mesgflow.${name}-labels`, {\r\n factory: () => {\r\n const labels = inject(MF_LABELS);\r\n return computed(() => labels()[key]);\r\n },\r\n });\r\n}\r\n\r\nexport const MF_COMMON_LABELS = labelToken('common', 'common');\r\nexport const MF_DIALOG_LABELS = labelToken('dialog', 'dialog');\r\nexport const MF_DATE_PICKER_LABELS = labelToken('datePicker', 'date-picker');\r\nexport const MF_TIME_PICKER_LABELS = labelToken('timePicker', 'time-picker');\r\nexport const MF_TABLE_LABELS = labelToken('table', 'table');\r\nexport const MF_SIDEBAR_LABELS = labelToken('sidebar', 'sidebar');\r\nexport const MF_TABS_LABELS = labelToken('tabs', 'tabs');\r\nexport const MF_DROPZONE_LABELS = labelToken('dropzone', 'dropzone');\r\nexport const MF_COLOR_PICKER_LABELS = labelToken('colorPicker', 'color-picker');\r\nexport const MF_BOX_INPUT_LABELS = labelToken('boxInput', 'box-input');\r\nexport const MF_COMBOBOX_LABELS = labelToken('combobox', 'combobox');\r\nexport const MF_SELECT_LABELS = labelToken('select', 'select');\r\nexport const MF_SEARCH_INPUT_LABELS = labelToken('searchInput', 'search-input');\r\nexport const MF_TOAST_LABELS = labelToken('toast', 'toast');\r\nexport const MF_OTP_INPUT_LABELS = labelToken('otpInput', 'otp-input');\r\nexport const MF_STEPPER_LABELS = labelToken('stepper', 'stepper');\r\nexport const MF_PROGRESS_LABELS = labelToken('progress', 'progress');\r\nexport const MF_PASSWORD_INPUT_LABELS = labelToken('passwordInput', 'password-input');\r\nexport const MF_QR_CODE_LABELS = labelToken('qrCode', 'qr-code');\r\nexport const MF_CHIP_LABELS = labelToken('chip', 'chip');\r\nexport const MF_ALERT_LABELS = labelToken('alert', 'alert');\r\nexport const MF_BREADCRUMB_LABELS = labelToken('breadcrumb', 'breadcrumb');\r\nexport const MF_AVATAR_GROUP_LABELS = labelToken('avatarGroup', 'avatar-group');\r\nexport const MF_CHART_LABELS = labelToken('chart', 'chart');\r\nexport const MF_COMMAND_LABELS = labelToken('command', 'command');\r\nexport const MF_CHARACTER_COUNT_LABELS = labelToken('characterCount', 'character-count');\r\nexport const MF_COPY_LABELS = labelToken('copy', 'copy');\r\nexport const MF_PAGINATION_LABELS = labelToken('pagination', 'pagination');\r\nexport const MF_TOUR_LABELS = labelToken('tour', 'tour');\r\nexport const MF_RATING_LABELS = labelToken('rating', 'rating');\r\nexport const MF_THEME_SWITCHER_LABELS = labelToken('themeSwitcher', 'theme-switcher');\r\nexport const MF_TREE_SELECT_LABELS = labelToken('treeSelect', 'tree-select');\r\nexport const MF_STAT_TILE_LABELS = labelToken('statTile', 'stat-tile');\r\nexport const MF_SLIDER_LABELS = labelToken('slider', 'slider');\r\nexport const MF_SPLIT_BUTTON_LABELS = labelToken('splitButton', 'split-button');\r\nexport const MF_FILE_UPLOAD_LABELS = labelToken('fileUpload', 'file-upload');\r\nexport const MF_SORTABLE_LABELS = labelToken('sortable', 'sortable');\r\nexport const MF_COUNTDOWN_LABELS = labelToken('countdown', 'countdown');\r\nexport const MF_CAROUSEL_LABELS = labelToken('carousel', 'carousel');\r\nexport const MF_INLINE_EDIT_LABELS = labelToken('inlineEdit', 'inline-edit');\r\nexport const MF_TRANSFER_LIST_LABELS = labelToken('transferList', 'transfer-list');\r\nexport const MF_LIGHTBOX_LABELS = labelToken('lightbox', 'lightbox');\r\nexport const MF_NOTIFICATION_CENTER_LABELS = labelToken(\r\n 'notificationCenter',\r\n 'notification-center',\r\n);\r\nexport const MF_AGENDA_LABELS = labelToken('agenda', 'agenda');\r\nexport const MF_MENTION_LABELS = labelToken('mention', 'mention');\r\nexport const MF_PANEL_GROUP_LABELS = labelToken('panelGroup', 'panel-group');\r\nexport const MF_AUTH_CARD_LABELS = labelToken('authCard', 'auth-card');\r\nexport const MF_INVITE_MEMBERS_LABELS = labelToken('inviteMembers', 'invite-members');\r\n","import {\r\n computed,\r\n type EnvironmentProviders,\r\n isSignal,\r\n makeEnvironmentProviders,\r\n type Provider,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport type { Locale } from 'date-fns/locale';\r\nimport { type DeepPartial, mergeLabels, type MfLabels } from './labels';\r\nimport { mfLabelsEn } from './labels.en';\r\nimport { MF_DATE_LOCALE, MF_LABELS } from './tokens';\r\n\r\nexport interface ProvideMesgflowUiOptions {\r\n /**\r\n * `mfLabelsEn`'in üstüne yazılacak alanlar — ya sabit bir `DeepPartial<MfLabels>`\r\n * (ör. `mfLabelsTr`, bkz. `@mesgflow/ui-kit/i18n/tr`) ya da tüketicinin kendi\r\n * i18n sistemine bağlı, dil değişince CANLI güncellenen bir `Signal`. Her\r\n * iki durumda da verilmeyen her yaprak `mfLabelsEn`'den gelir — TAM bir\r\n * `MfLabels` nesnesi sağlamak ZORUNLU değil.\r\n */\r\n labels?: DeepPartial<MfLabels> | Signal<DeepPartial<MfLabels>>;\r\n /** Calendar/DatePicker ay/gün adları — varsayılan `date-fns/locale`'in `enUS`'u. Dil değişince canlı güncellenmesi için bir `Signal` da verilebilir. */\r\n dateLocale?: Locale | Signal<Locale>;\r\n}\r\n\r\n/**\r\n * `app.config.ts`'in `providers` dizisine eklenir — `MF_LABELS`/`MF_DATE_LOCALE`'ı\r\n * (ve bunlardan türeyen `MF_DIALOG_LABELS`/`MF_TABLE_LABELS`/… seçici\r\n * token'larını, bkz. `tokens.ts`) tüketicinin verdiği değerlerle sağlar.\r\n * Hiç çağrılmazsa kit İngilizce varsayılanlarla (`mfLabelsEn`, `enUS`) çalışır.\r\n *\r\n * ```ts\r\n * import { provideMesgflowUi } from '@mesgflow/ui-kit';\r\n * import { mfLabelsTr } from '@mesgflow/ui-kit/i18n/tr';\r\n * import { tr } from 'date-fns/locale';\r\n *\r\n * providers: [provideMesgflowUi({ labels: mfLabelsTr, dateLocale: tr })]\r\n * ```\r\n */\r\nexport function provideMesgflowUi(options: ProvideMesgflowUiOptions = {}): EnvironmentProviders {\r\n const providers: Provider[] = [];\r\n\r\n if (options.labels !== undefined) {\r\n const labelsOption = options.labels;\r\n providers.push({\r\n provide: MF_LABELS,\r\n useFactory: () =>\r\n isSignal(labelsOption)\r\n ? computed(() => mergeLabels(mfLabelsEn, labelsOption()))\r\n : signal(mergeLabels(mfLabelsEn, labelsOption)),\r\n });\r\n }\r\n\r\n if (options.dateLocale) {\r\n const dateLocale = options.dateLocale;\r\n providers.push({\r\n provide: MF_DATE_LOCALE,\r\n useFactory: () => (isSignal(dateLocale) ? dateLocale : signal(dateLocale)),\r\n });\r\n }\r\n\r\n return makeEnvironmentProviders(providers);\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { input, output, computed, signal, Component, inject, model, booleanAttribute, effect, untracked } from '@angular/core';
|
|
3
|
-
import { focusRecipe, cn, MF_SIDEBAR_LABELS } from '@mesgflow/ui-kit/core';
|
|
3
|
+
import { focusRecipe, cn, MF_SIDEBAR_LABELS, nextId } from '@mesgflow/ui-kit/core';
|
|
4
4
|
import { Icon } from '@mesgflow/ui-kit/icon';
|
|
5
5
|
import { Tooltip } from '@mesgflow/ui-kit/tooltip';
|
|
6
6
|
import { cva } from 'class-variance-authority';
|
|
@@ -225,6 +225,20 @@ class SidebarTenantSwitcher {
|
|
|
225
225
|
...(ngDevMode ? [{ debugName: "effectiveLabel" }] : /* istanbul ignore next */ []));
|
|
226
226
|
effectiveNoTenantsLabel = computed(() => this.noTenantsLabel() ?? this.sidebarLabels().noTenants, /* @ts-ignore */
|
|
227
227
|
...(ngDevMode ? [{ debugName: "effectiveNoTenantsLabel" }] : /* istanbul ignore next */ []));
|
|
228
|
+
/**
|
|
229
|
+
* Tetiğin erişilebilir adı. `description` varken görsel ikinci satır eylem
|
|
230
|
+
* etiketinin ("Switch tenant") yerini alır — ad eylemi söylemezdi; bu yüzden
|
|
231
|
+
* "{eylem}: {ad}" verilir, açıklama `aria-describedby` ile okunur. Açıklama
|
|
232
|
+
* yoksa eski davranış: genişken içerikten türer ("{ad} {eylem}"), daraltılmışken ad.
|
|
233
|
+
*/
|
|
234
|
+
triggerAriaLabel = computed(() => {
|
|
235
|
+
const tenant = this.activeTenant();
|
|
236
|
+
if (tenant?.description)
|
|
237
|
+
return `${this.effectiveLabel()}: ${tenant.name}`;
|
|
238
|
+
return this.collapsed() ? (tenant?.name ?? this.effectiveLabel()) : null;
|
|
239
|
+
}, /* @ts-ignore */
|
|
240
|
+
...(ngDevMode ? [{ debugName: "triggerAriaLabel" }] : /* istanbul ignore next */ []));
|
|
241
|
+
descriptionId = nextId('mf-tenant-description');
|
|
228
242
|
cn = cn;
|
|
229
243
|
open = signal(false, /* @ts-ignore */
|
|
230
244
|
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
@@ -295,11 +309,11 @@ class SidebarTenantSwitcher {
|
|
|
295
309
|
}
|
|
296
310
|
}
|
|
297
311
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SidebarTenantSwitcher, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
298
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SidebarTenantSwitcher, isStandalone: true, selector: "mf-sidebar-tenant-switcher", inputs: { tenants: { classPropertyName: "tenants", publicName: "tenants", isSignal: true, isRequired: false, transformFunction: null }, activeTenantId: { classPropertyName: "activeTenantId", publicName: "activeTenantId", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noTenantsLabel: { classPropertyName: "noTenantsLabel", publicName: "noTenantsLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tenantChange: "tenantChange" }, host: { classAttribute: "contents" }, ngImport: i0, template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-x-0 border-t-0 border-b border-border bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-state-hover focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:border-primary-200 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"collapsed()
|
|
312
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SidebarTenantSwitcher, isStandalone: true, selector: "mf-sidebar-tenant-switcher", inputs: { tenants: { classPropertyName: "tenants", publicName: "tenants", isSignal: true, isRequired: false, transformFunction: null }, activeTenantId: { classPropertyName: "activeTenantId", publicName: "activeTenantId", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, noTenantsLabel: { classPropertyName: "noTenantsLabel", publicName: "noTenantsLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tenantChange: "tenantChange" }, host: { classAttribute: "contents" }, ngImport: i0, template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-x-0 border-t-0 border-b border-border bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-state-hover focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:border-primary-200 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"triggerAriaLabel()\"\r\n [attr.aria-describedby]=\"!collapsed() && activeTenant()?.description ? descriptionId : null\"\r\n [mfTooltip]=\"collapsed() ? (activeTenant()?.name ?? effectiveLabel()) : ''\"\r\n tooltipPosition=\"right\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n <mf-avatar [name]=\"activeTenant()?.name ?? '?'\" shape=\"square\" size=\"md\" [colorful]=\"true\" />\r\n @if (!collapsed()) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span\r\n class=\"truncate font-display text-sm font-semibold text-fg group-data-[appearance=brand]/sidebar:text-primary-50 group-data-[appearance=brand-light]/sidebar:text-primary-900\"\r\n >\r\n {{ activeTenant()?.name ?? effectiveNoTenantsLabel() }}\r\n </span>\r\n <span\r\n [id]=\"descriptionId\"\r\n class=\"truncate text-xs text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >{{ activeTenant()?.description || effectiveLabel() }}</span\r\n >\r\n </span>\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"shrink-0 text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >unfold_more</span\r\n >\r\n }\r\n</button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [matchTriggerWidth]=\"!collapsed()\"\r\n [panelClass]=\"cn('max-h-72', collapsed() ? 'min-w-60' : '')\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"effectiveLabel()\"\r\n class=\"w-full text-sm\"\r\n (keydown)=\"onPanelKeydown($event)\"\r\n >\r\n @for (tenant of tenants(); track tenant.id; let i = $index) {\r\n <!-- role=\"option\" B\u0130LEREK odaklanabilir de\u011Fil \u2014 klavye gezinmesi yukar\u0131daki listbox (keydown)'da merkezi. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <li\r\n role=\"option\"\r\n [attr.aria-selected]=\"tenant.id === activeTenantId()\"\r\n [attr.aria-disabled]=\"tenant.disabled ? true : null\"\r\n [attr.aria-label]=\"optionAriaLabel(tenant)\"\r\n [class]=\"optionClasses(tenant, i)\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(tenant)\"\r\n >\r\n <mf-avatar [name]=\"tenant.name\" shape=\"square\" size=\"sm\" [colorful]=\"true\" />\r\n @if (tenant.description) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span class=\"truncate text-fg-muted\">{{ tenant.name }}</span>\r\n <span class=\"truncate text-xs text-fg-subtle\">{{ tenant.description }}</span>\r\n </span>\r\n } @else {\r\n <span class=\"min-w-0 flex-1 truncate text-fg-muted\">{{ tenant.name }}</span>\r\n }\r\n @if (tenant.badge) {\r\n <span mfBadge [tone]=\"tenant.badgeTone ?? 'neutral'\" size=\"sm\" casing=\"sentence\">{{\r\n tenant.badge\r\n }}</span>\r\n }\r\n @if (tenant.id === activeTenantId()) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n } @empty {\r\n <li class=\"px-2.5 py-1.5 text-fg-subtle\">{{ effectiveNoTenantsLabel() }}</li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n", dependencies: [{ kind: "component", type: Avatar, selector: "mf-avatar", inputs: ["name", "src", "size", "shape", "colorful", "tone"] }, { kind: "directive", type: Badge, selector: "span[mfBadge]", inputs: ["tone", "size", "casing"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }, { kind: "directive", type: Tooltip, selector: "[mfTooltip], [mfTooltipContent]", inputs: ["mfTooltip", "mfTooltipContent", "tooltipPosition"], exportAs: ["mfTooltip"] }] });
|
|
299
313
|
}
|
|
300
314
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SidebarTenantSwitcher, decorators: [{
|
|
301
315
|
type: Component,
|
|
302
|
-
args: [{ selector: 'mf-sidebar-tenant-switcher', imports: [Avatar, Badge, Icon, OverlayModule, Popover, Tooltip], host: { class: 'contents' }, template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-x-0 border-t-0 border-b border-border bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-state-hover focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:border-primary-200 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"collapsed()
|
|
316
|
+
args: [{ selector: 'mf-sidebar-tenant-switcher', imports: [Avatar, Badge, Icon, OverlayModule, Popover, Tooltip], host: { class: 'contents' }, template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-x-0 border-t-0 border-b border-border bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-state-hover focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:border-primary-200 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"triggerAriaLabel()\"\r\n [attr.aria-describedby]=\"!collapsed() && activeTenant()?.description ? descriptionId : null\"\r\n [mfTooltip]=\"collapsed() ? (activeTenant()?.name ?? effectiveLabel()) : ''\"\r\n tooltipPosition=\"right\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n <mf-avatar [name]=\"activeTenant()?.name ?? '?'\" shape=\"square\" size=\"md\" [colorful]=\"true\" />\r\n @if (!collapsed()) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span\r\n class=\"truncate font-display text-sm font-semibold text-fg group-data-[appearance=brand]/sidebar:text-primary-50 group-data-[appearance=brand-light]/sidebar:text-primary-900\"\r\n >\r\n {{ activeTenant()?.name ?? effectiveNoTenantsLabel() }}\r\n </span>\r\n <span\r\n [id]=\"descriptionId\"\r\n class=\"truncate text-xs text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >{{ activeTenant()?.description || effectiveLabel() }}</span\r\n >\r\n </span>\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"shrink-0 text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >unfold_more</span\r\n >\r\n }\r\n</button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [matchTriggerWidth]=\"!collapsed()\"\r\n [panelClass]=\"cn('max-h-72', collapsed() ? 'min-w-60' : '')\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"effectiveLabel()\"\r\n class=\"w-full text-sm\"\r\n (keydown)=\"onPanelKeydown($event)\"\r\n >\r\n @for (tenant of tenants(); track tenant.id; let i = $index) {\r\n <!-- role=\"option\" B\u0130LEREK odaklanabilir de\u011Fil \u2014 klavye gezinmesi yukar\u0131daki listbox (keydown)'da merkezi. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <li\r\n role=\"option\"\r\n [attr.aria-selected]=\"tenant.id === activeTenantId()\"\r\n [attr.aria-disabled]=\"tenant.disabled ? true : null\"\r\n [attr.aria-label]=\"optionAriaLabel(tenant)\"\r\n [class]=\"optionClasses(tenant, i)\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(tenant)\"\r\n >\r\n <mf-avatar [name]=\"tenant.name\" shape=\"square\" size=\"sm\" [colorful]=\"true\" />\r\n @if (tenant.description) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span class=\"truncate text-fg-muted\">{{ tenant.name }}</span>\r\n <span class=\"truncate text-xs text-fg-subtle\">{{ tenant.description }}</span>\r\n </span>\r\n } @else {\r\n <span class=\"min-w-0 flex-1 truncate text-fg-muted\">{{ tenant.name }}</span>\r\n }\r\n @if (tenant.badge) {\r\n <span mfBadge [tone]=\"tenant.badgeTone ?? 'neutral'\" size=\"sm\" casing=\"sentence\">{{\r\n tenant.badge\r\n }}</span>\r\n }\r\n @if (tenant.id === activeTenantId()) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n } @empty {\r\n <li class=\"px-2.5 py-1.5 text-fg-subtle\">{{ effectiveNoTenantsLabel() }}</li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n" }]
|
|
303
317
|
}], propDecorators: { tenants: [{ type: i0.Input, args: [{ isSignal: true, alias: "tenants", required: false }] }], activeTenantId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTenantId", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], noTenantsLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "noTenantsLabel", required: false }] }], tenantChange: [{ type: i0.Output, args: ["tenantChange"] }] } });
|
|
304
318
|
|
|
305
319
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-sidebar.mjs","sources":["../../../projects/ui-kit/sidebar/sidebar.variants.ts","../../../projects/ui-kit/sidebar/sidebar-nav-item.ts","../../../projects/ui-kit/sidebar/sidebar-nav-item.html","../../../projects/ui-kit/sidebar/sidebar-tenant-switcher.ts","../../../projects/ui-kit/sidebar/sidebar-tenant-switcher.html","../../../projects/ui-kit/sidebar/sidebar-user-menu.ts","../../../projects/ui-kit/sidebar/sidebar-user-menu.html","../../../projects/ui-kit/sidebar/sidebar.ts","../../../projects/ui-kit/sidebar/sidebar.html","../../../projects/ui-kit/sidebar/mesgflow-ui-kit-sidebar.ts"],"sourcesContent":["import { focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Kök panel: kart değil, yapısal/kenar-kenara chrome — `shadow-*`/`rounded-*`\r\n * YOK. `bg-chrome` (styles.css'te tanımlı, moda göre 975/950 basamağı arasında\r\n * takas olan yüzey rolü) — dark modda uygulamanın EN KOYU tonu, \"chrome her\r\n * zaman içerikten koyu\" kuralının kaynağı. Kenar artık `border-hairline`\r\n * (border-first depth, 2026-09 Deep Emerald geçişi) — `border-e` UZUN-EL\r\n * yazıldı (`border-e-hairline`, kısaltma DEĞİL) ki `appearance=\"brand\"`'ın\r\n * `border-e-transparent`'ı AYNI özgüllükte, cascade sırasına bağlı olmadan\r\n * güvenle üstüne yazabilsin.\r\n *\r\n * `appearance: 'chrome' | 'brand' | 'brand-light'` — `group/sidebar` + kök\r\n * elementteki `data-appearance` ATTRIBUTE'u (bkz. sidebar.html), alt\r\n * bileşenler kendi class'larına yeni bir input EKLEMEDEN\r\n * `group-data-[appearance=brand]/sidebar:`/`group-data-[appearance=brand-light]/sidebar:`\r\n * varyantıyla opt-in eder — CDK overlay'e (flyout/tenant listesi) taşınan\r\n * içerik bu grubun TORUNU DEĞİLDİR, bu yüzden overlay panelleri bilerek\r\n * katı `chrome` kalır (istenen: aşırı marka rengi overlay'lerde yorucu olur).\r\n *\r\n * `brand-light` — kullanıcı isteğiyle eklendi (varsayılan HÂLÂ `chrome`,\r\n * `brand`'in KENDİSİ birebir korunuyor — bu SADECE üçüncü bir seçenek):\r\n * `brand`in \"her adımda bir basamak açığa doğru\" desenini primary rampasının\r\n * AÇIK ucuna yansıtır (900→100, 800→200, 300→700, beyaz→900 gibi) — aynı\r\n * \"iki modda AYNI, marka her zaman sabit\" felsefesi, sadece açık zeminde.\r\n * `primary-100` `neutral-100` canvas'a karşı yalnızca 1.08:1 (saf L farkı) —\r\n * `brand`in aksine (900 her zeminden zaten kopuyor) burada kenarlık BİLEREK\r\n * KORUNUYOR (`border-e-primary-200`) ki blok net ayrışsın.\r\n */\r\nexport const sidebarVariants = cva(\r\n /*\r\n * `overflow-hidden` BİLEREK yok — kenar toggle butonu bu kutunun dışına\r\n * taşarak (`-end-3`) sınırı \"kucaklıyor\" (Notion/Linear deseni), kırpma\r\n * kök elementte olsaydı kendi toggle'ını keserdi. İç içerik (tenant/nav/\r\n * kullanıcı sütunu) genişlik geçişi sırasında taşma göstermesin diye kendi\r\n * `overflow-hidden`'ını sidebar.html'de ayrı bir iç wrapper'da taşıyor.\r\n */\r\n 'group/sidebar relative flex h-full flex-col border-e border-e-hairline bg-chrome transition-[width] duration-base ease-out',\r\n {\r\n variants: {\r\n collapsed: {\r\n true: 'w-[72px]',\r\n false: 'w-64',\r\n },\r\n appearance: {\r\n chrome: '',\r\n /** Marka kenar çubuğu — kök zemini iki modda da primary-900 (#062c22, kullanıcının \"primer\"i), kenarlık gizlenir (zemin zaten belirgin bir blok). */\r\n brand: 'border-e-transparent bg-primary-900',\r\n /** Marka kenar çubuğu, AÇIK — kök zemini iki modda da primary-100, kenarlık KORUNUR (bkz. yukarıdaki doc). */\r\n 'brand-light': 'border-e-primary-200 bg-primary-100',\r\n },\r\n /** Çekmece içinde: dış kenarlık yok, genişlik kabı doldurur (bkz. `Sidebar.embedded`). */\r\n embedded: {\r\n true: 'w-full border-e-0',\r\n false: '',\r\n },\r\n },\r\n compoundVariants: [\r\n // Nötr görünüm çekmecenin kendi yüzeyini kullanır; marka zeminleri kontrast için kalır.\r\n { embedded: true, appearance: 'chrome', class: 'bg-transparent' },\r\n ],\r\n defaultVariants: { collapsed: false, appearance: 'chrome', embedded: false },\r\n },\r\n);\r\n\r\n/** `[brand]` yuvasının tenant switcher'a göre yeri — bkz. `Sidebar.brandPlacement`. */\r\nexport type SidebarBrandPlacement = 'replace' | 'above';\r\n\r\n/**\r\n * Nav satırı (leaf veya parent-toggle) — `rounded-sm`(6px, menü öğesi kademesi,\r\n * bkz. styles.css radius notu), panel değil kontrol. `border-s-2 border-s-\r\n * transparent` BASE'te HER ZAMAN rezerve — aktif olunca sadece rengi değişir,\r\n * yoksa 2px'lik ray aktifleşirken satırın geri kalanı kayardı (layout shift).\r\n *\r\n * Brand sınıfları (`group-data-[appearance=brand]/sidebar:…`) özgüllükte\r\n * (0,2,0) — düz `text-fg-muted`/`hover:bg-state-hover` (0,1,0) ve `dark:`\r\n * (0,1,0) varyantlarının HER İKİSİNİ de cascade sırasından bağımsız yener,\r\n * bu yüzden ayrı bir `dark:` ikizi yazmaya gerek yok (brand görünümü iki\r\n * modda da AYNI).\r\n */\r\nexport const sidebarNavItemVariants = cva(\r\n 'group flex w-full appearance-none items-center gap-3 rounded-sm border-0 border-s-2 border-s-transparent bg-transparent px-3 py-2 text-start text-sm font-medium ' +\r\n 'text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg ' +\r\n focusRecipe +\r\n ' ' +\r\n 'group-data-[appearance=brand]/sidebar:text-primary-200 ' +\r\n 'group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:hover:text-primary-50 ' +\r\n 'group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-800 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:hover:text-primary-900 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700',\r\n {\r\n variants: {\r\n /*\r\n * \"Ray\" — bu tazelemenin imza motiflerinden biri (bkz. plan): dolu\r\n * yeşil sol çizgi + tonal işaret zemini, SADECE \"buradasın\" anlamında\r\n * kullanılıyor (sidebar aktif öğe, aktif sekme, seçili tablo satırı —\r\n * başka HİÇBİR yerde). Rol token'ı (`bg-primary-tint text-primary-tint-fg`,\r\n * badge/avatar ile aynı dil) — `color-mix()` her iki modu da TEK satırda\r\n * çözer, ayrı bir `dark:` ikizi YOK.\r\n */\r\n active: {\r\n true:\r\n 'border-s-accent-fill bg-primary-tint text-primary-tint-fg hover:bg-primary-tint hover:text-primary-tint-fg ' +\r\n 'group-data-[appearance=brand]/sidebar:border-s-primary-300 group-data-[appearance=brand]/sidebar:bg-primary-800 ' +\r\n 'group-data-[appearance=brand]/sidebar:text-white group-data-[appearance=brand]/sidebar:hover:bg-primary-800 ' +\r\n 'group-data-[appearance=brand]/sidebar:hover:text-white ' +\r\n 'group-data-[appearance=brand-light]/sidebar:border-s-primary-700 group-data-[appearance=brand-light]/sidebar:bg-primary-200 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-900 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:hover:text-primary-900',\r\n false: '',\r\n },\r\n collapsed: {\r\n true: 'justify-center px-0',\r\n false: '',\r\n },\r\n },\r\n compoundVariants: [\r\n // Daraltılmış (icon-only, 72px) haldeyken ray bastırılıyor — ikonu\r\n // merkeze göre 2px kaydırırdı, dar/simetrik bir rayda yeri yok. Tonal\r\n // zemin (bg-primary-tint, brand'de primary-800) tek başına yeterli\r\n // \"aktif\" sinyali veriyor.\r\n {\r\n active: true,\r\n collapsed: true,\r\n class:\r\n 'border-s-transparent group-data-[appearance=brand]/sidebar:border-s-transparent ' +\r\n 'group-data-[appearance=brand-light]/sidebar:border-s-transparent',\r\n },\r\n ],\r\n defaultVariants: { active: false, collapsed: false },\r\n },\r\n);\r\n\r\nexport type SidebarCollapsedVariant = VariantProps<typeof sidebarVariants>['collapsed'];\r\nexport type SidebarAppearance = NonNullable<VariantProps<typeof sidebarVariants>['appearance']>;\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, input, output, signal } from '@angular/core';\r\nimport { cn, focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport { sidebarNavItemVariants } from './sidebar.variants';\r\nimport type { SidebarNavItem as SidebarNavItemModel } from './sidebar.model';\r\n\r\n/** Genişkenken akordeonda açılan çocuk satırı — brand görünümde metin/hover/odak marka tonlu (bkz. sidebar.variants.ts doc'u, aynı özgüllük mantığı). */\r\nconst CHILD_ROW_BASE =\r\n 'flex w-full appearance-none items-center gap-3 rounded-sm border-0 bg-transparent py-1.5 pe-3 ps-9 text-start text-label text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg ' +\r\n focusRecipe +\r\n ' ' +\r\n 'group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 ' +\r\n 'group-data-[appearance=brand]/sidebar:hover:text-primary-50 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-700 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:hover:text-primary-900 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700';\r\n\r\n/**\r\n * Tek nav satırı — yaprak veya çocuklu (parent). Sadece 1 seviye nesting\r\n * (çocuğun çocuğu render edilmiyor, YAGNI). Genişkenken parent'a tıklayınca\r\n * çocuklar CSS-only grid-rows akordeonuyla İÇERİDE açılır (her grup bağımsız,\r\n * root `Sidebar`'ın `expandedIds` set'i tarafından yönetilir). Daraltılmışken\r\n * aynı satıra TIKLAYINCA (hover değil — kullanıcı kararı) sağda bir `Popover`\r\n * flyout paneli çocukları listeler (bkz. plan Faz 1c).\r\n */\r\n@Component({\r\n selector: 'mf-sidebar-nav-item',\r\n imports: [Icon, OverlayModule, Popover, Tooltip],\r\n host: { class: 'contents' },\r\n templateUrl: './sidebar-nav-item.html',\r\n})\r\nexport class SidebarNavItemRow {\r\n readonly item = input.required<SidebarNavItemModel>();\r\n readonly collapsed = input(false);\r\n readonly activeItemId = input<string | null>(null);\r\n /** Genişkenken akordeon açık/kapalı durumu — root Sidebar tarafından kontrol edilir. */\r\n readonly expanded = input(false);\r\n\r\n readonly activate = output<SidebarNavItemModel>();\r\n readonly toggleExpand = output<string>();\r\n\r\n protected readonly hasChildren = computed(() => (this.item().children?.length ?? 0) > 0);\r\n protected readonly isActive = computed(() => {\r\n const id = this.activeItemId();\r\n return this.item().id === id || (this.item().children?.some((c) => c.id === id) ?? false);\r\n });\r\n\r\n protected readonly rowClasses = computed(() =>\r\n cn(sidebarNavItemVariants({ active: this.isActive(), collapsed: this.collapsed() })),\r\n );\r\n\r\n protected readonly flyoutOpen = signal(false);\r\n\r\n protected onRowClick(): void {\r\n if (this.hasChildren()) {\r\n if (this.collapsed()) {\r\n this.flyoutOpen.update((v) => !v);\r\n } else {\r\n this.toggleExpand.emit(this.item().id);\r\n }\r\n return;\r\n }\r\n this.activate.emit(this.item());\r\n }\r\n\r\n protected childRowClasses(child: SidebarNavItemModel): string {\r\n return cn(\r\n CHILD_ROW_BASE,\r\n child.id === this.activeItemId() &&\r\n 'text-accent group-data-[appearance=brand]/sidebar:text-white ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-900',\r\n );\r\n }\r\n\r\n protected onChildClick(child: SidebarNavItemModel): void {\r\n this.activate.emit(child);\r\n this.closeFlyout();\r\n }\r\n\r\n protected closeFlyout(): void {\r\n this.flyoutOpen.set(false);\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"rowClasses()\"\r\n [attr.aria-expanded]=\"hasChildren() ? (collapsed() ? flyoutOpen() : expanded()) : null\"\r\n [attr.aria-haspopup]=\"hasChildren() && collapsed() ? 'menu' : null\"\r\n [attr.aria-current]=\"isActive() && !hasChildren() ? 'page' : null\"\r\n [attr.aria-label]=\"collapsed() ? item().label : null\"\r\n [mfTooltip]=\"collapsed() ? item().label : ''\"\r\n tooltipPosition=\"right\"\r\n (click)=\"onRowClick()\"\r\n>\r\n <span mfIcon [size]=\"20\" [filled]=\"isActive()\">{{ item().icon }}</span>\r\n\r\n @if (!collapsed()) {\r\n <span class=\"min-w-0 flex-1 truncate\">{{ item().label }}</span>\r\n @if (item().badge !== undefined) {\r\n <span\r\n class=\"rounded-full bg-primary-tint px-1.5 py-0.5 font-mono text-eyebrow text-primary-tint-fg group-data-[appearance=brand]/sidebar:bg-primary-800 group-data-[appearance=brand]/sidebar:text-primary-100 group-data-[appearance=brand-light]/sidebar:bg-primary-200 group-data-[appearance=brand-light]/sidebar:text-primary-800\"\r\n >\r\n {{ item().badge }}\r\n </span>\r\n }\r\n @if (hasChildren()) {\r\n <span\r\n mfIcon\r\n [size]=\"16\"\r\n class=\"shrink-0 text-fg-subtle transition-transform duration-base group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700 rtl:-scale-x-100\"\r\n [class.rotate-90]=\"expanded()\"\r\n [class.rtl:-rotate-90]=\"expanded()\"\r\n >\r\n chevron_right\r\n </span>\r\n }\r\n }\r\n</button>\r\n\r\n@if (hasChildren() && !collapsed()) {\r\n <div\r\n class=\"grid overflow-hidden transition-[grid-template-rows] duration-base ease-out\"\r\n [style.grid-template-rows]=\"expanded() ? '1fr' : '0fr'\"\r\n [attr.inert]=\"expanded() ? null : true\"\r\n >\r\n <ul class=\"m-0 min-h-0 list-none overflow-hidden p-0\">\r\n @for (child of item().children; track child.id) {\r\n <li>\r\n <button\r\n type=\"button\"\r\n [class]=\"childRowClasses(child)\"\r\n [attr.aria-current]=\"child.id === activeItemId() ? 'page' : null\"\r\n (click)=\"onChildClick(child)\"\r\n >\r\n <span mfIcon [size]=\"16\">{{ child.icon }}</span>\r\n <span class=\"truncate\">{{ child.label }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n}\r\n\r\n@if (hasChildren() && collapsed()) {\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"flyoutOpen()\"\r\n placement=\"right-start\"\r\n padding=\"sm\"\r\n panelClass=\"min-w-48\"\r\n (closed)=\"closeFlyout()\"\r\n >\r\n <div role=\"menu\" [attr.aria-label]=\"item().label\">\r\n <p class=\"truncate px-2.5 py-1.5 text-eyebrow text-fg-subtle\">{{ item().label }}</p>\r\n @for (child of item().children; track child.id) {\r\n <button\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [attr.aria-current]=\"child.id === activeItemId() ? 'page' : null\"\r\n class=\"flex w-full appearance-none items-center gap-2.5 rounded-sm border-0 bg-transparent px-2.5 py-1.5 text-start text-sm font-medium text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-state-hover\"\r\n (click)=\"onChildClick(child)\"\r\n >\r\n <span mfIcon [size]=\"16\">{{ child.icon }}</span>\r\n <span class=\"truncate\">{{ child.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n </mf-popover>\r\n}\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, inject, input, output, signal } from '@angular/core';\r\nimport { Avatar } from '@mesgflow/ui-kit/avatar';\r\nimport { Badge } from '@mesgflow/ui-kit/badge';\r\nimport { cn, MF_SIDEBAR_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport type { SidebarTenant } from './sidebar.model';\r\n\r\n/**\r\n * Sidebar'ın üst bloğu — panel iskeleti `Popover`'a devredildi (bkz. plan\r\n * Faz 1c). Panel genişliği daraltılmışken trigger genişliğine değil SABİT\r\n * 240px'e bağlı (`matchTriggerWidth` kapalı, `panelClass` ile `min-w-60`\r\n * veriliyor) — daralmışken trigger sadece 72px, tenant adları sığmaz.\r\n */\r\n@Component({\r\n selector: 'mf-sidebar-tenant-switcher',\r\n imports: [Avatar, Badge, Icon, OverlayModule, Popover, Tooltip],\r\n host: { class: 'contents' },\r\n templateUrl: './sidebar-tenant-switcher.html',\r\n})\r\nexport class SidebarTenantSwitcher {\r\n readonly tenants = input<SidebarTenant[]>([]);\r\n readonly activeTenantId = input<string | null>(null);\r\n readonly collapsed = input(false);\r\n readonly label = input<string>();\r\n readonly noTenantsLabel = input<string>();\r\n\r\n readonly tenantChange = output<SidebarTenant>();\r\n\r\n private readonly sidebarLabels = inject(MF_SIDEBAR_LABELS);\r\n protected readonly effectiveLabel = computed(\r\n () => this.label() ?? this.sidebarLabels().switchTenant,\r\n );\r\n protected readonly effectiveNoTenantsLabel = computed(\r\n () => this.noTenantsLabel() ?? this.sidebarLabels().noTenants,\r\n );\r\n\r\n protected readonly cn = cn;\r\n protected readonly open = signal(false);\r\n protected readonly highlighted = signal(0);\r\n\r\n // `.at(0)` BİLEREK `[0]` yerine — `noUncheckedIndexedAccess` kapalıyken TS `arr[0]`'ı\r\n // her zaman tanımlı sayar (boş dizide çalışma zamanında `undefined` olsa bile), bu da\r\n // `?? null`'ı statik olarak \"asla tetiklenmez\" gösterip strictTemplates'in şablondaki\r\n // savunmacı `?.`/`??`'yi hatalı biçimde gereksiz işaretlemesine yol açıyordu. `.at()`\r\n // dizinden bağımsız her zaman `T | undefined` döner, tür çıkarımı gerçek davranışla eşleşir.\r\n protected readonly activeTenant = computed(\r\n () =>\r\n this.tenants().find((t) => t.id === this.activeTenantId()) ?? this.tenants().at(0) ?? null,\r\n );\r\n\r\n protected toggle(): void {\r\n if (this.tenants().length === 0) return;\r\n if (!this.open())\r\n this.highlighted.set(\r\n Math.max(\r\n 0,\r\n this.tenants().findIndex((t) => t.id === this.activeTenantId()),\r\n ),\r\n );\r\n this.open.update((v) => !v);\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n }\r\n\r\n protected select(tenant: SidebarTenant): void {\r\n if (tenant.disabled) return;\r\n this.tenantChange.emit(tenant);\r\n this.close();\r\n }\r\n\r\n /** \"Ad, açıklama[, rozet]\" — yalnızca ek alan varsa; yoksa `null` (içerikten türetilir, eski davranış). */\r\n protected optionAriaLabel(tenant: SidebarTenant): string | null {\r\n if (!tenant.description && !tenant.badge) return null;\r\n return [tenant.name, tenant.description, tenant.badge].filter(Boolean).join(', ');\r\n }\r\n\r\n protected optionClasses(tenant: SidebarTenant, index: number): string {\r\n const isSelected = tenant.id === this.activeTenantId();\r\n return cn(\r\n 'flex cursor-pointer items-center gap-2.5 rounded-sm px-2 py-1.5 transition-colors duration-fast ease-emphasis',\r\n index === this.highlighted() && !isSelected && 'bg-surface-alt',\r\n isSelected && 'bg-primary-tint text-primary-tint-fg',\r\n tenant.disabled && 'cursor-not-allowed opacity-50',\r\n );\r\n }\r\n\r\n protected onTriggerKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n if (!this.open()) this.toggle();\r\n }\r\n }\r\n\r\n protected onPanelKeydown(event: KeyboardEvent): void {\r\n const tenants = this.tenants();\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.close();\r\n return;\r\n }\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n this.highlighted.update((i) => Math.min(tenants.length - 1, i + 1));\r\n return;\r\n }\r\n if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n this.highlighted.update((i) => Math.max(0, i - 1));\r\n return;\r\n }\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n const tenant = tenants[this.highlighted()];\r\n if (tenant) this.select(tenant);\r\n }\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-x-0 border-t-0 border-b border-border bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-state-hover focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:border-primary-200 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? (activeTenant()?.name ?? effectiveLabel()) : null\"\r\n [mfTooltip]=\"collapsed() ? (activeTenant()?.name ?? effectiveLabel()) : ''\"\r\n tooltipPosition=\"right\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n <mf-avatar [name]=\"activeTenant()?.name ?? '?'\" shape=\"square\" size=\"md\" [colorful]=\"true\" />\r\n @if (!collapsed()) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span\r\n class=\"truncate font-display text-sm font-semibold text-fg group-data-[appearance=brand]/sidebar:text-primary-50 group-data-[appearance=brand-light]/sidebar:text-primary-900\"\r\n >\r\n {{ activeTenant()?.name ?? effectiveNoTenantsLabel() }}\r\n </span>\r\n <span\r\n class=\"truncate text-xs text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >{{ activeTenant()?.description || effectiveLabel() }}</span\r\n >\r\n </span>\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"shrink-0 text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >unfold_more</span\r\n >\r\n }\r\n</button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [matchTriggerWidth]=\"!collapsed()\"\r\n [panelClass]=\"cn('max-h-72', collapsed() ? 'min-w-60' : '')\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"effectiveLabel()\"\r\n class=\"w-full text-sm\"\r\n (keydown)=\"onPanelKeydown($event)\"\r\n >\r\n @for (tenant of tenants(); track tenant.id; let i = $index) {\r\n <!-- role=\"option\" BİLEREK odaklanabilir değil — klavye gezinmesi yukarıdaki listbox (keydown)'da merkezi. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <li\r\n role=\"option\"\r\n [attr.aria-selected]=\"tenant.id === activeTenantId()\"\r\n [attr.aria-disabled]=\"tenant.disabled ? true : null\"\r\n [attr.aria-label]=\"optionAriaLabel(tenant)\"\r\n [class]=\"optionClasses(tenant, i)\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(tenant)\"\r\n >\r\n <mf-avatar [name]=\"tenant.name\" shape=\"square\" size=\"sm\" [colorful]=\"true\" />\r\n @if (tenant.description) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span class=\"truncate text-fg-muted\">{{ tenant.name }}</span>\r\n <span class=\"truncate text-xs text-fg-subtle\">{{ tenant.description }}</span>\r\n </span>\r\n } @else {\r\n <span class=\"min-w-0 flex-1 truncate text-fg-muted\">{{ tenant.name }}</span>\r\n }\r\n @if (tenant.badge) {\r\n <span mfBadge [tone]=\"tenant.badgeTone ?? 'neutral'\" size=\"sm\" casing=\"sentence\">{{\r\n tenant.badge\r\n }}</span>\r\n }\r\n @if (tenant.id === activeTenantId()) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n } @empty {\r\n <li class=\"px-2.5 py-1.5 text-fg-subtle\">{{ effectiveNoTenantsLabel() }}</li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { Avatar } from '@mesgflow/ui-kit/avatar';\r\nimport { MF_SIDEBAR_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport type { SidebarUser } from './sidebar.model';\r\n\r\n/**\r\n * Sidebar'ın alt bloğu — menü AÇMIYOR, tek bir satır: tıklanınca `profileClick`\r\n * emit ediyor, gerçek \"profile git\" navigasyonu tüketicinin sorumluluğu\r\n * (ör. `(profileClick)=\"router.navigate(['/profile'])\"`).\r\n */\r\n@Component({\r\n selector: 'mf-sidebar-user-menu',\r\n imports: [Avatar, Icon, Tooltip],\r\n host: { class: 'contents' },\r\n templateUrl: './sidebar-user-menu.html',\r\n})\r\nexport class SidebarUserMenu {\r\n readonly user = input<SidebarUser | null>(null);\r\n readonly collapsed = input(false);\r\n readonly noUserLabel = input<string>();\r\n\r\n readonly profileClick = output<void>();\r\n\r\n private readonly sidebarLabels = inject(MF_SIDEBAR_LABELS);\r\n protected readonly effectiveNoUserLabel = computed(\r\n () => this.noUserLabel() ?? this.sidebarLabels().noUser,\r\n );\r\n}\r\n","@if (user(); as current) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-0 bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-state-hover focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? current.name : null\"\r\n [mfTooltip]=\"collapsed() ? current.name : ''\"\r\n tooltipPosition=\"right\"\r\n (click)=\"profileClick.emit()\"\r\n >\r\n <mf-avatar [name]=\"current.name\" tone=\"info\" size=\"md\" />\r\n @if (!collapsed()) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span\r\n class=\"truncate text-sm font-semibold text-fg group-data-[appearance=brand]/sidebar:text-primary-50 group-data-[appearance=brand-light]/sidebar:text-primary-900\"\r\n >{{ current.name }}</span\r\n >\r\n <span\r\n class=\"truncate text-xs text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >{{ current.role ?? current.email }}</span\r\n >\r\n </span>\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"shrink-0 text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >settings</span\r\n >\r\n }\r\n </button>\r\n} @else {\r\n <div\r\n class=\"flex h-16 shrink-0 items-center gap-2.5 px-3 text-fg-subtle\"\r\n [class.justify-center]=\"collapsed()\"\r\n >\r\n <span mfIcon [size]=\"20\">person_off</span>\r\n @if (!collapsed()) {\r\n <span class=\"truncate text-sm\">{{ effectiveNoUserLabel() }}</span>\r\n }\r\n </div>\r\n}\r\n","import {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n model,\r\n input,\r\n output,\r\n untracked,\r\n} from '@angular/core';\r\nimport { cn, MF_SIDEBAR_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport {\r\n sidebarVariants,\r\n type SidebarAppearance,\r\n type SidebarBrandPlacement,\r\n} from './sidebar.variants';\r\nimport { SidebarNavItemRow } from './sidebar-nav-item';\r\nimport { SidebarTenantSwitcher } from './sidebar-tenant-switcher';\r\nimport { SidebarUserMenu } from './sidebar-user-menu';\r\nimport type {\r\n SidebarNavItem as SidebarNavItemModel,\r\n SidebarTenant,\r\n SidebarUser,\r\n} from './sidebar.model';\r\n\r\n/**\r\n * `<mf-sidebar [navItems]=\"items\" [tenants]=\"tenants\" [user]=\"user\" [(collapsed)]=\"collapsed\" />`\r\n *\r\n * Tamamen generic/yeniden kullanılabilir bir premium sidebar — Table'daki gibi,\r\n * gerçek veriye değil `input()`lara bağlı (bkz. layout/shell/shell.ts'in bunu\r\n * gerçek veriyle beslemesi). Üç bölge: tenant switcher (üst), navigasyon\r\n * (orta, açılır gruplu), kullanıcı satırı (alt, tıklanınca `profileClick`\r\n * emit eder — menü AÇMAZ) — hepsi tek bir dikey panelde.\r\n */\r\n@Component({\r\n selector: 'mf-sidebar',\r\n exportAs: 'mfSidebar',\r\n host: { class: 'flex h-full' },\r\n imports: [Icon, Tooltip, SidebarTenantSwitcher, SidebarNavItemRow, SidebarUserMenu],\r\n templateUrl: './sidebar.html',\r\n})\r\nexport class Sidebar {\r\n readonly tenants = input<SidebarTenant[]>([]);\r\n readonly activeTenantId = model<string | null>(null);\r\n readonly navItems = input.required<SidebarNavItemModel[]>();\r\n readonly activeItemId = model<string | null>(null);\r\n readonly user = input<SidebarUser | null>(null);\r\n /**\r\n * `false` -- kullanıcı satırı VE üstündeki ayraç HİÇ render edilmez.\r\n * Varsayılan `true` (mevcut davranış korunur): `user()` `null` olsa bile\r\n * `SidebarUserMenu` kendi \"oturum açılmadı\" boş-durumunu gösterir (bilinçli,\r\n * bkz. `sidebar-user-menu.ts`) — bu, kullanıcı kavramı OLMAYAN tüketiciler\r\n * (ör. salt-dokümantasyon/showcase kabukları) için YANLIŞ bir sinyal\r\n * olabiliyordu (gerçek bulgu). `false` geçmek o tüketicilerin kaçış yolu.\r\n */\r\n readonly showUserMenu = input(true);\r\n readonly collapsed = model(false);\r\n /**\r\n * Sidebar'ın kendi kenarındaki yuvarlak daralt/genişlet butonu. Varsayılan\r\n * `true` — tetikleyiciyi kendi navbar'ına taşıyan tüketiciler `false` geçer,\r\n * aksi halde masaüstünde İKİ ayrı daraltma kontrolü olurdu.\r\n */\r\n readonly showCollapseToggle = input(true);\r\n /**\r\n * `'chrome'` (varsayılan, mevcut nötr görünüm) | `'brand'` (kök zemini\r\n * `primary-900`, nav metni/aktif ray marka tonlu — iki modda AYNI, bkz.\r\n * `sidebar.variants.ts` doc'u) | `'brand-light'` (AYNI marka kimliği,\r\n * kök zemini `primary-100` — koyu yerine açık bir marka bloğu, yine iki\r\n * modda AYNI). CDK overlay'e taşınan flyout/tenant listesi bu grubun\r\n * TORUNU olmadığından her zaman katı `chrome` kalır.\r\n */\r\n readonly appearance = input<SidebarAppearance>('chrome');\r\n /**\r\n * `[brand]` yuvasının tenant switcher'la ilişkisi. `'replace'` (varsayılan,\r\n * eski davranış): marka YALNIZ `tenants` boşken çizilir, switcher onun\r\n * yerine geçer. `'above'`: marka her zaman üstte, switcher (liste doluysa)\r\n * altında. Daraltılmışken yalnız logo için `<mf-brand [showLabel]=\"!collapsed()\">`\r\n * — ad görsel olarak gizlenir, erişilebilir ad korunur.\r\n */\r\n readonly brandPlacement = input<SidebarBrandPlacement>('replace');\r\n /**\r\n * `true`: bir çekmece (`mf-drawer`) gibi kendi yüzeyi olan bir kabın İÇİNDE —\r\n * dış kenarlık ve `chrome` zemini çizilmez (çift çerçeve olmasın), genişlik\r\n * kabı doldurur. Marka görünümleri (`brand`/`brand-light`) kontrast için\r\n * kendi zeminini korur.\r\n */\r\n readonly embedded = input(false, { transform: booleanAttribute });\r\n\r\n /** 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. */\r\n readonly collapseLabel = input<string>();\r\n readonly expandLabel = input<string>();\r\n readonly navAriaLabel = input<string>();\r\n\r\n readonly tenantChange = output<SidebarTenant>();\r\n readonly itemClick = output<SidebarNavItemModel>();\r\n /** Kullanıcı satırına tıklanınca — profile navigasyonu tüketicinin sorumluluğu. */\r\n readonly profileClick = output<void>();\r\n\r\n private readonly sidebarLabels = inject(MF_SIDEBAR_LABELS);\r\n protected readonly effectiveCollapseLabel = computed(\r\n () => this.collapseLabel() ?? this.sidebarLabels().collapse,\r\n );\r\n protected readonly effectiveExpandLabel = computed(\r\n () => this.expandLabel() ?? this.sidebarLabels().expand,\r\n );\r\n protected readonly effectiveNavAriaLabel = computed(\r\n () => this.navAriaLabel() ?? this.sidebarLabels().nav,\r\n );\r\n\r\n protected readonly rootClasses = computed(() =>\r\n cn(\r\n sidebarVariants({\r\n collapsed: this.collapsed(),\r\n appearance: this.appearance(),\r\n embedded: this.embedded(),\r\n }),\r\n ),\r\n );\r\n\r\n protected readonly showBrandRow = computed(\r\n () => this.brandPlacement() === 'above' || this.tenants().length === 0,\r\n );\r\n\r\n /** 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). */\r\n readonly expandedIds = model<ReadonlySet<string>>(new Set());\r\n /**\r\n * `activeItemId()` bir alt öğeye (children içinde) eşleşince o öğenin\r\n * EBEVEYN grubunu otomatik açar — YALNIZCA aktif öğe DEĞİŞİNCE (kullanıcının\r\n * sonradan elle kapatması korunur, tekrar zorla açılmaz). Öncesinde derin\r\n * bir bağlantıya (ör. `/components/button`) DOĞRUDAN gidildiğinde tüm\r\n * gruplar kapalı geliyor, aktif öğe görünmüyordu (gerçek bulgu).\r\n */\r\n readonly autoExpandActive = input(true);\r\n\r\n protected isExpanded(id: string): boolean {\r\n return this.expandedIds().has(id);\r\n }\r\n\r\n protected onToggleExpand(id: string): void {\r\n this.expandedIds.update((current) => {\r\n const next = new Set(current);\r\n if (next.has(id)) next.delete(id);\r\n else next.add(id);\r\n return next;\r\n });\r\n }\r\n\r\n constructor() {\r\n // `expandedIds()` BİLEREK `untracked()` içinde okunuyor — aksi halde bu\r\n // effect KENDİ yazdığı sinyale de bağımlı olurdu ve kullanıcı grubu elle\r\n // kapattığında (`expandedIds` değişince, `activeItemId` AYNI kalsa bile)\r\n // yeniden tetiklenip anında geri açardı (gerçek bulgu, ilk denemede\r\n // yakalandı). Bu effect SADECE `autoExpandActive`/`activeItemId`/\r\n // `navItems` değişince çalışmalı.\r\n effect(() => {\r\n if (!this.autoExpandActive()) return;\r\n const activeId = this.activeItemId();\r\n if (!activeId) return;\r\n const parent = this.navItems().find((item) =>\r\n item.children?.some((child) => child.id === activeId),\r\n );\r\n if (!parent) return;\r\n untracked(() => {\r\n if (this.expandedIds().has(parent.id)) return;\r\n this.expandedIds.update((current) => new Set(current).add(parent.id));\r\n });\r\n });\r\n }\r\n\r\n protected onItemActivate(item: SidebarNavItemModel): void {\r\n this.activeItemId.set(item.id);\r\n this.itemClick.emit(item);\r\n }\r\n\r\n protected onTenantSelect(tenant: SidebarTenant): void {\r\n this.activeTenantId.set(tenant.id);\r\n this.tenantChange.emit(tenant);\r\n }\r\n\r\n protected toggleCollapse(): void {\r\n this.collapsed.update((v) => !v);\r\n }\r\n}\r\n","<aside [class]=\"rootClasses()\" [attr.data-appearance]=\"appearance()\">\r\n <div class=\"flex h-full min-h-0 w-full flex-col overflow-hidden\">\r\n @if (showBrandRow()) {\r\n <!--\r\n Marka satırı. `brandPlacement=\"replace\"` (varsayılan): yalnız `tenants`\r\n boşken — tenant kavramı olmayan tüketiciler switcher'ın \"Kiracı\r\n bulunamadı\" boş-durumu yerine (kafa karıştırıcı, gerçek bir hata gibi\r\n okunur) kendi marka başlığını buraya projekte eder (ör. `<mf-brand />`).\r\n `\"above\"`: marka HER ZAMAN üstte, switcher (liste doluysa) altında —\r\n landmark sırası marka → şirket değiştirici → `nav`.\r\n -->\r\n <div\r\n class=\"flex h-16 shrink-0 items-center gap-2 border-b border-border px-4 group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand-light]/sidebar:border-primary-200\"\r\n [class.justify-center]=\"collapsed()\"\r\n >\r\n <ng-content select=\"[brand]\" />\r\n </div>\r\n }\r\n @if (tenants().length > 0) {\r\n <mf-sidebar-tenant-switcher\r\n [tenants]=\"tenants()\"\r\n [activeTenantId]=\"activeTenantId()\"\r\n [collapsed]=\"collapsed()\"\r\n (tenantChange)=\"onTenantSelect($event)\"\r\n />\r\n }\r\n\r\n <nav\r\n class=\"flex-1 overflow-x-hidden overflow-y-auto px-2 py-3\"\r\n [attr.aria-label]=\"effectiveNavAriaLabel()\"\r\n >\r\n <ul class=\"m-0 flex list-none flex-col gap-1 p-0\">\r\n @for (item of navItems(); track item.id) {\r\n <li>\r\n <mf-sidebar-nav-item\r\n [item]=\"item\"\r\n [collapsed]=\"collapsed()\"\r\n [activeItemId]=\"activeItemId()\"\r\n [expanded]=\"isExpanded(item.id)\"\r\n (activate)=\"onItemActivate($event)\"\r\n (toggleExpand)=\"onToggleExpand($event)\"\r\n />\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n\r\n @if (showUserMenu()) {\r\n <div\r\n class=\"border-t border-border group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand-light]/sidebar:border-primary-200\"\r\n ></div>\r\n\r\n <mf-sidebar-user-menu\r\n [user]=\"user()\"\r\n [collapsed]=\"collapsed()\"\r\n (profileClick)=\"profileClick.emit()\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (showCollapseToggle()) {\r\n <button\r\n type=\"button\"\r\n class=\"absolute top-14 -end-3 z-10 flex h-6 w-6 appearance-none items-center justify-center rounded-full border border-hairline bg-chrome p-0 text-fg-subtle shadow-1 transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg active:scale-[0.99] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:bg-primary-900 group-data-[appearance=brand]/sidebar:text-primary-200 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:hover:text-primary-50 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:bg-primary-100 group-data-[appearance=brand-light]/sidebar:text-primary-800 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:hover:text-primary-900 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [mfTooltip]=\"collapsed() ? effectiveExpandLabel() : effectiveCollapseLabel()\"\r\n tooltipPosition=\"right\"\r\n [attr.aria-label]=\"collapsed() ? effectiveExpandLabel() : effectiveCollapseLabel()\"\r\n (click)=\"toggleCollapse()\"\r\n >\r\n <span mfIcon [size]=\"14\" class=\"rtl:-scale-x-100\">{{\r\n collapsed() ? 'chevron_right' : 'chevron_left'\r\n }}</span>\r\n </button>\r\n }\r\n</aside>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-sidebar.mjs","sources":["../../../projects/ui-kit/sidebar/sidebar.variants.ts","../../../projects/ui-kit/sidebar/sidebar-nav-item.ts","../../../projects/ui-kit/sidebar/sidebar-nav-item.html","../../../projects/ui-kit/sidebar/sidebar-tenant-switcher.ts","../../../projects/ui-kit/sidebar/sidebar-tenant-switcher.html","../../../projects/ui-kit/sidebar/sidebar-user-menu.ts","../../../projects/ui-kit/sidebar/sidebar-user-menu.html","../../../projects/ui-kit/sidebar/sidebar.ts","../../../projects/ui-kit/sidebar/sidebar.html","../../../projects/ui-kit/sidebar/mesgflow-ui-kit-sidebar.ts"],"sourcesContent":["import { focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Kök panel: kart değil, yapısal/kenar-kenara chrome — `shadow-*`/`rounded-*`\r\n * YOK. `bg-chrome` (styles.css'te tanımlı, moda göre 975/950 basamağı arasında\r\n * takas olan yüzey rolü) — dark modda uygulamanın EN KOYU tonu, \"chrome her\r\n * zaman içerikten koyu\" kuralının kaynağı. Kenar artık `border-hairline`\r\n * (border-first depth, 2026-09 Deep Emerald geçişi) — `border-e` UZUN-EL\r\n * yazıldı (`border-e-hairline`, kısaltma DEĞİL) ki `appearance=\"brand\"`'ın\r\n * `border-e-transparent`'ı AYNI özgüllükte, cascade sırasına bağlı olmadan\r\n * güvenle üstüne yazabilsin.\r\n *\r\n * `appearance: 'chrome' | 'brand' | 'brand-light'` — `group/sidebar` + kök\r\n * elementteki `data-appearance` ATTRIBUTE'u (bkz. sidebar.html), alt\r\n * bileşenler kendi class'larına yeni bir input EKLEMEDEN\r\n * `group-data-[appearance=brand]/sidebar:`/`group-data-[appearance=brand-light]/sidebar:`\r\n * varyantıyla opt-in eder — CDK overlay'e (flyout/tenant listesi) taşınan\r\n * içerik bu grubun TORUNU DEĞİLDİR, bu yüzden overlay panelleri bilerek\r\n * katı `chrome` kalır (istenen: aşırı marka rengi overlay'lerde yorucu olur).\r\n *\r\n * `brand-light` — kullanıcı isteğiyle eklendi (varsayılan HÂLÂ `chrome`,\r\n * `brand`'in KENDİSİ birebir korunuyor — bu SADECE üçüncü bir seçenek):\r\n * `brand`in \"her adımda bir basamak açığa doğru\" desenini primary rampasının\r\n * AÇIK ucuna yansıtır (900→100, 800→200, 300→700, beyaz→900 gibi) — aynı\r\n * \"iki modda AYNI, marka her zaman sabit\" felsefesi, sadece açık zeminde.\r\n * `primary-100` `neutral-100` canvas'a karşı yalnızca 1.08:1 (saf L farkı) —\r\n * `brand`in aksine (900 her zeminden zaten kopuyor) burada kenarlık BİLEREK\r\n * KORUNUYOR (`border-e-primary-200`) ki blok net ayrışsın.\r\n */\r\nexport const sidebarVariants = cva(\r\n /*\r\n * `overflow-hidden` BİLEREK yok — kenar toggle butonu bu kutunun dışına\r\n * taşarak (`-end-3`) sınırı \"kucaklıyor\" (Notion/Linear deseni), kırpma\r\n * kök elementte olsaydı kendi toggle'ını keserdi. İç içerik (tenant/nav/\r\n * kullanıcı sütunu) genişlik geçişi sırasında taşma göstermesin diye kendi\r\n * `overflow-hidden`'ını sidebar.html'de ayrı bir iç wrapper'da taşıyor.\r\n */\r\n 'group/sidebar relative flex h-full flex-col border-e border-e-hairline bg-chrome transition-[width] duration-base ease-out',\r\n {\r\n variants: {\r\n collapsed: {\r\n true: 'w-[72px]',\r\n false: 'w-64',\r\n },\r\n appearance: {\r\n chrome: '',\r\n /** Marka kenar çubuğu — kök zemini iki modda da primary-900 (#062c22, kullanıcının \"primer\"i), kenarlık gizlenir (zemin zaten belirgin bir blok). */\r\n brand: 'border-e-transparent bg-primary-900',\r\n /** Marka kenar çubuğu, AÇIK — kök zemini iki modda da primary-100, kenarlık KORUNUR (bkz. yukarıdaki doc). */\r\n 'brand-light': 'border-e-primary-200 bg-primary-100',\r\n },\r\n /** Çekmece içinde: dış kenarlık yok, genişlik kabı doldurur (bkz. `Sidebar.embedded`). */\r\n embedded: {\r\n true: 'w-full border-e-0',\r\n false: '',\r\n },\r\n },\r\n compoundVariants: [\r\n // Nötr görünüm çekmecenin kendi yüzeyini kullanır; marka zeminleri kontrast için kalır.\r\n { embedded: true, appearance: 'chrome', class: 'bg-transparent' },\r\n ],\r\n defaultVariants: { collapsed: false, appearance: 'chrome', embedded: false },\r\n },\r\n);\r\n\r\n/** `[brand]` yuvasının tenant switcher'a göre yeri — bkz. `Sidebar.brandPlacement`. */\r\nexport type SidebarBrandPlacement = 'replace' | 'above';\r\n\r\n/**\r\n * Nav satırı (leaf veya parent-toggle) — `rounded-sm`(6px, menü öğesi kademesi,\r\n * bkz. styles.css radius notu), panel değil kontrol. `border-s-2 border-s-\r\n * transparent` BASE'te HER ZAMAN rezerve — aktif olunca sadece rengi değişir,\r\n * yoksa 2px'lik ray aktifleşirken satırın geri kalanı kayardı (layout shift).\r\n *\r\n * Brand sınıfları (`group-data-[appearance=brand]/sidebar:…`) özgüllükte\r\n * (0,2,0) — düz `text-fg-muted`/`hover:bg-state-hover` (0,1,0) ve `dark:`\r\n * (0,1,0) varyantlarının HER İKİSİNİ de cascade sırasından bağımsız yener,\r\n * bu yüzden ayrı bir `dark:` ikizi yazmaya gerek yok (brand görünümü iki\r\n * modda da AYNI).\r\n */\r\nexport const sidebarNavItemVariants = cva(\r\n 'group flex w-full appearance-none items-center gap-3 rounded-sm border-0 border-s-2 border-s-transparent bg-transparent px-3 py-2 text-start text-sm font-medium ' +\r\n 'text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg ' +\r\n focusRecipe +\r\n ' ' +\r\n 'group-data-[appearance=brand]/sidebar:text-primary-200 ' +\r\n 'group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:hover:text-primary-50 ' +\r\n 'group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-800 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:hover:text-primary-900 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700',\r\n {\r\n variants: {\r\n /*\r\n * \"Ray\" — bu tazelemenin imza motiflerinden biri (bkz. plan): dolu\r\n * yeşil sol çizgi + tonal işaret zemini, SADECE \"buradasın\" anlamında\r\n * kullanılıyor (sidebar aktif öğe, aktif sekme, seçili tablo satırı —\r\n * başka HİÇBİR yerde). Rol token'ı (`bg-primary-tint text-primary-tint-fg`,\r\n * badge/avatar ile aynı dil) — `color-mix()` her iki modu da TEK satırda\r\n * çözer, ayrı bir `dark:` ikizi YOK.\r\n */\r\n active: {\r\n true:\r\n 'border-s-accent-fill bg-primary-tint text-primary-tint-fg hover:bg-primary-tint hover:text-primary-tint-fg ' +\r\n 'group-data-[appearance=brand]/sidebar:border-s-primary-300 group-data-[appearance=brand]/sidebar:bg-primary-800 ' +\r\n 'group-data-[appearance=brand]/sidebar:text-white group-data-[appearance=brand]/sidebar:hover:bg-primary-800 ' +\r\n 'group-data-[appearance=brand]/sidebar:hover:text-white ' +\r\n 'group-data-[appearance=brand-light]/sidebar:border-s-primary-700 group-data-[appearance=brand-light]/sidebar:bg-primary-200 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-900 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:hover:text-primary-900',\r\n false: '',\r\n },\r\n collapsed: {\r\n true: 'justify-center px-0',\r\n false: '',\r\n },\r\n },\r\n compoundVariants: [\r\n // Daraltılmış (icon-only, 72px) haldeyken ray bastırılıyor — ikonu\r\n // merkeze göre 2px kaydırırdı, dar/simetrik bir rayda yeri yok. Tonal\r\n // zemin (bg-primary-tint, brand'de primary-800) tek başına yeterli\r\n // \"aktif\" sinyali veriyor.\r\n {\r\n active: true,\r\n collapsed: true,\r\n class:\r\n 'border-s-transparent group-data-[appearance=brand]/sidebar:border-s-transparent ' +\r\n 'group-data-[appearance=brand-light]/sidebar:border-s-transparent',\r\n },\r\n ],\r\n defaultVariants: { active: false, collapsed: false },\r\n },\r\n);\r\n\r\nexport type SidebarCollapsedVariant = VariantProps<typeof sidebarVariants>['collapsed'];\r\nexport type SidebarAppearance = NonNullable<VariantProps<typeof sidebarVariants>['appearance']>;\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, input, output, signal } from '@angular/core';\r\nimport { cn, focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport { sidebarNavItemVariants } from './sidebar.variants';\r\nimport type { SidebarNavItem as SidebarNavItemModel } from './sidebar.model';\r\n\r\n/** Genişkenken akordeonda açılan çocuk satırı — brand görünümde metin/hover/odak marka tonlu (bkz. sidebar.variants.ts doc'u, aynı özgüllük mantığı). */\r\nconst CHILD_ROW_BASE =\r\n 'flex w-full appearance-none items-center gap-3 rounded-sm border-0 bg-transparent py-1.5 pe-3 ps-9 text-start text-label text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg ' +\r\n focusRecipe +\r\n ' ' +\r\n 'group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 ' +\r\n 'group-data-[appearance=brand]/sidebar:hover:text-primary-50 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-700 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:hover:text-primary-900 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700';\r\n\r\n/**\r\n * Tek nav satırı — yaprak veya çocuklu (parent). Sadece 1 seviye nesting\r\n * (çocuğun çocuğu render edilmiyor, YAGNI). Genişkenken parent'a tıklayınca\r\n * çocuklar CSS-only grid-rows akordeonuyla İÇERİDE açılır (her grup bağımsız,\r\n * root `Sidebar`'ın `expandedIds` set'i tarafından yönetilir). Daraltılmışken\r\n * aynı satıra TIKLAYINCA (hover değil — kullanıcı kararı) sağda bir `Popover`\r\n * flyout paneli çocukları listeler (bkz. plan Faz 1c).\r\n */\r\n@Component({\r\n selector: 'mf-sidebar-nav-item',\r\n imports: [Icon, OverlayModule, Popover, Tooltip],\r\n host: { class: 'contents' },\r\n templateUrl: './sidebar-nav-item.html',\r\n})\r\nexport class SidebarNavItemRow {\r\n readonly item = input.required<SidebarNavItemModel>();\r\n readonly collapsed = input(false);\r\n readonly activeItemId = input<string | null>(null);\r\n /** Genişkenken akordeon açık/kapalı durumu — root Sidebar tarafından kontrol edilir. */\r\n readonly expanded = input(false);\r\n\r\n readonly activate = output<SidebarNavItemModel>();\r\n readonly toggleExpand = output<string>();\r\n\r\n protected readonly hasChildren = computed(() => (this.item().children?.length ?? 0) > 0);\r\n protected readonly isActive = computed(() => {\r\n const id = this.activeItemId();\r\n return this.item().id === id || (this.item().children?.some((c) => c.id === id) ?? false);\r\n });\r\n\r\n protected readonly rowClasses = computed(() =>\r\n cn(sidebarNavItemVariants({ active: this.isActive(), collapsed: this.collapsed() })),\r\n );\r\n\r\n protected readonly flyoutOpen = signal(false);\r\n\r\n protected onRowClick(): void {\r\n if (this.hasChildren()) {\r\n if (this.collapsed()) {\r\n this.flyoutOpen.update((v) => !v);\r\n } else {\r\n this.toggleExpand.emit(this.item().id);\r\n }\r\n return;\r\n }\r\n this.activate.emit(this.item());\r\n }\r\n\r\n protected childRowClasses(child: SidebarNavItemModel): string {\r\n return cn(\r\n CHILD_ROW_BASE,\r\n child.id === this.activeItemId() &&\r\n 'text-accent group-data-[appearance=brand]/sidebar:text-white ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-900',\r\n );\r\n }\r\n\r\n protected onChildClick(child: SidebarNavItemModel): void {\r\n this.activate.emit(child);\r\n this.closeFlyout();\r\n }\r\n\r\n protected closeFlyout(): void {\r\n this.flyoutOpen.set(false);\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"rowClasses()\"\r\n [attr.aria-expanded]=\"hasChildren() ? (collapsed() ? flyoutOpen() : expanded()) : null\"\r\n [attr.aria-haspopup]=\"hasChildren() && collapsed() ? 'menu' : null\"\r\n [attr.aria-current]=\"isActive() && !hasChildren() ? 'page' : null\"\r\n [attr.aria-label]=\"collapsed() ? item().label : null\"\r\n [mfTooltip]=\"collapsed() ? item().label : ''\"\r\n tooltipPosition=\"right\"\r\n (click)=\"onRowClick()\"\r\n>\r\n <span mfIcon [size]=\"20\" [filled]=\"isActive()\">{{ item().icon }}</span>\r\n\r\n @if (!collapsed()) {\r\n <span class=\"min-w-0 flex-1 truncate\">{{ item().label }}</span>\r\n @if (item().badge !== undefined) {\r\n <span\r\n class=\"rounded-full bg-primary-tint px-1.5 py-0.5 font-mono text-eyebrow text-primary-tint-fg group-data-[appearance=brand]/sidebar:bg-primary-800 group-data-[appearance=brand]/sidebar:text-primary-100 group-data-[appearance=brand-light]/sidebar:bg-primary-200 group-data-[appearance=brand-light]/sidebar:text-primary-800\"\r\n >\r\n {{ item().badge }}\r\n </span>\r\n }\r\n @if (hasChildren()) {\r\n <span\r\n mfIcon\r\n [size]=\"16\"\r\n class=\"shrink-0 text-fg-subtle transition-transform duration-base group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700 rtl:-scale-x-100\"\r\n [class.rotate-90]=\"expanded()\"\r\n [class.rtl:-rotate-90]=\"expanded()\"\r\n >\r\n chevron_right\r\n </span>\r\n }\r\n }\r\n</button>\r\n\r\n@if (hasChildren() && !collapsed()) {\r\n <div\r\n class=\"grid overflow-hidden transition-[grid-template-rows] duration-base ease-out\"\r\n [style.grid-template-rows]=\"expanded() ? '1fr' : '0fr'\"\r\n [attr.inert]=\"expanded() ? null : true\"\r\n >\r\n <ul class=\"m-0 min-h-0 list-none overflow-hidden p-0\">\r\n @for (child of item().children; track child.id) {\r\n <li>\r\n <button\r\n type=\"button\"\r\n [class]=\"childRowClasses(child)\"\r\n [attr.aria-current]=\"child.id === activeItemId() ? 'page' : null\"\r\n (click)=\"onChildClick(child)\"\r\n >\r\n <span mfIcon [size]=\"16\">{{ child.icon }}</span>\r\n <span class=\"truncate\">{{ child.label }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n}\r\n\r\n@if (hasChildren() && collapsed()) {\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"flyoutOpen()\"\r\n placement=\"right-start\"\r\n padding=\"sm\"\r\n panelClass=\"min-w-48\"\r\n (closed)=\"closeFlyout()\"\r\n >\r\n <div role=\"menu\" [attr.aria-label]=\"item().label\">\r\n <p class=\"truncate px-2.5 py-1.5 text-eyebrow text-fg-subtle\">{{ item().label }}</p>\r\n @for (child of item().children; track child.id) {\r\n <button\r\n type=\"button\"\r\n role=\"menuitem\"\r\n [attr.aria-current]=\"child.id === activeItemId() ? 'page' : null\"\r\n class=\"flex w-full appearance-none items-center gap-2.5 rounded-sm border-0 bg-transparent px-2.5 py-1.5 text-start text-sm font-medium text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-state-hover\"\r\n (click)=\"onChildClick(child)\"\r\n >\r\n <span mfIcon [size]=\"16\">{{ child.icon }}</span>\r\n <span class=\"truncate\">{{ child.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n </mf-popover>\r\n}\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, inject, input, output, signal } from '@angular/core';\r\nimport { Avatar } from '@mesgflow/ui-kit/avatar';\r\nimport { Badge } from '@mesgflow/ui-kit/badge';\r\nimport { cn, MF_SIDEBAR_LABELS, nextId } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport type { SidebarTenant } from './sidebar.model';\r\n\r\n/**\r\n * Sidebar'ın üst bloğu — panel iskeleti `Popover`'a devredildi (bkz. plan\r\n * Faz 1c). Panel genişliği daraltılmışken trigger genişliğine değil SABİT\r\n * 240px'e bağlı (`matchTriggerWidth` kapalı, `panelClass` ile `min-w-60`\r\n * veriliyor) — daralmışken trigger sadece 72px, tenant adları sığmaz.\r\n */\r\n@Component({\r\n selector: 'mf-sidebar-tenant-switcher',\r\n imports: [Avatar, Badge, Icon, OverlayModule, Popover, Tooltip],\r\n host: { class: 'contents' },\r\n templateUrl: './sidebar-tenant-switcher.html',\r\n})\r\nexport class SidebarTenantSwitcher {\r\n readonly tenants = input<SidebarTenant[]>([]);\r\n readonly activeTenantId = input<string | null>(null);\r\n readonly collapsed = input(false);\r\n readonly label = input<string>();\r\n readonly noTenantsLabel = input<string>();\r\n\r\n readonly tenantChange = output<SidebarTenant>();\r\n\r\n private readonly sidebarLabels = inject(MF_SIDEBAR_LABELS);\r\n protected readonly effectiveLabel = computed(\r\n () => this.label() ?? this.sidebarLabels().switchTenant,\r\n );\r\n protected readonly effectiveNoTenantsLabel = computed(\r\n () => this.noTenantsLabel() ?? this.sidebarLabels().noTenants,\r\n );\r\n\r\n /**\r\n * Tetiğin erişilebilir adı. `description` varken görsel ikinci satır eylem\r\n * etiketinin (\"Switch tenant\") yerini alır — ad eylemi söylemezdi; bu yüzden\r\n * \"{eylem}: {ad}\" verilir, açıklama `aria-describedby` ile okunur. Açıklama\r\n * yoksa eski davranış: genişken içerikten türer (\"{ad} {eylem}\"), daraltılmışken ad.\r\n */\r\n protected readonly triggerAriaLabel = computed(() => {\r\n const tenant = this.activeTenant();\r\n if (tenant?.description) return `${this.effectiveLabel()}: ${tenant.name}`;\r\n return this.collapsed() ? (tenant?.name ?? this.effectiveLabel()) : null;\r\n });\r\n protected readonly descriptionId = nextId('mf-tenant-description');\r\n\r\n protected readonly cn = cn;\r\n protected readonly open = signal(false);\r\n protected readonly highlighted = signal(0);\r\n\r\n // `.at(0)` BİLEREK `[0]` yerine — `noUncheckedIndexedAccess` kapalıyken TS `arr[0]`'ı\r\n // her zaman tanımlı sayar (boş dizide çalışma zamanında `undefined` olsa bile), bu da\r\n // `?? null`'ı statik olarak \"asla tetiklenmez\" gösterip strictTemplates'in şablondaki\r\n // savunmacı `?.`/`??`'yi hatalı biçimde gereksiz işaretlemesine yol açıyordu. `.at()`\r\n // dizinden bağımsız her zaman `T | undefined` döner, tür çıkarımı gerçek davranışla eşleşir.\r\n protected readonly activeTenant = computed(\r\n () =>\r\n this.tenants().find((t) => t.id === this.activeTenantId()) ?? this.tenants().at(0) ?? null,\r\n );\r\n\r\n protected toggle(): void {\r\n if (this.tenants().length === 0) return;\r\n if (!this.open())\r\n this.highlighted.set(\r\n Math.max(\r\n 0,\r\n this.tenants().findIndex((t) => t.id === this.activeTenantId()),\r\n ),\r\n );\r\n this.open.update((v) => !v);\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n }\r\n\r\n protected select(tenant: SidebarTenant): void {\r\n if (tenant.disabled) return;\r\n this.tenantChange.emit(tenant);\r\n this.close();\r\n }\r\n\r\n /** \"Ad, açıklama[, rozet]\" — yalnızca ek alan varsa; yoksa `null` (içerikten türetilir, eski davranış). */\r\n protected optionAriaLabel(tenant: SidebarTenant): string | null {\r\n if (!tenant.description && !tenant.badge) return null;\r\n return [tenant.name, tenant.description, tenant.badge].filter(Boolean).join(', ');\r\n }\r\n\r\n protected optionClasses(tenant: SidebarTenant, index: number): string {\r\n const isSelected = tenant.id === this.activeTenantId();\r\n return cn(\r\n 'flex cursor-pointer items-center gap-2.5 rounded-sm px-2 py-1.5 transition-colors duration-fast ease-emphasis',\r\n index === this.highlighted() && !isSelected && 'bg-surface-alt',\r\n isSelected && 'bg-primary-tint text-primary-tint-fg',\r\n tenant.disabled && 'cursor-not-allowed opacity-50',\r\n );\r\n }\r\n\r\n protected onTriggerKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n if (!this.open()) this.toggle();\r\n }\r\n }\r\n\r\n protected onPanelKeydown(event: KeyboardEvent): void {\r\n const tenants = this.tenants();\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.close();\r\n return;\r\n }\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n this.highlighted.update((i) => Math.min(tenants.length - 1, i + 1));\r\n return;\r\n }\r\n if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n this.highlighted.update((i) => Math.max(0, i - 1));\r\n return;\r\n }\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n const tenant = tenants[this.highlighted()];\r\n if (tenant) this.select(tenant);\r\n }\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-x-0 border-t-0 border-b border-border bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-state-hover focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:border-primary-200 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"triggerAriaLabel()\"\r\n [attr.aria-describedby]=\"!collapsed() && activeTenant()?.description ? descriptionId : null\"\r\n [mfTooltip]=\"collapsed() ? (activeTenant()?.name ?? effectiveLabel()) : ''\"\r\n tooltipPosition=\"right\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n <mf-avatar [name]=\"activeTenant()?.name ?? '?'\" shape=\"square\" size=\"md\" [colorful]=\"true\" />\r\n @if (!collapsed()) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span\r\n class=\"truncate font-display text-sm font-semibold text-fg group-data-[appearance=brand]/sidebar:text-primary-50 group-data-[appearance=brand-light]/sidebar:text-primary-900\"\r\n >\r\n {{ activeTenant()?.name ?? effectiveNoTenantsLabel() }}\r\n </span>\r\n <span\r\n [id]=\"descriptionId\"\r\n class=\"truncate text-xs text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >{{ activeTenant()?.description || effectiveLabel() }}</span\r\n >\r\n </span>\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"shrink-0 text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >unfold_more</span\r\n >\r\n }\r\n</button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [matchTriggerWidth]=\"!collapsed()\"\r\n [panelClass]=\"cn('max-h-72', collapsed() ? 'min-w-60' : '')\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"effectiveLabel()\"\r\n class=\"w-full text-sm\"\r\n (keydown)=\"onPanelKeydown($event)\"\r\n >\r\n @for (tenant of tenants(); track tenant.id; let i = $index) {\r\n <!-- role=\"option\" BİLEREK odaklanabilir değil — klavye gezinmesi yukarıdaki listbox (keydown)'da merkezi. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <li\r\n role=\"option\"\r\n [attr.aria-selected]=\"tenant.id === activeTenantId()\"\r\n [attr.aria-disabled]=\"tenant.disabled ? true : null\"\r\n [attr.aria-label]=\"optionAriaLabel(tenant)\"\r\n [class]=\"optionClasses(tenant, i)\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(tenant)\"\r\n >\r\n <mf-avatar [name]=\"tenant.name\" shape=\"square\" size=\"sm\" [colorful]=\"true\" />\r\n @if (tenant.description) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span class=\"truncate text-fg-muted\">{{ tenant.name }}</span>\r\n <span class=\"truncate text-xs text-fg-subtle\">{{ tenant.description }}</span>\r\n </span>\r\n } @else {\r\n <span class=\"min-w-0 flex-1 truncate text-fg-muted\">{{ tenant.name }}</span>\r\n }\r\n @if (tenant.badge) {\r\n <span mfBadge [tone]=\"tenant.badgeTone ?? 'neutral'\" size=\"sm\" casing=\"sentence\">{{\r\n tenant.badge\r\n }}</span>\r\n }\r\n @if (tenant.id === activeTenantId()) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n } @empty {\r\n <li class=\"px-2.5 py-1.5 text-fg-subtle\">{{ effectiveNoTenantsLabel() }}</li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { Avatar } from '@mesgflow/ui-kit/avatar';\r\nimport { MF_SIDEBAR_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport type { SidebarUser } from './sidebar.model';\r\n\r\n/**\r\n * Sidebar'ın alt bloğu — menü AÇMIYOR, tek bir satır: tıklanınca `profileClick`\r\n * emit ediyor, gerçek \"profile git\" navigasyonu tüketicinin sorumluluğu\r\n * (ör. `(profileClick)=\"router.navigate(['/profile'])\"`).\r\n */\r\n@Component({\r\n selector: 'mf-sidebar-user-menu',\r\n imports: [Avatar, Icon, Tooltip],\r\n host: { class: 'contents' },\r\n templateUrl: './sidebar-user-menu.html',\r\n})\r\nexport class SidebarUserMenu {\r\n readonly user = input<SidebarUser | null>(null);\r\n readonly collapsed = input(false);\r\n readonly noUserLabel = input<string>();\r\n\r\n readonly profileClick = output<void>();\r\n\r\n private readonly sidebarLabels = inject(MF_SIDEBAR_LABELS);\r\n protected readonly effectiveNoUserLabel = computed(\r\n () => this.noUserLabel() ?? this.sidebarLabels().noUser,\r\n );\r\n}\r\n","@if (user(); as current) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-0 bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-state-hover focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? current.name : null\"\r\n [mfTooltip]=\"collapsed() ? current.name : ''\"\r\n tooltipPosition=\"right\"\r\n (click)=\"profileClick.emit()\"\r\n >\r\n <mf-avatar [name]=\"current.name\" tone=\"info\" size=\"md\" />\r\n @if (!collapsed()) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span\r\n class=\"truncate text-sm font-semibold text-fg group-data-[appearance=brand]/sidebar:text-primary-50 group-data-[appearance=brand-light]/sidebar:text-primary-900\"\r\n >{{ current.name }}</span\r\n >\r\n <span\r\n class=\"truncate text-xs text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >{{ current.role ?? current.email }}</span\r\n >\r\n </span>\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"shrink-0 text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >settings</span\r\n >\r\n }\r\n </button>\r\n} @else {\r\n <div\r\n class=\"flex h-16 shrink-0 items-center gap-2.5 px-3 text-fg-subtle\"\r\n [class.justify-center]=\"collapsed()\"\r\n >\r\n <span mfIcon [size]=\"20\">person_off</span>\r\n @if (!collapsed()) {\r\n <span class=\"truncate text-sm\">{{ effectiveNoUserLabel() }}</span>\r\n }\r\n </div>\r\n}\r\n","import {\r\n booleanAttribute,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n model,\r\n input,\r\n output,\r\n untracked,\r\n} from '@angular/core';\r\nimport { cn, MF_SIDEBAR_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport {\r\n sidebarVariants,\r\n type SidebarAppearance,\r\n type SidebarBrandPlacement,\r\n} from './sidebar.variants';\r\nimport { SidebarNavItemRow } from './sidebar-nav-item';\r\nimport { SidebarTenantSwitcher } from './sidebar-tenant-switcher';\r\nimport { SidebarUserMenu } from './sidebar-user-menu';\r\nimport type {\r\n SidebarNavItem as SidebarNavItemModel,\r\n SidebarTenant,\r\n SidebarUser,\r\n} from './sidebar.model';\r\n\r\n/**\r\n * `<mf-sidebar [navItems]=\"items\" [tenants]=\"tenants\" [user]=\"user\" [(collapsed)]=\"collapsed\" />`\r\n *\r\n * Tamamen generic/yeniden kullanılabilir bir premium sidebar — Table'daki gibi,\r\n * gerçek veriye değil `input()`lara bağlı (bkz. layout/shell/shell.ts'in bunu\r\n * gerçek veriyle beslemesi). Üç bölge: tenant switcher (üst), navigasyon\r\n * (orta, açılır gruplu), kullanıcı satırı (alt, tıklanınca `profileClick`\r\n * emit eder — menü AÇMAZ) — hepsi tek bir dikey panelde.\r\n */\r\n@Component({\r\n selector: 'mf-sidebar',\r\n exportAs: 'mfSidebar',\r\n host: { class: 'flex h-full' },\r\n imports: [Icon, Tooltip, SidebarTenantSwitcher, SidebarNavItemRow, SidebarUserMenu],\r\n templateUrl: './sidebar.html',\r\n})\r\nexport class Sidebar {\r\n readonly tenants = input<SidebarTenant[]>([]);\r\n readonly activeTenantId = model<string | null>(null);\r\n readonly navItems = input.required<SidebarNavItemModel[]>();\r\n readonly activeItemId = model<string | null>(null);\r\n readonly user = input<SidebarUser | null>(null);\r\n /**\r\n * `false` -- kullanıcı satırı VE üstündeki ayraç HİÇ render edilmez.\r\n * Varsayılan `true` (mevcut davranış korunur): `user()` `null` olsa bile\r\n * `SidebarUserMenu` kendi \"oturum açılmadı\" boş-durumunu gösterir (bilinçli,\r\n * bkz. `sidebar-user-menu.ts`) — bu, kullanıcı kavramı OLMAYAN tüketiciler\r\n * (ör. salt-dokümantasyon/showcase kabukları) için YANLIŞ bir sinyal\r\n * olabiliyordu (gerçek bulgu). `false` geçmek o tüketicilerin kaçış yolu.\r\n */\r\n readonly showUserMenu = input(true);\r\n readonly collapsed = model(false);\r\n /**\r\n * Sidebar'ın kendi kenarındaki yuvarlak daralt/genişlet butonu. Varsayılan\r\n * `true` — tetikleyiciyi kendi navbar'ına taşıyan tüketiciler `false` geçer,\r\n * aksi halde masaüstünde İKİ ayrı daraltma kontrolü olurdu.\r\n */\r\n readonly showCollapseToggle = input(true);\r\n /**\r\n * `'chrome'` (varsayılan, mevcut nötr görünüm) | `'brand'` (kök zemini\r\n * `primary-900`, nav metni/aktif ray marka tonlu — iki modda AYNI, bkz.\r\n * `sidebar.variants.ts` doc'u) | `'brand-light'` (AYNI marka kimliği,\r\n * kök zemini `primary-100` — koyu yerine açık bir marka bloğu, yine iki\r\n * modda AYNI). CDK overlay'e taşınan flyout/tenant listesi bu grubun\r\n * TORUNU olmadığından her zaman katı `chrome` kalır.\r\n */\r\n readonly appearance = input<SidebarAppearance>('chrome');\r\n /**\r\n * `[brand]` yuvasının tenant switcher'la ilişkisi. `'replace'` (varsayılan,\r\n * eski davranış): marka YALNIZ `tenants` boşken çizilir, switcher onun\r\n * yerine geçer. `'above'`: marka her zaman üstte, switcher (liste doluysa)\r\n * altında. Daraltılmışken yalnız logo için `<mf-brand [showLabel]=\"!collapsed()\">`\r\n * — ad görsel olarak gizlenir, erişilebilir ad korunur.\r\n */\r\n readonly brandPlacement = input<SidebarBrandPlacement>('replace');\r\n /**\r\n * `true`: bir çekmece (`mf-drawer`) gibi kendi yüzeyi olan bir kabın İÇİNDE —\r\n * dış kenarlık ve `chrome` zemini çizilmez (çift çerçeve olmasın), genişlik\r\n * kabı doldurur. Marka görünümleri (`brand`/`brand-light`) kontrast için\r\n * kendi zeminini korur.\r\n */\r\n readonly embedded = input(false, { transform: booleanAttribute });\r\n\r\n /** 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. */\r\n readonly collapseLabel = input<string>();\r\n readonly expandLabel = input<string>();\r\n readonly navAriaLabel = input<string>();\r\n\r\n readonly tenantChange = output<SidebarTenant>();\r\n readonly itemClick = output<SidebarNavItemModel>();\r\n /** Kullanıcı satırına tıklanınca — profile navigasyonu tüketicinin sorumluluğu. */\r\n readonly profileClick = output<void>();\r\n\r\n private readonly sidebarLabels = inject(MF_SIDEBAR_LABELS);\r\n protected readonly effectiveCollapseLabel = computed(\r\n () => this.collapseLabel() ?? this.sidebarLabels().collapse,\r\n );\r\n protected readonly effectiveExpandLabel = computed(\r\n () => this.expandLabel() ?? this.sidebarLabels().expand,\r\n );\r\n protected readonly effectiveNavAriaLabel = computed(\r\n () => this.navAriaLabel() ?? this.sidebarLabels().nav,\r\n );\r\n\r\n protected readonly rootClasses = computed(() =>\r\n cn(\r\n sidebarVariants({\r\n collapsed: this.collapsed(),\r\n appearance: this.appearance(),\r\n embedded: this.embedded(),\r\n }),\r\n ),\r\n );\r\n\r\n protected readonly showBrandRow = computed(\r\n () => this.brandPlacement() === 'above' || this.tenants().length === 0,\r\n );\r\n\r\n /** 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). */\r\n readonly expandedIds = model<ReadonlySet<string>>(new Set());\r\n /**\r\n * `activeItemId()` bir alt öğeye (children içinde) eşleşince o öğenin\r\n * EBEVEYN grubunu otomatik açar — YALNIZCA aktif öğe DEĞİŞİNCE (kullanıcının\r\n * sonradan elle kapatması korunur, tekrar zorla açılmaz). Öncesinde derin\r\n * bir bağlantıya (ör. `/components/button`) DOĞRUDAN gidildiğinde tüm\r\n * gruplar kapalı geliyor, aktif öğe görünmüyordu (gerçek bulgu).\r\n */\r\n readonly autoExpandActive = input(true);\r\n\r\n protected isExpanded(id: string): boolean {\r\n return this.expandedIds().has(id);\r\n }\r\n\r\n protected onToggleExpand(id: string): void {\r\n this.expandedIds.update((current) => {\r\n const next = new Set(current);\r\n if (next.has(id)) next.delete(id);\r\n else next.add(id);\r\n return next;\r\n });\r\n }\r\n\r\n constructor() {\r\n // `expandedIds()` BİLEREK `untracked()` içinde okunuyor — aksi halde bu\r\n // effect KENDİ yazdığı sinyale de bağımlı olurdu ve kullanıcı grubu elle\r\n // kapattığında (`expandedIds` değişince, `activeItemId` AYNI kalsa bile)\r\n // yeniden tetiklenip anında geri açardı (gerçek bulgu, ilk denemede\r\n // yakalandı). Bu effect SADECE `autoExpandActive`/`activeItemId`/\r\n // `navItems` değişince çalışmalı.\r\n effect(() => {\r\n if (!this.autoExpandActive()) return;\r\n const activeId = this.activeItemId();\r\n if (!activeId) return;\r\n const parent = this.navItems().find((item) =>\r\n item.children?.some((child) => child.id === activeId),\r\n );\r\n if (!parent) return;\r\n untracked(() => {\r\n if (this.expandedIds().has(parent.id)) return;\r\n this.expandedIds.update((current) => new Set(current).add(parent.id));\r\n });\r\n });\r\n }\r\n\r\n protected onItemActivate(item: SidebarNavItemModel): void {\r\n this.activeItemId.set(item.id);\r\n this.itemClick.emit(item);\r\n }\r\n\r\n protected onTenantSelect(tenant: SidebarTenant): void {\r\n this.activeTenantId.set(tenant.id);\r\n this.tenantChange.emit(tenant);\r\n }\r\n\r\n protected toggleCollapse(): void {\r\n this.collapsed.update((v) => !v);\r\n }\r\n}\r\n","<aside [class]=\"rootClasses()\" [attr.data-appearance]=\"appearance()\">\r\n <div class=\"flex h-full min-h-0 w-full flex-col overflow-hidden\">\r\n @if (showBrandRow()) {\r\n <!--\r\n Marka satırı. `brandPlacement=\"replace\"` (varsayılan): yalnız `tenants`\r\n boşken — tenant kavramı olmayan tüketiciler switcher'ın \"Kiracı\r\n bulunamadı\" boş-durumu yerine (kafa karıştırıcı, gerçek bir hata gibi\r\n okunur) kendi marka başlığını buraya projekte eder (ör. `<mf-brand />`).\r\n `\"above\"`: marka HER ZAMAN üstte, switcher (liste doluysa) altında —\r\n landmark sırası marka → şirket değiştirici → `nav`.\r\n -->\r\n <div\r\n class=\"flex h-16 shrink-0 items-center gap-2 border-b border-border px-4 group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand-light]/sidebar:border-primary-200\"\r\n [class.justify-center]=\"collapsed()\"\r\n >\r\n <ng-content select=\"[brand]\" />\r\n </div>\r\n }\r\n @if (tenants().length > 0) {\r\n <mf-sidebar-tenant-switcher\r\n [tenants]=\"tenants()\"\r\n [activeTenantId]=\"activeTenantId()\"\r\n [collapsed]=\"collapsed()\"\r\n (tenantChange)=\"onTenantSelect($event)\"\r\n />\r\n }\r\n\r\n <nav\r\n class=\"flex-1 overflow-x-hidden overflow-y-auto px-2 py-3\"\r\n [attr.aria-label]=\"effectiveNavAriaLabel()\"\r\n >\r\n <ul class=\"m-0 flex list-none flex-col gap-1 p-0\">\r\n @for (item of navItems(); track item.id) {\r\n <li>\r\n <mf-sidebar-nav-item\r\n [item]=\"item\"\r\n [collapsed]=\"collapsed()\"\r\n [activeItemId]=\"activeItemId()\"\r\n [expanded]=\"isExpanded(item.id)\"\r\n (activate)=\"onItemActivate($event)\"\r\n (toggleExpand)=\"onToggleExpand($event)\"\r\n />\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n\r\n @if (showUserMenu()) {\r\n <div\r\n class=\"border-t border-border group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand-light]/sidebar:border-primary-200\"\r\n ></div>\r\n\r\n <mf-sidebar-user-menu\r\n [user]=\"user()\"\r\n [collapsed]=\"collapsed()\"\r\n (profileClick)=\"profileClick.emit()\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (showCollapseToggle()) {\r\n <button\r\n type=\"button\"\r\n class=\"absolute top-14 -end-3 z-10 flex h-6 w-6 appearance-none items-center justify-center rounded-full border border-hairline bg-chrome p-0 text-fg-subtle shadow-1 transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg active:scale-[0.99] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:bg-primary-900 group-data-[appearance=brand]/sidebar:text-primary-200 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:hover:text-primary-50 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:bg-primary-100 group-data-[appearance=brand-light]/sidebar:text-primary-800 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:hover:text-primary-900 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [mfTooltip]=\"collapsed() ? effectiveExpandLabel() : effectiveCollapseLabel()\"\r\n tooltipPosition=\"right\"\r\n [attr.aria-label]=\"collapsed() ? effectiveExpandLabel() : effectiveCollapseLabel()\"\r\n (click)=\"toggleCollapse()\"\r\n >\r\n <span mfIcon [size]=\"14\" class=\"rtl:-scale-x-100\">{{\r\n collapsed() ? 'chevron_right' : 'chevron_left'\r\n }}</span>\r\n </button>\r\n }\r\n</aside>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mesgflow/ui-kit",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "Independent Angular component kit (button, select, dialog, table, sidebar, and more) built on a Tailwind v4 design token system. See README.md for setup and prerequisites.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Hurdeniz YENER",
|
package/tokens.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$description": "@mesgflow/ui-kit 0.
|
|
2
|
+
"$description": "@mesgflow/ui-kit 0.11.1 design tokens (W3C DTCG). Generated from projects/ui-kit/styles/tokens/*.css by scripts/export-tokens.mjs — do not edit.",
|
|
3
3
|
"primitives": {
|
|
4
4
|
"color": {
|
|
5
5
|
"primary": {
|
|
@@ -75,7 +75,7 @@ declare class ConfirmDialog {
|
|
|
75
75
|
protected readonly toneIcon: _angular_core.Signal<string>;
|
|
76
76
|
protected readonly toneBadgeClass: _angular_core.Signal<string>;
|
|
77
77
|
/** Her ton `filled` — warning da diğer tonlarla aynı `bg-X-fill` rol deseninde dolu blok kullanıyor (bkz. button.variants.ts), eski `outlined` istisnası kaldırıldı. */
|
|
78
|
-
protected readonly confirmTone: _angular_core.Signal<"
|
|
78
|
+
protected readonly confirmTone: _angular_core.Signal<"danger" | "warning" | "info" | "success" | "neutral" | "help" | "primary" | null | undefined>;
|
|
79
79
|
protected readonly submitting: _angular_core.WritableSignal<boolean>;
|
|
80
80
|
protected readonly actionError: _angular_core.WritableSignal<string | null>;
|
|
81
81
|
protected onCancel(): void;
|
|
@@ -221,6 +221,14 @@ declare class SidebarTenantSwitcher {
|
|
|
221
221
|
private readonly sidebarLabels;
|
|
222
222
|
protected readonly effectiveLabel: _angular_core.Signal<string>;
|
|
223
223
|
protected readonly effectiveNoTenantsLabel: _angular_core.Signal<string>;
|
|
224
|
+
/**
|
|
225
|
+
* Tetiğin erişilebilir adı. `description` varken görsel ikinci satır eylem
|
|
226
|
+
* etiketinin ("Switch tenant") yerini alır — ad eylemi söylemezdi; bu yüzden
|
|
227
|
+
* "{eylem}: {ad}" verilir, açıklama `aria-describedby` ile okunur. Açıklama
|
|
228
|
+
* yoksa eski davranış: genişken içerikten türer ("{ad} {eylem}"), daraltılmışken ad.
|
|
229
|
+
*/
|
|
230
|
+
protected readonly triggerAriaLabel: _angular_core.Signal<string | null>;
|
|
231
|
+
protected readonly descriptionId: string;
|
|
224
232
|
protected readonly cn: typeof cn;
|
|
225
233
|
protected readonly open: _angular_core.WritableSignal<boolean>;
|
|
226
234
|
protected readonly highlighted: _angular_core.WritableSignal<number>;
|
|
@@ -655,7 +655,7 @@ declare class TableFilterMenu<T> {
|
|
|
655
655
|
/** Kaldirilan filtrenin id'si — checkbox listesi sifir secime inince (ekleme YA DA duzenleme modunda) emit edilir, ust bilesen o id'yi chip listesinden cikarir. */
|
|
656
656
|
readonly remove: _angular_core.OutputEmitterRef<string>;
|
|
657
657
|
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
658
|
-
protected readonly step: _angular_core.WritableSignal<"
|
|
658
|
+
protected readonly step: _angular_core.WritableSignal<"field" | "value">;
|
|
659
659
|
protected readonly fieldQuery: _angular_core.WritableSignal<string>;
|
|
660
660
|
protected readonly fieldHighlighted: _angular_core.WritableSignal<number>;
|
|
661
661
|
protected readonly selectedField: _angular_core.WritableSignal<string | null>;
|