@mesgflow/ui-kit 0.11.1 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesgflow-ui-kit-password-strength.mjs","sources":["../../../projects/ui-kit/password-strength/common-passwords.ts","../../../projects/ui-kit/password-strength/password-strength-estimator.ts","../../../projects/ui-kit/password-strength/password-requirements.ts","../../../projects/ui-kit/password-strength/password-strength.variants.ts","../../../projects/ui-kit/password-strength/password-strength.ts","../../../projects/ui-kit/password-strength/password-strength.html","../../../projects/ui-kit/password-strength/mesgflow-ui-kit-password-strength.ts"],"sourcesContent":["/**\r\n * Sızıntı listelerinin en tepesindeki parolalar + parola tabanı olarak en sık kullanılan kelimeler\r\n * (EN + TR). Tam bir sözlük DEĞİL — tahmincinin en bariz tahminleri yakalaması için küçük bir\r\n * örneklem (~3 KB). Girdiler küçük harf; tahminci karşılaştırmadan önce iki tarafı da leet\r\n * normalizasyonundan geçirir (`p@ssw0rd` → `password`), bu yüzden leet varyantları ayrıca yazılmaz.\r\n * Tam kapsam isteyen tüketici `MF_PASSWORD_STRENGTH_ESTIMATOR` ile `zxcvbn-ts` takar.\r\n */\r\nexport const COMMON_PASSWORDS: readonly string[] = [\r\n // Sızıntı listelerinin tepesi\r\n 'password',\r\n 'passwort',\r\n 'passw',\r\n 'pass',\r\n 'qwerty',\r\n 'qwertz',\r\n 'azerty',\r\n 'letmein',\r\n 'welcome',\r\n 'admin',\r\n 'administrator',\r\n 'root',\r\n 'login',\r\n 'iloveyou',\r\n 'monkey',\r\n 'dragon',\r\n 'master',\r\n 'shadow',\r\n 'superman',\r\n 'batman',\r\n 'trustno1',\r\n 'whatever',\r\n 'freedom',\r\n 'sunshine',\r\n 'princess',\r\n 'football',\r\n 'baseball',\r\n 'soccer',\r\n 'hockey',\r\n 'basketball',\r\n 'starwars',\r\n 'pokemon',\r\n 'computer',\r\n 'internet',\r\n 'secret',\r\n 'default',\r\n 'changeme',\r\n 'guest',\r\n 'test',\r\n 'tester',\r\n 'demo',\r\n 'user',\r\n 'access',\r\n 'hello',\r\n 'love',\r\n 'lovely',\r\n 'charlie',\r\n 'michael',\r\n 'jennifer',\r\n 'jordan',\r\n 'hunter',\r\n 'ranger',\r\n 'buster',\r\n 'thomas',\r\n 'robert',\r\n 'daniel',\r\n 'andrew',\r\n 'joshua',\r\n 'jessica',\r\n 'ashley',\r\n 'nicole',\r\n 'killer',\r\n 'cheese',\r\n 'cookie',\r\n 'chocolate',\r\n 'flower',\r\n 'summer',\r\n 'winter',\r\n 'spring',\r\n 'autumn',\r\n 'monday',\r\n 'friday',\r\n 'january',\r\n 'october',\r\n 'december',\r\n 'banana',\r\n 'orange',\r\n 'purple',\r\n 'yellow',\r\n 'silver',\r\n 'golden',\r\n 'diamond',\r\n 'matrix',\r\n 'mustang',\r\n 'ferrari',\r\n 'harley',\r\n 'corvette',\r\n 'maverick',\r\n 'phoenix',\r\n 'tigger',\r\n 'pepper',\r\n 'ginger',\r\n 'maggie',\r\n 'bailey',\r\n 'snoopy',\r\n 'family',\r\n 'friends',\r\n 'money',\r\n 'heaven',\r\n 'angel',\r\n 'blessed',\r\n 'jesus',\r\n 'samsung',\r\n 'apple',\r\n 'google',\r\n 'microsoft',\r\n 'facebook',\r\n 'linkedin',\r\n 'company',\r\n 'business',\r\n 'office',\r\n 'zaq1zaq1',\r\n 'asdfgh',\r\n 'zxcvbn',\r\n 'qazwsx',\r\n '1q2w3e4r',\r\n 'abc123',\r\n // TR\r\n 'sifre',\r\n 'parola',\r\n 'parolam',\r\n 'sifrem',\r\n 'gizli',\r\n 'merhaba',\r\n 'selam',\r\n 'askim',\r\n 'sevgilim',\r\n 'canim',\r\n 'bitanem',\r\n 'hayatim',\r\n 'annem',\r\n 'babam',\r\n 'kardesim',\r\n 'bismillah',\r\n 'allah',\r\n 'galatasaray',\r\n 'fenerbahce',\r\n 'besiktas',\r\n 'trabzonspor',\r\n 'cimbom',\r\n 'istanbul',\r\n 'ankara',\r\n 'izmir',\r\n 'turkiye',\r\n 'turkey',\r\n 'ataturk',\r\n 'mustafa',\r\n 'mehmet',\r\n 'ahmet',\r\n 'ayse',\r\n 'fatma',\r\n 'zeynep',\r\n 'emine',\r\n 'yildiz',\r\n 'gunes',\r\n 'deniz',\r\n 'kartal',\r\n 'aslan',\r\n];\r\n","import { InjectionToken } from '@angular/core';\r\nimport { COMMON_PASSWORDS } from './common-passwords';\r\n\r\n/** 0 = tahmin edilmesi çok kolay … 4 = çok güçlü (zxcvbn ile aynı ölçek). */\r\nexport type MfPasswordStrengthScore = 0 | 1 | 2 | 3 | 4;\r\nexport type MfPasswordStrengthLevel = 'weak' | 'fair' | 'good' | 'strong';\r\n/** Tahmincinin en baskın zayıflığı — metni `MfLabels.passwordStrength.warnings`'ten gelir. */\r\nexport type MfPasswordStrengthWarning =\r\n 'tooShort' | 'common' | 'personal' | 'repeated' | 'sequence';\r\n\r\nexport interface MfPasswordStrengthResult {\r\n score: MfPasswordStrengthScore;\r\n /** Yerleşik ipucu kodu — `hint` verilmediyse etiketlerden metne çevrilir. */\r\n warning?: MfPasswordStrengthWarning;\r\n /** Hazır (zaten yerelleştirilmiş) ipucu metni — `warning`'in önüne geçer (özel tahminciler için). */\r\n hint?: string;\r\n}\r\n\r\nexport interface MfPasswordStrengthOptions {\r\n /** Bunun altındaki uzunluk en fazla skor 1 alır (`tooShort`). Varsayılan 8. */\r\n minLength?: number;\r\n /** Parolada geçmemesi gereken kişisel değerler (e-posta, ad, kullanıcı adı…). */\r\n userInputs?: readonly string[];\r\n}\r\n\r\nexport type MfPasswordStrengthEstimator = (\r\n value: string,\r\n options: Required<MfPasswordStrengthOptions>,\r\n) => MfPasswordStrengthResult;\r\n\r\n/** Değerlendirilen azami uzunluk (kod noktası) — çok uzun yapıştırmalarda maliyet tavanı. */\r\nconst MAX_LENGTH = 128;\r\n/** Skor eşikleri (bit) — sırasıyla 1, 2, 3, 4 için alt sınır. */\r\nconst THRESHOLDS = [28, 40, 56, 72] as const;\r\n/** Bu uzunluktan kısa yaygın kelimeler parolanın İÇİNDE aranmaz (yanlış pozitif olur). */\r\nconst MIN_EMBEDDED_WORD = 5;\r\n/** Kişisel değer parçası olarak sayılacak asgari uzunluk. */\r\nconst MIN_PERSONAL_TOKEN = 3;\r\n\r\nconst LEET: Readonly<Record<string, string>> = {\r\n '@': 'a',\r\n '4': 'a',\r\n '8': 'b',\r\n '3': 'e',\r\n '1': 'i',\r\n '!': 'i',\r\n '0': 'o',\r\n $: 's',\r\n '5': 's',\r\n '7': 't',\r\n};\r\n\r\nconst KEYBOARD_ROWS = ['qwertyuiop', 'asdfghjkl', 'zxcvbnm', 'qwertzuiop', 'azertyuiop'];\r\n\r\nconst deleet = (s: string): string => Array.from(s, (c) => LEET[c] ?? c).join('');\r\n\r\nconst COMMON = new Set(COMMON_PASSWORDS.map(deleet));\r\nconst COMMON_EMBEDDED = [...COMMON].filter((w) => w.length >= MIN_EMBEDDED_WORD);\r\n\r\n/** İki harf aynı klavye satırında komşuysa +1/-1 yön, değilse 0. */\r\nfunction keyboardDirection(a: string, b: string): number {\r\n for (const row of KEYBOARD_ROWS) {\r\n const i = row.indexOf(a);\r\n if (i === -1) continue;\r\n const j = row.indexOf(b);\r\n if (j !== -1 && Math.abs(i - j) === 1) return j - i;\r\n }\r\n return 0;\r\n}\r\n\r\n/**\r\n * Bağımlılıksız, birkaç KB'lık tahmin edilebilirlik tahmincisi. \"1 büyük harf + 1 rakam\" saymaz\r\n * (NIST 800-63B): her karakterin TAHMİN EDİLEMEZ olup olmadığına bakar, tahmin edilebilir\r\n * olanları (tekrar, ardışık dizi, klavye satırı, yıl, yaygın kelime, kişisel değer) entropiye\r\n * saymaz, kalan \"etkin uzunluk × log2(karakter havuzu)\" bitini 0–4'e eşler.\r\n *\r\n * Sınırı: tam bir sözlük taşımaz — sözlükte olup listede olmayan kelime tabanlı parolaları\r\n * fazla puanlayabilir. Tam kapsam için `zxcvbn-ts`'i `MF_PASSWORD_STRENGTH_ESTIMATOR` ile takın.\r\n */\r\nexport function estimatePasswordStrength(\r\n value: string,\r\n options: MfPasswordStrengthOptions = {},\r\n): MfPasswordStrengthResult {\r\n const minLength = options.minLength ?? 8;\r\n const chars = Array.from(value).slice(0, MAX_LENGTH);\r\n if (!chars.length) return { score: 0 };\r\n\r\n // Kod noktası başına TEK karakterlik küçük harf izi — indeksler `chars` ile birebir hizalı kalsın\r\n // diye uzunluğu değişen dönüşümler (`İ` → `i̇`, astral karakterler) yer tutucuyla değiştirilir.\r\n const lower = chars.map((c) => {\r\n const l = c.toLowerCase();\r\n return l.length === 1 ? l : '￿';\r\n });\r\n const flat = lower.join('');\r\n const plain = deleet(flat);\r\n const predictable = new Array<boolean>(chars.length).fill(false);\r\n const found = new Set<MfPasswordStrengthWarning>();\r\n\r\n const tooShort = chars.length < minLength;\r\n\r\n // 1. Yaygın parola — tamamı ya da sonundaki rakam/sembol kırpılmış hali.\r\n const base = flat.replace(/[\\d\\p{P}\\p{S}\\s]+$/u, '');\r\n if (COMMON.has(plain) || (base.length >= 4 && COMMON.has(deleet(base)))) {\r\n return { score: 0, warning: tooShort ? 'tooShort' : 'common' };\r\n }\r\n\r\n // İlki hariç bir aralığı tahmin edilebilir işaretler (kelime TEK bir \"karakter\" kadar bilgi taşır).\r\n const markRange = (start: number, length: number, reason: MfPasswordStrengthWarning) => {\r\n for (let i = start + 1; i < start + length && i < chars.length; i++) predictable[i] = true;\r\n found.add(reason);\r\n };\r\n const markAll = (haystack: string, needle: string, reason: MfPasswordStrengthWarning) => {\r\n for (let at = haystack.indexOf(needle); at !== -1; at = haystack.indexOf(needle, at + 1)) {\r\n markRange(at, needle.length, reason);\r\n }\r\n };\r\n\r\n // 2. Gömülü yaygın kelimeler (`MySummer!x`).\r\n for (const word of COMMON_EMBEDDED) markAll(plain, word, 'common');\r\n\r\n // 3. Kişisel değerler — e-postanın yerel kısmı ve alan adı dahil, harf/rakam olmayan yerden bölünür.\r\n for (const input of options.userInputs ?? []) {\r\n const tokens = input\r\n .toLowerCase()\r\n .split(/[^\\p{L}\\p{N}]+/u)\r\n .filter((t) => t.length >= MIN_PERSONAL_TOKEN);\r\n for (const token of new Set(tokens)) {\r\n markAll(flat, token, 'personal');\r\n markAll(plain, deleet(token), 'personal');\r\n }\r\n }\r\n\r\n // 4. Yıllar (19xx/20xx) — iki rakam kadar bilgi.\r\n for (const m of flat.matchAll(/(?:19|20)\\d\\d/g)) {\r\n const at = m.index ?? 0;\r\n predictable[at + 2] = true;\r\n predictable[at + 3] = true;\r\n found.add('sequence');\r\n }\r\n\r\n // 5. Tekrar eden bloklar (`abcabc`, `xk9v…xk9v`) — daha önce geçmiş bir bloğun kopyası bilgi taşımaz.\r\n for (let i = 1; i < chars.length;) {\r\n let copy = 0;\r\n for (let len = Math.min(chars.length - i, i); len >= 2; len--) {\r\n if (flat.slice(0, i).includes(flat.slice(i, i + len))) {\r\n copy = len;\r\n break;\r\n }\r\n }\r\n if (copy) {\r\n for (let k = i; k < i + copy; k++) predictable[k] = true;\r\n found.add('repeated');\r\n i += copy;\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n // 6. Karakter karakter: tekrar (`aaa`), ardışık kod noktası (`abcd`, `4321`), klavye satırı (`asdf`).\r\n let previousStep = 0;\r\n let previousKey = 0;\r\n for (let i = 1; i < chars.length; i++) {\r\n const step = (flat.codePointAt(i) ?? 0) - (flat.codePointAt(i - 1) ?? 0);\r\n const key = keyboardDirection(flat[i - 1], flat[i]);\r\n if (step === 0) {\r\n predictable[i] = true;\r\n found.add('repeated');\r\n } else if (Math.abs(step) === 1 && step === previousStep) {\r\n predictable[i] = true;\r\n found.add('sequence');\r\n } else if (key !== 0 && key === previousKey) {\r\n predictable[i] = true;\r\n found.add('sequence');\r\n }\r\n previousStep = step;\r\n previousKey = key;\r\n }\r\n\r\n // Karakter havuzu — Unicode sınıflarıyla (Türkçe `ğ`/`Ş` doğru sınıfa düşer).\r\n let pool = 0;\r\n if (chars.some((c) => /\\p{Ll}/u.test(c))) pool += 26;\r\n if (chars.some((c) => /\\p{Lu}/u.test(c))) pool += 26;\r\n if (chars.some((c) => /\\p{Nd}/u.test(c))) pool += 10;\r\n if (chars.some((c) => /[^\\p{L}\\p{N}]/u.test(c))) pool += 33;\r\n if (chars.some((c) => (c.codePointAt(0) ?? 0) > 0x7f)) pool += 32;\r\n\r\n const effective = Math.max(1, predictable.filter((p) => !p).length);\r\n const bits = effective * Math.log2(Math.max(pool, 2));\r\n\r\n let score = THRESHOLDS.filter((t) => bits >= t).length as MfPasswordStrengthScore;\r\n if (tooShort) score = Math.min(score, 1) as MfPasswordStrengthScore;\r\n\r\n // İpucu yalnızca parola henüz iyi DEĞİLKEN — güçlü bir parolaya \"şundan kaçının\" denmez.\r\n if (score >= 3) return { score };\r\n const warning: MfPasswordStrengthWarning | undefined = tooShort\r\n ? 'tooShort'\r\n : (['common', 'personal', 'sequence', 'repeated'] as const).find((w) => found.has(w));\r\n return warning ? { score, warning } : { score };\r\n}\r\n\r\n/**\r\n * `mf-password-strength`'in kullandığı tahminci — varsayılan `estimatePasswordStrength`.\r\n * Uygulama genelinde değiştirmek için (ör. `zxcvbn-ts`):\r\n * `{ provide: MF_PASSWORD_STRENGTH_ESTIMATOR, useValue: (v, o) => fromZxcvbn(zxcvbn(v, o.userInputs)) }`.\r\n */\r\nexport const MF_PASSWORD_STRENGTH_ESTIMATOR = new InjectionToken<MfPasswordStrengthEstimator>(\r\n 'mesgflow.password-strength-estimator',\r\n { factory: () => estimatePasswordStrength },\r\n);\r\n\r\n/** Skoru görsel seviyeye eşler: 0–1 zayıf, 2 orta, 3 iyi, 4 güçlü. */\r\nexport function passwordStrengthLevel(score: MfPasswordStrengthScore): MfPasswordStrengthLevel {\r\n return score <= 1 ? 'weak' : score === 2 ? 'fair' : score === 3 ? 'good' : 'strong';\r\n}\r\n","/**\r\n * Kontrol listesinin bir satırı. Yerleşik türlerin metni `MfLabels.passwordStrength.requirements`'tan\r\n * gelir; `custom` türün `label`'ı tüketicinin kendi (zaten yerelleştirilmiş) metnidir.\r\n */\r\nexport type MfPasswordRequirement =\r\n | { kind: 'minLength'; value: number }\r\n | { kind: 'lowercase' | 'uppercase' | 'digit' | 'symbol' }\r\n | { kind: 'custom'; id: string; label: string; test: (value: string) => boolean };\r\n\r\nexport interface MfPasswordRequirementCheck {\r\n requirement: MfPasswordRequirement;\r\n met: boolean;\r\n}\r\n\r\nconst PATTERNS = {\r\n lowercase: /\\p{Ll}/u,\r\n uppercase: /\\p{Lu}/u,\r\n digit: /\\p{Nd}/u,\r\n symbol: /[^\\p{L}\\p{N}\\s]/u,\r\n} as const;\r\n\r\n/** Tek bir gereksinimi sınar — Unicode-farkında (`ş` küçük harf, `Ğ` büyük harf sayılır). */\r\nexport function meetsPasswordRequirement(\r\n value: string,\r\n requirement: MfPasswordRequirement,\r\n): boolean {\r\n switch (requirement.kind) {\r\n case 'minLength':\r\n return Array.from(value).length >= requirement.value;\r\n case 'custom':\r\n return requirement.test(value);\r\n default:\r\n return PATTERNS[requirement.kind].test(value);\r\n }\r\n}\r\n\r\n/** Gereksinim listesini sınar — form doğrulayıcısında da aynı sonucu üretmek için dışa açık. */\r\nexport function checkPasswordRequirements(\r\n value: string,\r\n requirements: readonly MfPasswordRequirement[],\r\n): MfPasswordRequirementCheck[] {\r\n return requirements.map((requirement) => ({\r\n requirement,\r\n met: meetsPasswordRequirement(value, requirement),\r\n }));\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/** Segment satırı — boyut ekseni `mf-progress` çubuğunun kalınlıklarıyla aynı ritimde. */\r\nexport const passwordStrengthTrackVariants = cva('flex w-full', {\r\n variants: {\r\n size: {\r\n sm: 'h-1 gap-1',\r\n md: 'h-1.5 gap-1.5',\r\n lg: 'h-2 gap-1.5',\r\n },\r\n },\r\n defaultVariants: { size: 'md' },\r\n});\r\n\r\nexport type PasswordStrengthSize = VariantProps<typeof passwordStrengthTrackVariants>['size'];\r\n","import { Component, DOCUMENT, afterRenderEffect, computed, inject, input } from '@angular/core';\r\nimport {\r\n cn,\r\n mergeLabels,\r\n nextId,\r\n MF_PASSWORD_STRENGTH_LABELS,\r\n type DeepPartial,\r\n type MfPasswordStrengthLabels,\r\n} from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport {\r\n MF_PASSWORD_STRENGTH_ESTIMATOR,\r\n passwordStrengthLevel,\r\n type MfPasswordStrengthLevel,\r\n type MfPasswordStrengthResult,\r\n type MfPasswordStrengthScore,\r\n} from './password-strength-estimator';\r\nimport { checkPasswordRequirements, type MfPasswordRequirement } from './password-requirements';\r\nimport {\r\n passwordStrengthTrackVariants,\r\n type PasswordStrengthSize,\r\n} from './password-strength.variants';\r\n\r\nconst SEGMENTS = [0, 1, 2, 3] as const;\r\n/** Segmentlerin art arda dolması için kademe (ms). */\r\nconst SEGMENT_STAGGER_MS = 40;\r\n/** Karşılanmamış gereksinim varken gösterilen azami skor — form reddedecekken \"Güçlü\" yazmasın. */\r\nconst UNSATISFIED_CAP: MfPasswordStrengthScore = 2;\r\n\r\n// Tailwind dinamik sınıf adı göremez — ton sınıfları literal kalmalı.\r\nconst SEGMENT_TONE: Record<MfPasswordStrengthLevel, string> = {\r\n weak: 'bg-danger-fill',\r\n fair: 'bg-warning-fill',\r\n good: 'bg-success-fill',\r\n strong: 'bg-success-fill',\r\n};\r\n\r\nconst TEXT_TONE: Record<MfPasswordStrengthLevel, string> = {\r\n weak: 'text-danger',\r\n fair: 'text-warning',\r\n good: 'text-success',\r\n strong: 'text-success',\r\n};\r\n\r\n/**\r\n * `<mf-password-input inputId=\"pw\" autocomplete=\"new-password\" [(value)]=\"password\" />\r\n * <mf-password-strength for=\"pw\" [value]=\"password()\" [requirements]=\"rules\" />`\r\n *\r\n * Kayıt / parola değiştirme formlarında parola alanının ALTINA kompoze edilen güç ölçer —\r\n * `mf-character-count`'un `mfInput`'a göre durduğu yerde durur, değeri herhangi bir kaynaktan\r\n * alabilir. Parolayı saklamaz, yaymaz: tek girdisi `value`.\r\n *\r\n * - Ölçüm: tahmin edilebilirlik (uzunluk ağırlıklı + tekrar/dizi/yaygın kelime/kişisel değer\r\n * cezaları), \"1 büyük harf + 1 rakam\" sayımı DEĞİL — bkz. `estimatePasswordStrength`.\r\n * Uygulama genelinde `MF_PASSWORD_STRENGTH_ESTIMATOR`, örnek bazında `[result]` ile değişir\r\n * (ör. `zxcvbn-ts`, sunucu/HIBP sonucu).\r\n * - Görsel: 4 segment + seviye etiketi + tek satır ipucu; isteğe bağlı gereksinim listesi.\r\n * Renk tek gösterge değil — segment sayısı ve metin de aynı bilgiyi taşır (WCAG 1.4.1).\r\n * - Erişilebilirlik: çubuk `role=\"meter\"` (`aria-valuetext` = seviye adı). Görünen metin\r\n * ekran okuyucudan gizli; yerine `for` ile bağlanan kontrolün `aria-describedby`'ına eklenen\r\n * gizli bir özet okunur (yalnızca kendi id'sini ekler/çıkarır — `mf-field` ile çakışmaz).\r\n * `aria-live` bölgesi her tuşta DEĞİL, yalnızca seviye değişince duyurur.\r\n *\r\n * Dışa açık sinyaller (`#strength=\"mfPasswordStrength\"`): `score()`, `level()`, `satisfied()` —\r\n * ör. gönder düğmesini `!strength.satisfied()` iken kilitlemek için.\r\n */\r\n@Component({\r\n selector: 'mf-password-strength',\r\n exportAs: 'mfPasswordStrength',\r\n imports: [Icon],\r\n host: { '[class]': 'hostClasses()' },\r\n templateUrl: './password-strength.html',\r\n})\r\nexport class PasswordStrength {\r\n /** Ölçülecek parola. */\r\n readonly value = input.required<string>();\r\n /** Parola `<input>`'unun id'si (`mf-password-input [inputId]` / `mf-field for` ile aynı). */\r\n readonly for = input<string>();\r\n readonly size = input<PasswordStrengthSize>('md');\r\n /** Kontrol listesi — boşsa çizilmez. Karşılanmayan varken skor en fazla \"orta\" gösterilir. */\r\n readonly requirements = input<readonly MfPasswordRequirement[]>([]);\r\n /** Parolada geçmemesi gereken kişisel değerler (e-posta, ad…) — yerleşik tahminciye iletilir. */\r\n readonly userInputs = input<readonly string[]>([]);\r\n /** Bunun altındaki uzunluk en fazla \"zayıf\" sayılır. */\r\n readonly minLength = input(8);\r\n /** Kontrollü mod: verilirse tahminci ÇALIŞMAZ, bu sonuç gösterilir (async/sunucu tahmincileri). */\r\n readonly result = input<MfPasswordStrengthResult>();\r\n /** Örnek bazında metin override'ı — verilmeyen alanlar `provideMesgflowUi` etiketlerinden gelir. */\r\n readonly labels = input<DeepPartial<MfPasswordStrengthLabels>>();\r\n\r\n private readonly document = inject(DOCUMENT);\r\n private readonly estimator = inject(MF_PASSWORD_STRENGTH_ESTIMATOR);\r\n private readonly injectedLabels = inject(MF_PASSWORD_STRENGTH_LABELS);\r\n protected readonly text = computed(() => mergeLabels(this.injectedLabels(), this.labels()));\r\n\r\n protected readonly segments = SEGMENTS;\r\n protected readonly staggerMs = SEGMENT_STAGGER_MS;\r\n protected readonly descriptionId = nextId('mf-password-strength');\r\n\r\n private readonly estimate = computed<MfPasswordStrengthResult>(() => {\r\n const value = this.value();\r\n if (!value) return { score: 0 };\r\n return (\r\n this.result() ??\r\n this.estimator(value, { minLength: this.minLength(), userInputs: this.userInputs() })\r\n );\r\n });\r\n\r\n protected readonly checks = computed(() => {\r\n const value = this.value();\r\n const text = this.text();\r\n return checkPasswordRequirements(value, this.requirements()).map(({ requirement, met }) => ({\r\n met,\r\n key: requirement.kind === 'custom' ? `custom:${requirement.id}` : requirement.kind,\r\n label:\r\n requirement.kind === 'custom'\r\n ? requirement.label\r\n : requirement.kind === 'minLength'\r\n ? text.requirements.minLength.replace('{count}', String(requirement.value))\r\n : text.requirements[requirement.kind],\r\n }));\r\n });\r\n\r\n /** Tüm gereksinimler karşılandı mı (liste boşsa `true`). */\r\n readonly satisfied = computed(() => this.checks().every((c) => c.met));\r\n\r\n /** Gösterilen skor (0–4) — karşılanmamış gereksinim varken en fazla 2. */\r\n readonly score = computed<MfPasswordStrengthScore>(() => {\r\n if (!this.value()) return 0;\r\n const raw = Math.min(4, Math.max(0, Math.round(this.estimate().score)));\r\n return (this.satisfied() ? raw : Math.min(raw, UNSATISFIED_CAP)) as MfPasswordStrengthScore;\r\n });\r\n\r\n /** Görsel seviye — değer boşken `null`. */\r\n readonly level = computed<MfPasswordStrengthLevel | null>(() =>\r\n this.value() ? passwordStrengthLevel(this.score()) : null,\r\n );\r\n\r\n protected readonly filled = computed(() => (this.value() ? Math.max(1, this.score()) : 0));\r\n protected readonly levelLabel = computed(() => {\r\n const level = this.level();\r\n return level ? this.text().levels[level] : '';\r\n });\r\n\r\n protected readonly hint = computed(() => {\r\n if (!this.value()) return '';\r\n const { hint, warning } = this.estimate();\r\n if (hint) return hint;\r\n // Sınırlı skor (gereksinim eksik) \"iyi\" ipucunu gizlemesin diye ipucu ham sonuçtan gelir.\r\n return warning ? this.text().warnings[warning] : '';\r\n });\r\n\r\n protected readonly metCount = computed(() => this.checks().filter((c) => c.met).length);\r\n\r\n protected readonly requirementsSummary = computed(() =>\r\n this.checks().length\r\n ? this.text()\r\n .requirementsMet.replace('{met}', String(this.metCount()))\r\n .replace('{total}', String(this.checks().length))\r\n : '',\r\n );\r\n\r\n /** Kontrole odaklanınca okunan gizli özet. Değer boşken gereksinimleri sıralar. */\r\n protected readonly description = computed(() => {\r\n const text = this.text();\r\n if (!this.value()) {\r\n const rules = this.checks().map((c) => c.label);\r\n return rules.length ? `${text.requirementsLabel}: ${rules.join(', ')}.` : '';\r\n }\r\n return [`${text.ariaLabel}: ${this.levelLabel()}.`, this.hint(), this.requirementsSummary()]\r\n .filter(Boolean)\r\n .join(' ');\r\n });\r\n\r\n /**\r\n * Canlı bölge metni YALNIZCA seviyeye bağlı — aynı seviyede yazmaya devam etmek metni\r\n * değiştirmediği için DOM'a yazılmaz, ekran okuyucu her tuşta konuşmaz.\r\n */\r\n protected readonly announcement = computed(() => {\r\n const label = this.levelLabel();\r\n return label ? `${this.text().ariaLabel}: ${label}` : '';\r\n });\r\n\r\n protected readonly levelText = computed(() => {\r\n const level = this.level();\r\n return cn(\r\n 'inline-flex shrink-0 items-center gap-1 font-medium transition-colors duration-fast ease-emphasis',\r\n level ? TEXT_TONE[level] : 'text-fg-subtle',\r\n );\r\n });\r\n\r\n protected readonly trackClasses = computed(() =>\r\n cn(passwordStrengthTrackVariants({ size: this.size() })),\r\n );\r\n\r\n protected readonly hostClasses = computed(() => cn('@container block w-full'));\r\n\r\n protected segmentFill(index: number): string {\r\n const level = this.level();\r\n return cn(\r\n 'absolute inset-0 origin-[0_50%] rounded-full transition-[transform,background-color] duration-slow ease-emphasis rtl:origin-[100%_50%]',\r\n level ? SEGMENT_TONE[level] : 'bg-transparent',\r\n index < this.filled() ? 'scale-x-100' : 'scale-x-0',\r\n );\r\n }\r\n\r\n constructor() {\r\n afterRenderEffect((onCleanup) => {\r\n const id = this.for();\r\n if (!id) return;\r\n const control = this.document.getElementById(id);\r\n if (!control) return;\r\n const own = this.descriptionId;\r\n const ids = (control.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean);\r\n if (!ids.includes(own)) control.setAttribute('aria-describedby', [...ids, own].join(' '));\r\n\r\n onCleanup(() => {\r\n const rest = (control.getAttribute('aria-describedby') ?? '')\r\n .split(/\\s+/)\r\n .filter((x) => x && x !== own);\r\n if (rest.length) control.setAttribute('aria-describedby', rest.join(' '));\r\n else control.removeAttribute('aria-describedby');\r\n });\r\n });\r\n }\r\n}\r\n","<div\r\n role=\"meter\"\r\n aria-valuemin=\"0\"\r\n aria-valuemax=\"4\"\r\n [attr.aria-valuenow]=\"score()\"\r\n [attr.aria-valuetext]=\"levelLabel() || null\"\r\n [attr.aria-label]=\"text().ariaLabel\"\r\n [class]=\"trackClasses()\"\r\n>\r\n @for (segment of segments; track segment) {\r\n <span class=\"relative flex-1 overflow-hidden rounded-full bg-border\">\r\n <span [class]=\"segmentFill(segment)\" [style.transition-delay.ms]=\"segment * staggerMs\"></span>\r\n </span>\r\n }\r\n</div>\r\n\r\n<p class=\"m-0 mt-1.5 flex min-h-5 flex-wrap items-center gap-x-2 text-xs\" aria-hidden=\"true\">\r\n @if (level(); as current) {\r\n <span [class]=\"levelText()\">\r\n @if (current === 'strong') {\r\n <span mfIcon [size]=\"14\" [filled]=\"true\" class=\"animate-pop\">check_circle</span>\r\n }\r\n {{ levelLabel() }}\r\n </span>\r\n @if (hint()) {\r\n <span class=\"min-w-0 text-fg-subtle animate-fade-in\">{{ hint() }}</span>\r\n }\r\n }\r\n</p>\r\n\r\n@if (checks().length) {\r\n <ul\r\n class=\"m-0 mt-2 grid list-none gap-x-4 gap-y-1 p-0 @sm:grid-cols-2\"\r\n [attr.aria-label]=\"text().requirementsLabel\"\r\n >\r\n @for (check of checks(); track check.key) {\r\n <li\r\n class=\"flex items-center gap-1.5 text-xs transition-colors duration-fast ease-emphasis\"\r\n [class]=\"check.met ? 'text-fg' : 'text-fg-subtle'\"\r\n >\r\n @if (check.met) {\r\n <span mfIcon [size]=\"14\" [filled]=\"true\" class=\"text-success animate-pop\"\r\n >check_circle</span\r\n >\r\n } @else {\r\n <span mfIcon [size]=\"14\">radio_button_unchecked</span>\r\n }\r\n <span>{{ check.label }}</span>\r\n <span class=\"sr-only\"> ({{ check.met ? text().met : text().unmet }})</span>\r\n </li>\r\n }\r\n </ul>\r\n}\r\n\r\n<span class=\"sr-only\" [id]=\"descriptionId\">{{ description() }}</span>\r\n<span class=\"sr-only\" aria-live=\"polite\">{{ announcement() }}</span>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -52,6 +52,7 @@ export * from '@mesgflow/ui-kit/otp-input';
52
52
  export * from '@mesgflow/ui-kit/page-header';
53
53
  export * from '@mesgflow/ui-kit/pagination';
54
54
  export * from '@mesgflow/ui-kit/password-input';
55
+ export * from '@mesgflow/ui-kit/password-strength';
55
56
  export * from '@mesgflow/ui-kit/popover';
56
57
  export * from '@mesgflow/ui-kit/progress';
57
58
  export * from '@mesgflow/ui-kit/qr-code';
@@ -1 +1 @@
1
- {"version":3,"file":"mesgflow-ui-kit.mjs","sources":["../../../projects/ui-kit/index.ts","../../../projects/ui-kit/mesgflow-ui-kit.ts"],"sourcesContent":["/*\r\n * Public API Surface of @mesgflow/ui-kit — birincil giriş noktası.\r\n *\r\n * Her satır bir ikincil giriş noktasının (`@mesgflow/ui-kit/<klasör>`) kendi\r\n * `index.ts` barrel'ını yeniden dışa verir — tüketici `import { Button }\r\n * from '@mesgflow/ui-kit'` yazmaya devam eder, ama isterse `import { Button }\r\n * from '@mesgflow/ui-kit/button'` ile yalnız o girişi de çekebilir (bkz.\r\n * `@angular/cdk`'nin `./overlay`/`./a11y` deseni).\r\n */\r\n\r\n// Yeniden dışa aktarımlar PAKET YOLUYLA (`@mesgflow/ui-kit/<entry>`), göreli `./<entry>` DEĞİL:\r\n// göreli yolda ng-packagr her entry'nin kodunu birincil FESM'e İKİNCİ KEZ gömüyordu (1.3 MB,\r\n// ayrı sınıf/InjectionToken kimlikleri — `provideMesgflowUi` barrel'dan, bileşen `/button`'dan\r\n// gelince etiketler bileşene ulaşmıyordu). `check:size`'ın `(barrel)` bütçesi bunu korur.\r\n// icons-lucide BİLEREK birincil barrel'da YOK — opsiyonel veri seti, import edilmezse pakete girmez.\r\nexport * from '@mesgflow/ui-kit/core';\r\nexport * from '@mesgflow/ui-kit/accordion';\r\nexport * from '@mesgflow/ui-kit/agenda';\r\nexport * from '@mesgflow/ui-kit/alert';\r\nexport * from '@mesgflow/ui-kit/aspect-ratio';\r\nexport * from '@mesgflow/ui-kit/avatar-group';\r\nexport * from '@mesgflow/ui-kit/avatar';\r\nexport * from '@mesgflow/ui-kit/badge';\r\nexport * from '@mesgflow/ui-kit/blocks';\r\nexport * from '@mesgflow/ui-kit/banner';\r\nexport * from '@mesgflow/ui-kit/box-input';\r\nexport * from '@mesgflow/ui-kit/brand';\r\nexport * from '@mesgflow/ui-kit/breadcrumb';\r\nexport * from '@mesgflow/ui-kit/button-group';\r\nexport * from '@mesgflow/ui-kit/button';\r\nexport * from '@mesgflow/ui-kit/card';\r\nexport * from '@mesgflow/ui-kit/carousel';\r\nexport * from '@mesgflow/ui-kit/chart';\r\nexport * from '@mesgflow/ui-kit/checkbox';\r\nexport * from '@mesgflow/ui-kit/chip';\r\nexport * from '@mesgflow/ui-kit/code-block';\r\nexport * from '@mesgflow/ui-kit/collapsible';\r\nexport * from '@mesgflow/ui-kit/color-picker';\r\nexport * from '@mesgflow/ui-kit/combobox';\r\nexport * from '@mesgflow/ui-kit/command';\r\nexport * from '@mesgflow/ui-kit/context-menu';\r\nexport * from '@mesgflow/ui-kit/copy-button';\r\nexport * from '@mesgflow/ui-kit/countdown';\r\nexport * from '@mesgflow/ui-kit/date-picker';\r\nexport * from '@mesgflow/ui-kit/description-list';\r\nexport * from '@mesgflow/ui-kit/dialog';\r\nexport * from '@mesgflow/ui-kit/divider';\r\nexport * from '@mesgflow/ui-kit/drawer';\r\nexport * from '@mesgflow/ui-kit/dropzone';\r\nexport * from '@mesgflow/ui-kit/empty-state';\r\nexport * from '@mesgflow/ui-kit/field';\r\nexport * from '@mesgflow/ui-kit/file-upload';\r\nexport * from '@mesgflow/ui-kit/hover-card';\r\nexport * from '@mesgflow/ui-kit/icon';\r\nexport * from '@mesgflow/ui-kit/inline-edit';\r\nexport * from '@mesgflow/ui-kit/input';\r\nexport * from '@mesgflow/ui-kit/kbd';\r\nexport * from '@mesgflow/ui-kit/lightbox';\r\nexport * from '@mesgflow/ui-kit/link';\r\nexport * from '@mesgflow/ui-kit/listbox';\r\nexport * from '@mesgflow/ui-kit/mention';\r\nexport * from '@mesgflow/ui-kit/menu';\r\nexport * from '@mesgflow/ui-kit/nav-menu';\r\nexport * from '@mesgflow/ui-kit/notification-center';\r\nexport * from '@mesgflow/ui-kit/number-input';\r\nexport * from '@mesgflow/ui-kit/otp-input';\r\nexport * from '@mesgflow/ui-kit/page-header';\r\nexport * from '@mesgflow/ui-kit/pagination';\r\nexport * from '@mesgflow/ui-kit/password-input';\r\nexport * from '@mesgflow/ui-kit/popover';\r\nexport * from '@mesgflow/ui-kit/progress';\r\nexport * from '@mesgflow/ui-kit/qr-code';\r\nexport * from '@mesgflow/ui-kit/radio';\r\nexport * from '@mesgflow/ui-kit/rating';\r\nexport * from '@mesgflow/ui-kit/scroll-area';\r\nexport * from '@mesgflow/ui-kit/search-input';\r\nexport * from '@mesgflow/ui-kit/segmented-control';\r\nexport * from '@mesgflow/ui-kit/select';\r\nexport * from '@mesgflow/ui-kit/sidebar';\r\nexport * from '@mesgflow/ui-kit/skeleton';\r\nexport * from '@mesgflow/ui-kit/slider';\r\nexport * from '@mesgflow/ui-kit/sortable';\r\nexport * from '@mesgflow/ui-kit/spinner';\r\nexport * from '@mesgflow/ui-kit/split-button';\r\nexport * from '@mesgflow/ui-kit/splitter';\r\nexport * from '@mesgflow/ui-kit/stat-tile';\r\nexport * from '@mesgflow/ui-kit/stepper';\r\nexport * from '@mesgflow/ui-kit/switch';\r\nexport * from '@mesgflow/ui-kit/table';\r\nexport * from '@mesgflow/ui-kit/tabs';\r\nexport * from '@mesgflow/ui-kit/tag-input';\r\nexport * from '@mesgflow/ui-kit/theme-switcher';\r\nexport * from '@mesgflow/ui-kit/time-picker';\r\nexport * from '@mesgflow/ui-kit/timeline';\r\nexport * from '@mesgflow/ui-kit/toast';\r\nexport * from '@mesgflow/ui-kit/toggle';\r\nexport * from '@mesgflow/ui-kit/toolbar';\r\nexport * from '@mesgflow/ui-kit/tooltip';\r\nexport * from '@mesgflow/ui-kit/tour';\r\nexport * from '@mesgflow/ui-kit/transfer-list';\r\nexport * from '@mesgflow/ui-kit/tree-select';\r\nexport * from '@mesgflow/ui-kit/tree';\r\nexport * from '@mesgflow/ui-kit/virtual-list';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAQG;AAEH;AACA;AACA;AACA;AACA;;ACdA;;AAEG"}
1
+ {"version":3,"file":"mesgflow-ui-kit.mjs","sources":["../../../projects/ui-kit/index.ts","../../../projects/ui-kit/mesgflow-ui-kit.ts"],"sourcesContent":["/*\r\n * Public API Surface of @mesgflow/ui-kit — birincil giriş noktası.\r\n *\r\n * Her satır bir ikincil giriş noktasının (`@mesgflow/ui-kit/<klasör>`) kendi\r\n * `index.ts` barrel'ını yeniden dışa verir — tüketici `import { Button }\r\n * from '@mesgflow/ui-kit'` yazmaya devam eder, ama isterse `import { Button }\r\n * from '@mesgflow/ui-kit/button'` ile yalnız o girişi de çekebilir (bkz.\r\n * `@angular/cdk`'nin `./overlay`/`./a11y` deseni).\r\n */\r\n\r\n// Yeniden dışa aktarımlar PAKET YOLUYLA (`@mesgflow/ui-kit/<entry>`), göreli `./<entry>` DEĞİL:\r\n// göreli yolda ng-packagr her entry'nin kodunu birincil FESM'e İKİNCİ KEZ gömüyordu (1.3 MB,\r\n// ayrı sınıf/InjectionToken kimlikleri — `provideMesgflowUi` barrel'dan, bileşen `/button`'dan\r\n// gelince etiketler bileşene ulaşmıyordu). `check:size`'ın `(barrel)` bütçesi bunu korur.\r\n// icons-lucide BİLEREK birincil barrel'da YOK — opsiyonel veri seti, import edilmezse pakete girmez.\r\nexport * from '@mesgflow/ui-kit/core';\r\nexport * from '@mesgflow/ui-kit/accordion';\r\nexport * from '@mesgflow/ui-kit/agenda';\r\nexport * from '@mesgflow/ui-kit/alert';\r\nexport * from '@mesgflow/ui-kit/aspect-ratio';\r\nexport * from '@mesgflow/ui-kit/avatar-group';\r\nexport * from '@mesgflow/ui-kit/avatar';\r\nexport * from '@mesgflow/ui-kit/badge';\r\nexport * from '@mesgflow/ui-kit/blocks';\r\nexport * from '@mesgflow/ui-kit/banner';\r\nexport * from '@mesgflow/ui-kit/box-input';\r\nexport * from '@mesgflow/ui-kit/brand';\r\nexport * from '@mesgflow/ui-kit/breadcrumb';\r\nexport * from '@mesgflow/ui-kit/button-group';\r\nexport * from '@mesgflow/ui-kit/button';\r\nexport * from '@mesgflow/ui-kit/card';\r\nexport * from '@mesgflow/ui-kit/carousel';\r\nexport * from '@mesgflow/ui-kit/chart';\r\nexport * from '@mesgflow/ui-kit/checkbox';\r\nexport * from '@mesgflow/ui-kit/chip';\r\nexport * from '@mesgflow/ui-kit/code-block';\r\nexport * from '@mesgflow/ui-kit/collapsible';\r\nexport * from '@mesgflow/ui-kit/color-picker';\r\nexport * from '@mesgflow/ui-kit/combobox';\r\nexport * from '@mesgflow/ui-kit/command';\r\nexport * from '@mesgflow/ui-kit/context-menu';\r\nexport * from '@mesgflow/ui-kit/copy-button';\r\nexport * from '@mesgflow/ui-kit/countdown';\r\nexport * from '@mesgflow/ui-kit/date-picker';\r\nexport * from '@mesgflow/ui-kit/description-list';\r\nexport * from '@mesgflow/ui-kit/dialog';\r\nexport * from '@mesgflow/ui-kit/divider';\r\nexport * from '@mesgflow/ui-kit/drawer';\r\nexport * from '@mesgflow/ui-kit/dropzone';\r\nexport * from '@mesgflow/ui-kit/empty-state';\r\nexport * from '@mesgflow/ui-kit/field';\r\nexport * from '@mesgflow/ui-kit/file-upload';\r\nexport * from '@mesgflow/ui-kit/hover-card';\r\nexport * from '@mesgflow/ui-kit/icon';\r\nexport * from '@mesgflow/ui-kit/inline-edit';\r\nexport * from '@mesgflow/ui-kit/input';\r\nexport * from '@mesgflow/ui-kit/kbd';\r\nexport * from '@mesgflow/ui-kit/lightbox';\r\nexport * from '@mesgflow/ui-kit/link';\r\nexport * from '@mesgflow/ui-kit/listbox';\r\nexport * from '@mesgflow/ui-kit/mention';\r\nexport * from '@mesgflow/ui-kit/menu';\r\nexport * from '@mesgflow/ui-kit/nav-menu';\r\nexport * from '@mesgflow/ui-kit/notification-center';\r\nexport * from '@mesgflow/ui-kit/number-input';\r\nexport * from '@mesgflow/ui-kit/otp-input';\r\nexport * from '@mesgflow/ui-kit/page-header';\r\nexport * from '@mesgflow/ui-kit/pagination';\r\nexport * from '@mesgflow/ui-kit/password-input';\r\nexport * from '@mesgflow/ui-kit/password-strength';\r\nexport * from '@mesgflow/ui-kit/popover';\r\nexport * from '@mesgflow/ui-kit/progress';\r\nexport * from '@mesgflow/ui-kit/qr-code';\r\nexport * from '@mesgflow/ui-kit/radio';\r\nexport * from '@mesgflow/ui-kit/rating';\r\nexport * from '@mesgflow/ui-kit/scroll-area';\r\nexport * from '@mesgflow/ui-kit/search-input';\r\nexport * from '@mesgflow/ui-kit/segmented-control';\r\nexport * from '@mesgflow/ui-kit/select';\r\nexport * from '@mesgflow/ui-kit/sidebar';\r\nexport * from '@mesgflow/ui-kit/skeleton';\r\nexport * from '@mesgflow/ui-kit/slider';\r\nexport * from '@mesgflow/ui-kit/sortable';\r\nexport * from '@mesgflow/ui-kit/spinner';\r\nexport * from '@mesgflow/ui-kit/split-button';\r\nexport * from '@mesgflow/ui-kit/splitter';\r\nexport * from '@mesgflow/ui-kit/stat-tile';\r\nexport * from '@mesgflow/ui-kit/stepper';\r\nexport * from '@mesgflow/ui-kit/switch';\r\nexport * from '@mesgflow/ui-kit/table';\r\nexport * from '@mesgflow/ui-kit/tabs';\r\nexport * from '@mesgflow/ui-kit/tag-input';\r\nexport * from '@mesgflow/ui-kit/theme-switcher';\r\nexport * from '@mesgflow/ui-kit/time-picker';\r\nexport * from '@mesgflow/ui-kit/timeline';\r\nexport * from '@mesgflow/ui-kit/toast';\r\nexport * from '@mesgflow/ui-kit/toggle';\r\nexport * from '@mesgflow/ui-kit/toolbar';\r\nexport * from '@mesgflow/ui-kit/tooltip';\r\nexport * from '@mesgflow/ui-kit/tour';\r\nexport * from '@mesgflow/ui-kit/transfer-list';\r\nexport * from '@mesgflow/ui-kit/tree-select';\r\nexport * from '@mesgflow/ui-kit/tree';\r\nexport * from '@mesgflow/ui-kit/virtual-list';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAQG;AAEH;AACA;AACA;AACA;AACA;;ACdA;;AAEG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mesgflow/ui-kit",
3
- "version": "0.11.1",
3
+ "version": "0.12.0",
4
4
  "description": "Independent Angular component kit (button, select, dialog, table, sidebar, and more) built on a Tailwind v4 design token system. See README.md for setup and prerequisites.",
5
5
  "license": "MIT",
6
6
  "author": "Hurdeniz YENER",
@@ -315,6 +315,10 @@
315
315
  "types": "./types/mesgflow-ui-kit-password-input.d.ts",
316
316
  "default": "./fesm2022/mesgflow-ui-kit-password-input.mjs"
317
317
  },
318
+ "./password-strength": {
319
+ "types": "./types/mesgflow-ui-kit-password-strength.d.ts",
320
+ "default": "./fesm2022/mesgflow-ui-kit-password-strength.mjs"
321
+ },
318
322
  "./popover": {
319
323
  "types": "./types/mesgflow-ui-kit-popover.d.ts",
320
324
  "default": "./fesm2022/mesgflow-ui-kit-popover.mjs"
package/tokens.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
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.",
2
+ "$description": "@mesgflow/ui-kit 0.12.0 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": {
@@ -384,6 +384,40 @@ interface MfPasswordInputLabels {
384
384
  show: string;
385
385
  hide: string;
386
386
  }
387
+ /** Parola gücü ölçeri (`mf-password-strength`). */
388
+ interface MfPasswordStrengthLabels {
389
+ /** `role="meter"` çubuğunun erişilebilir adı (ekran okuyucu özetinin de başı). */
390
+ ariaLabel: string;
391
+ levels: {
392
+ weak: string;
393
+ fair: string;
394
+ good: string;
395
+ strong: string;
396
+ };
397
+ /** Tahmincinin uyarı kodlarına karşılık gelen tek satırlık ipuçları. */
398
+ warnings: {
399
+ tooShort: string;
400
+ common: string;
401
+ personal: string;
402
+ repeated: string;
403
+ sequence: string;
404
+ };
405
+ /** Gereksinim listesinin (`<ul>`) erişilebilir adı. */
406
+ requirementsLabel: string;
407
+ /** Yerleşik gereksinim metinleri — `minLength`'te `{count}` sayıyla değiştirilir. */
408
+ requirements: {
409
+ minLength: string;
410
+ lowercase: string;
411
+ uppercase: string;
412
+ digit: string;
413
+ symbol: string;
414
+ };
415
+ /** Ekran okuyucu özeti — `{met}` / `{total}` sayılarla değiştirilir. */
416
+ requirementsMet: string;
417
+ /** Gereksinim satırının ekran okuyucu durumu (ikon yalnızca görsel). */
418
+ met: string;
419
+ unmet: string;
420
+ }
387
421
  interface MfQrCodeLabels {
388
422
  /** `role="img"` için varsayılan erişilebilir ad. */
389
423
  ariaLabel: string;
@@ -628,6 +662,7 @@ interface MfLabels {
628
662
  stepper: MfStepperLabels;
629
663
  progress: MfProgressLabels;
630
664
  passwordInput: MfPasswordInputLabels;
665
+ passwordStrength: MfPasswordStrengthLabels;
631
666
  qrCode: MfQrCodeLabels;
632
667
  chip: MfChipLabels;
633
668
  alert: MfAlertLabels;
@@ -703,6 +738,7 @@ declare const MF_OTP_INPUT_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.M
703
738
  declare const MF_STEPPER_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfStepperLabels>>;
704
739
  declare const MF_PROGRESS_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfProgressLabels>>;
705
740
  declare const MF_PASSWORD_INPUT_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfPasswordInputLabels>>;
741
+ declare const MF_PASSWORD_STRENGTH_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfPasswordStrengthLabels>>;
706
742
  declare const MF_QR_CODE_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfQrCodeLabels>>;
707
743
  declare const MF_CHIP_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfChipLabels>>;
708
744
  declare const MF_ALERT_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfAlertLabels>>;
@@ -762,5 +798,5 @@ interface ProvideMesgflowUiOptions {
762
798
  */
763
799
  declare function provideMesgflowUi(options?: ProvideMesgflowUiOptions): EnvironmentProviders;
764
800
 
765
- export { MF_AGENDA_LABELS, MF_ALERT_LABELS, MF_AUTH_CARD_LABELS, MF_AVATAR_GROUP_LABELS, MF_BOX_INPUT_LABELS, MF_BREADCRUMB_LABELS, MF_CAROUSEL_LABELS, MF_CHARACTER_COUNT_LABELS, MF_CHART_LABELS, MF_CHIP_LABELS, MF_COLOR_PICKER_LABELS, MF_COMBOBOX_LABELS, MF_COMMAND_LABELS, MF_COMMON_LABELS, MF_COPY_LABELS, MF_COUNTDOWN_LABELS, MF_DATE_LOCALE, MF_DATE_PICKER_LABELS, MF_DIALOG_LABELS, MF_DROPZONE_LABELS, MF_FILE_UPLOAD_LABELS, MF_INLINE_EDIT_LABELS, MF_INVITE_MEMBERS_LABELS, MF_LABELS, MF_LIGHTBOX_LABELS, MF_MENTION_LABELS, MF_NOTIFICATION_CENTER_LABELS, MF_OTP_INPUT_LABELS, MF_PAGINATION_LABELS, MF_PANEL_GROUP_LABELS, MF_PASSWORD_INPUT_LABELS, MF_PROGRESS_LABELS, MF_QR_CODE_LABELS, MF_RATING_LABELS, MF_SEARCH_INPUT_LABELS, MF_SELECT_LABELS, MF_SIDEBAR_LABELS, MF_SLIDER_LABELS, MF_SORTABLE_LABELS, MF_SPLIT_BUTTON_LABELS, MF_STAT_TILE_LABELS, MF_STEPPER_LABELS, MF_TABLE_LABELS, MF_TABS_LABELS, MF_THEME_SWITCHER_LABELS, MF_TIME_PICKER_LABELS, MF_TOAST_LABELS, MF_TOUR_LABELS, MF_TRANSFER_LIST_LABELS, MF_TREE_SELECT_LABELS, SlidingIndicator, ValueAccessorBase, cn, containerSurface, controlSize, controlSurface, disabledRecipe, errorRecipe, exitDurationMs, focusRecipe, glassSurface, inlineStartRatio, isRtl, mergeLabels, mfLabelsEn, nextId, overlayPositions, overlaySurface, parseCssDuration, pointerPositions, prefersReducedMotion, pressRecipe, provideMesgflowUi, scrollFromInlineStart, transitionRecipe };
766
- export type { DeepPartial, MfAgendaLabels, MfAlertLabels, MfAuthCardLabels, MfAvatarGroupLabels, MfBoxInputLabels, MfBreadcrumbLabels, MfCarouselLabels, MfCharacterCountLabels, MfChartLabels, MfChipLabels, MfColorPickerLabels, MfComboboxLabels, MfCommandLabels, MfCommonLabels, MfControlSize, MfCopyLabels, MfCountdownLabels, MfDatePickerLabels, MfDialogLabels, MfDropzoneLabels, MfFileUploadLabels, MfInlineEditLabels, MfInviteMembersLabels, MfLabels, MfLightboxLabels, MfMentionLabels, MfNotificationCenterLabels, MfOtpInputLabels, MfPaginationLabels, MfPanelGroupLabels, MfPasswordInputLabels, MfPlacement, MfProgressLabels, MfQrCodeLabels, MfRatingLabels, MfSearchInputLabels, MfSelectLabels, MfSidebarLabels, MfSize, MfSliderLabels, MfSortableLabels, MfSplitButtonLabels, MfStatTileLabels, MfStepperLabels, MfTableFilterLabels, MfTableFilterOperatorLabels, MfTableLabels, MfTablePaginationLabels, MfTabsLabels, MfThemeSwitcherLabels, MfTimePickerLabels, MfToastLabels, MfTone, MfTourLabels, MfTransferListLabels, MfTreeSelectLabels, ProvideMesgflowUiOptions, SlidingIndicatorAxis };
801
+ export { MF_AGENDA_LABELS, MF_ALERT_LABELS, MF_AUTH_CARD_LABELS, MF_AVATAR_GROUP_LABELS, MF_BOX_INPUT_LABELS, MF_BREADCRUMB_LABELS, MF_CAROUSEL_LABELS, MF_CHARACTER_COUNT_LABELS, MF_CHART_LABELS, MF_CHIP_LABELS, MF_COLOR_PICKER_LABELS, MF_COMBOBOX_LABELS, MF_COMMAND_LABELS, MF_COMMON_LABELS, MF_COPY_LABELS, MF_COUNTDOWN_LABELS, MF_DATE_LOCALE, MF_DATE_PICKER_LABELS, MF_DIALOG_LABELS, MF_DROPZONE_LABELS, MF_FILE_UPLOAD_LABELS, MF_INLINE_EDIT_LABELS, MF_INVITE_MEMBERS_LABELS, MF_LABELS, MF_LIGHTBOX_LABELS, MF_MENTION_LABELS, MF_NOTIFICATION_CENTER_LABELS, MF_OTP_INPUT_LABELS, MF_PAGINATION_LABELS, MF_PANEL_GROUP_LABELS, MF_PASSWORD_INPUT_LABELS, MF_PASSWORD_STRENGTH_LABELS, MF_PROGRESS_LABELS, MF_QR_CODE_LABELS, MF_RATING_LABELS, MF_SEARCH_INPUT_LABELS, MF_SELECT_LABELS, MF_SIDEBAR_LABELS, MF_SLIDER_LABELS, MF_SORTABLE_LABELS, MF_SPLIT_BUTTON_LABELS, MF_STAT_TILE_LABELS, MF_STEPPER_LABELS, MF_TABLE_LABELS, MF_TABS_LABELS, MF_THEME_SWITCHER_LABELS, MF_TIME_PICKER_LABELS, MF_TOAST_LABELS, MF_TOUR_LABELS, MF_TRANSFER_LIST_LABELS, MF_TREE_SELECT_LABELS, SlidingIndicator, ValueAccessorBase, cn, containerSurface, controlSize, controlSurface, disabledRecipe, errorRecipe, exitDurationMs, focusRecipe, glassSurface, inlineStartRatio, isRtl, mergeLabels, mfLabelsEn, nextId, overlayPositions, overlaySurface, parseCssDuration, pointerPositions, prefersReducedMotion, pressRecipe, provideMesgflowUi, scrollFromInlineStart, transitionRecipe };
802
+ export type { DeepPartial, MfAgendaLabels, MfAlertLabels, MfAuthCardLabels, MfAvatarGroupLabels, MfBoxInputLabels, MfBreadcrumbLabels, MfCarouselLabels, MfCharacterCountLabels, MfChartLabels, MfChipLabels, MfColorPickerLabels, MfComboboxLabels, MfCommandLabels, MfCommonLabels, MfControlSize, MfCopyLabels, MfCountdownLabels, MfDatePickerLabels, MfDialogLabels, MfDropzoneLabels, MfFileUploadLabels, MfInlineEditLabels, MfInviteMembersLabels, MfLabels, MfLightboxLabels, MfMentionLabels, MfNotificationCenterLabels, MfOtpInputLabels, MfPaginationLabels, MfPanelGroupLabels, MfPasswordInputLabels, MfPasswordStrengthLabels, MfPlacement, MfProgressLabels, MfQrCodeLabels, MfRatingLabels, MfSearchInputLabels, MfSelectLabels, MfSidebarLabels, MfSize, MfSliderLabels, MfSortableLabels, MfSplitButtonLabels, MfStatTileLabels, MfStepperLabels, MfTableFilterLabels, MfTableFilterOperatorLabels, MfTableLabels, MfTablePaginationLabels, MfTabsLabels, MfThemeSwitcherLabels, MfTimePickerLabels, MfToastLabels, MfTone, MfTourLabels, MfTransferListLabels, MfTreeSelectLabels, ProvideMesgflowUiOptions, SlidingIndicatorAxis };
@@ -0,0 +1,180 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { InjectionToken } from '@angular/core';
3
+ import { MfPasswordStrengthLabels } from '@mesgflow/ui-kit/core';
4
+ import * as class_variance_authority_types from 'class-variance-authority/types';
5
+ import { VariantProps } from 'class-variance-authority';
6
+
7
+ /** 0 = tahmin edilmesi çok kolay … 4 = çok güçlü (zxcvbn ile aynı ölçek). */
8
+ type MfPasswordStrengthScore = 0 | 1 | 2 | 3 | 4;
9
+ type MfPasswordStrengthLevel = 'weak' | 'fair' | 'good' | 'strong';
10
+ /** Tahmincinin en baskın zayıflığı — metni `MfLabels.passwordStrength.warnings`'ten gelir. */
11
+ type MfPasswordStrengthWarning = 'tooShort' | 'common' | 'personal' | 'repeated' | 'sequence';
12
+ interface MfPasswordStrengthResult {
13
+ score: MfPasswordStrengthScore;
14
+ /** Yerleşik ipucu kodu — `hint` verilmediyse etiketlerden metne çevrilir. */
15
+ warning?: MfPasswordStrengthWarning;
16
+ /** Hazır (zaten yerelleştirilmiş) ipucu metni — `warning`'in önüne geçer (özel tahminciler için). */
17
+ hint?: string;
18
+ }
19
+ interface MfPasswordStrengthOptions {
20
+ /** Bunun altındaki uzunluk en fazla skor 1 alır (`tooShort`). Varsayılan 8. */
21
+ minLength?: number;
22
+ /** Parolada geçmemesi gereken kişisel değerler (e-posta, ad, kullanıcı adı…). */
23
+ userInputs?: readonly string[];
24
+ }
25
+ type MfPasswordStrengthEstimator = (value: string, options: Required<MfPasswordStrengthOptions>) => MfPasswordStrengthResult;
26
+ /**
27
+ * Bağımlılıksız, birkaç KB'lık tahmin edilebilirlik tahmincisi. "1 büyük harf + 1 rakam" saymaz
28
+ * (NIST 800-63B): her karakterin TAHMİN EDİLEMEZ olup olmadığına bakar, tahmin edilebilir
29
+ * olanları (tekrar, ardışık dizi, klavye satırı, yıl, yaygın kelime, kişisel değer) entropiye
30
+ * saymaz, kalan "etkin uzunluk × log2(karakter havuzu)" bitini 0–4'e eşler.
31
+ *
32
+ * Sınırı: tam bir sözlük taşımaz — sözlükte olup listede olmayan kelime tabanlı parolaları
33
+ * fazla puanlayabilir. Tam kapsam için `zxcvbn-ts`'i `MF_PASSWORD_STRENGTH_ESTIMATOR` ile takın.
34
+ */
35
+ declare function estimatePasswordStrength(value: string, options?: MfPasswordStrengthOptions): MfPasswordStrengthResult;
36
+ /**
37
+ * `mf-password-strength`'in kullandığı tahminci — varsayılan `estimatePasswordStrength`.
38
+ * Uygulama genelinde değiştirmek için (ör. `zxcvbn-ts`):
39
+ * `{ provide: MF_PASSWORD_STRENGTH_ESTIMATOR, useValue: (v, o) => fromZxcvbn(zxcvbn(v, o.userInputs)) }`.
40
+ */
41
+ declare const MF_PASSWORD_STRENGTH_ESTIMATOR: InjectionToken<MfPasswordStrengthEstimator>;
42
+ /** Skoru görsel seviyeye eşler: 0–1 zayıf, 2 orta, 3 iyi, 4 güçlü. */
43
+ declare function passwordStrengthLevel(score: MfPasswordStrengthScore): MfPasswordStrengthLevel;
44
+
45
+ /**
46
+ * Kontrol listesinin bir satırı. Yerleşik türlerin metni `MfLabels.passwordStrength.requirements`'tan
47
+ * gelir; `custom` türün `label`'ı tüketicinin kendi (zaten yerelleştirilmiş) metnidir.
48
+ */
49
+ type MfPasswordRequirement = {
50
+ kind: 'minLength';
51
+ value: number;
52
+ } | {
53
+ kind: 'lowercase' | 'uppercase' | 'digit' | 'symbol';
54
+ } | {
55
+ kind: 'custom';
56
+ id: string;
57
+ label: string;
58
+ test: (value: string) => boolean;
59
+ };
60
+ interface MfPasswordRequirementCheck {
61
+ requirement: MfPasswordRequirement;
62
+ met: boolean;
63
+ }
64
+ /** Tek bir gereksinimi sınar — Unicode-farkında (`ş` küçük harf, `Ğ` büyük harf sayılır). */
65
+ declare function meetsPasswordRequirement(value: string, requirement: MfPasswordRequirement): boolean;
66
+ /** Gereksinim listesini sınar — form doğrulayıcısında da aynı sonucu üretmek için dışa açık. */
67
+ declare function checkPasswordRequirements(value: string, requirements: readonly MfPasswordRequirement[]): MfPasswordRequirementCheck[];
68
+
69
+ /**
70
+ * `<mf-password-input inputId="pw" autocomplete="new-password" [(value)]="password" />
71
+ * <mf-password-strength for="pw" [value]="password()" [requirements]="rules" />`
72
+ *
73
+ * Kayıt / parola değiştirme formlarında parola alanının ALTINA kompoze edilen güç ölçer —
74
+ * `mf-character-count`'un `mfInput`'a göre durduğu yerde durur, değeri herhangi bir kaynaktan
75
+ * alabilir. Parolayı saklamaz, yaymaz: tek girdisi `value`.
76
+ *
77
+ * - Ölçüm: tahmin edilebilirlik (uzunluk ağırlıklı + tekrar/dizi/yaygın kelime/kişisel değer
78
+ * cezaları), "1 büyük harf + 1 rakam" sayımı DEĞİL — bkz. `estimatePasswordStrength`.
79
+ * Uygulama genelinde `MF_PASSWORD_STRENGTH_ESTIMATOR`, örnek bazında `[result]` ile değişir
80
+ * (ör. `zxcvbn-ts`, sunucu/HIBP sonucu).
81
+ * - Görsel: 4 segment + seviye etiketi + tek satır ipucu; isteğe bağlı gereksinim listesi.
82
+ * Renk tek gösterge değil — segment sayısı ve metin de aynı bilgiyi taşır (WCAG 1.4.1).
83
+ * - Erişilebilirlik: çubuk `role="meter"` (`aria-valuetext` = seviye adı). Görünen metin
84
+ * ekran okuyucudan gizli; yerine `for` ile bağlanan kontrolün `aria-describedby`'ına eklenen
85
+ * gizli bir özet okunur (yalnızca kendi id'sini ekler/çıkarır — `mf-field` ile çakışmaz).
86
+ * `aria-live` bölgesi her tuşta DEĞİL, yalnızca seviye değişince duyurur.
87
+ *
88
+ * Dışa açık sinyaller (`#strength="mfPasswordStrength"`): `score()`, `level()`, `satisfied()` —
89
+ * ör. gönder düğmesini `!strength.satisfied()` iken kilitlemek için.
90
+ */
91
+ declare class PasswordStrength {
92
+ /** Ölçülecek parola. */
93
+ readonly value: _angular_core.InputSignal<string>;
94
+ /** Parola `<input>`'unun id'si (`mf-password-input [inputId]` / `mf-field for` ile aynı). */
95
+ readonly for: _angular_core.InputSignal<string | undefined>;
96
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | null | undefined>;
97
+ /** Kontrol listesi — boşsa çizilmez. Karşılanmayan varken skor en fazla "orta" gösterilir. */
98
+ readonly requirements: _angular_core.InputSignal<readonly MfPasswordRequirement[]>;
99
+ /** Parolada geçmemesi gereken kişisel değerler (e-posta, ad…) — yerleşik tahminciye iletilir. */
100
+ readonly userInputs: _angular_core.InputSignal<readonly string[]>;
101
+ /** Bunun altındaki uzunluk en fazla "zayıf" sayılır. */
102
+ readonly minLength: _angular_core.InputSignal<number>;
103
+ /** Kontrollü mod: verilirse tahminci ÇALIŞMAZ, bu sonuç gösterilir (async/sunucu tahmincileri). */
104
+ readonly result: _angular_core.InputSignal<MfPasswordStrengthResult | undefined>;
105
+ /** Örnek bazında metin override'ı — verilmeyen alanlar `provideMesgflowUi` etiketlerinden gelir. */
106
+ readonly labels: _angular_core.InputSignal<{
107
+ ariaLabel?: string | undefined;
108
+ levels?: {
109
+ weak?: string | undefined;
110
+ fair?: string | undefined;
111
+ good?: string | undefined;
112
+ strong?: string | undefined;
113
+ } | undefined;
114
+ warnings?: {
115
+ tooShort?: string | undefined;
116
+ common?: string | undefined;
117
+ personal?: string | undefined;
118
+ repeated?: string | undefined;
119
+ sequence?: string | undefined;
120
+ } | undefined;
121
+ requirementsLabel?: string | undefined;
122
+ requirements?: {
123
+ minLength?: string | undefined;
124
+ lowercase?: string | undefined;
125
+ uppercase?: string | undefined;
126
+ digit?: string | undefined;
127
+ symbol?: string | undefined;
128
+ } | undefined;
129
+ requirementsMet?: string | undefined;
130
+ met?: string | undefined;
131
+ unmet?: string | undefined;
132
+ } | undefined>;
133
+ private readonly document;
134
+ private readonly estimator;
135
+ private readonly injectedLabels;
136
+ protected readonly text: _angular_core.Signal<MfPasswordStrengthLabels>;
137
+ protected readonly segments: readonly [0, 1, 2, 3];
138
+ protected readonly staggerMs = 40;
139
+ protected readonly descriptionId: string;
140
+ private readonly estimate;
141
+ protected readonly checks: _angular_core.Signal<{
142
+ met: boolean;
143
+ key: string;
144
+ label: string;
145
+ }[]>;
146
+ /** Tüm gereksinimler karşılandı mı (liste boşsa `true`). */
147
+ readonly satisfied: _angular_core.Signal<boolean>;
148
+ /** Gösterilen skor (0–4) — karşılanmamış gereksinim varken en fazla 2. */
149
+ readonly score: _angular_core.Signal<MfPasswordStrengthScore>;
150
+ /** Görsel seviye — değer boşken `null`. */
151
+ readonly level: _angular_core.Signal<MfPasswordStrengthLevel | null>;
152
+ protected readonly filled: _angular_core.Signal<number>;
153
+ protected readonly levelLabel: _angular_core.Signal<string>;
154
+ protected readonly hint: _angular_core.Signal<string>;
155
+ protected readonly metCount: _angular_core.Signal<number>;
156
+ protected readonly requirementsSummary: _angular_core.Signal<string>;
157
+ /** Kontrole odaklanınca okunan gizli özet. Değer boşken gereksinimleri sıralar. */
158
+ protected readonly description: _angular_core.Signal<string>;
159
+ /**
160
+ * Canlı bölge metni YALNIZCA seviyeye bağlı — aynı seviyede yazmaya devam etmek metni
161
+ * değiştirmediği için DOM'a yazılmaz, ekran okuyucu her tuşta konuşmaz.
162
+ */
163
+ protected readonly announcement: _angular_core.Signal<string>;
164
+ protected readonly levelText: _angular_core.Signal<string>;
165
+ protected readonly trackClasses: _angular_core.Signal<string>;
166
+ protected readonly hostClasses: _angular_core.Signal<string>;
167
+ protected segmentFill(index: number): string;
168
+ constructor();
169
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasswordStrength, never>;
170
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordStrength, "mf-password-strength", ["mfPasswordStrength"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "requirements": { "alias": "requirements"; "required": false; "isSignal": true; }; "userInputs": { "alias": "userInputs"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "result": { "alias": "result"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
171
+ }
172
+
173
+ /** Segment satırı — boyut ekseni `mf-progress` çubuğunun kalınlıklarıyla aynı ritimde. */
174
+ declare const passwordStrengthTrackVariants: (props?: ({
175
+ size?: "sm" | "md" | "lg" | null | undefined;
176
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
177
+ type PasswordStrengthSize = VariantProps<typeof passwordStrengthTrackVariants>['size'];
178
+
179
+ export { MF_PASSWORD_STRENGTH_ESTIMATOR, PasswordStrength, checkPasswordRequirements, estimatePasswordStrength, meetsPasswordRequirement, passwordStrengthLevel, passwordStrengthTrackVariants };
180
+ export type { MfPasswordRequirement, MfPasswordRequirementCheck, MfPasswordStrengthEstimator, MfPasswordStrengthLevel, MfPasswordStrengthOptions, MfPasswordStrengthResult, MfPasswordStrengthScore, MfPasswordStrengthWarning, PasswordStrengthSize };
@@ -52,6 +52,7 @@ export * from '@mesgflow/ui-kit/otp-input';
52
52
  export * from '@mesgflow/ui-kit/page-header';
53
53
  export * from '@mesgflow/ui-kit/pagination';
54
54
  export * from '@mesgflow/ui-kit/password-input';
55
+ export * from '@mesgflow/ui-kit/password-strength';
55
56
  export * from '@mesgflow/ui-kit/popover';
56
57
  export * from '@mesgflow/ui-kit/progress';
57
58
  export * from '@mesgflow/ui-kit/qr-code';