@mesgflow/ui-kit 0.7.0 → 0.9.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.
Files changed (115) hide show
  1. package/fesm2022/mesgflow-ui-kit-accordion.mjs +6 -6
  2. package/fesm2022/mesgflow-ui-kit-agenda.mjs +3 -3
  3. package/fesm2022/mesgflow-ui-kit-alert.mjs +3 -3
  4. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +3 -3
  5. package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +3 -3
  6. package/fesm2022/mesgflow-ui-kit-avatar.mjs +3 -3
  7. package/fesm2022/mesgflow-ui-kit-badge.mjs +3 -3
  8. package/fesm2022/mesgflow-ui-kit-banner.mjs +3 -3
  9. package/fesm2022/mesgflow-ui-kit-blocks.mjs +16 -16
  10. package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -1
  11. package/fesm2022/mesgflow-ui-kit-box-input.mjs +3 -3
  12. package/fesm2022/mesgflow-ui-kit-brand.mjs +3 -3
  13. package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +3 -3
  14. package/fesm2022/mesgflow-ui-kit-button-group.mjs +3 -3
  15. package/fesm2022/mesgflow-ui-kit-button.mjs +3 -3
  16. package/fesm2022/mesgflow-ui-kit-card.mjs +12 -12
  17. package/fesm2022/mesgflow-ui-kit-carousel.mjs +3 -3
  18. package/fesm2022/mesgflow-ui-kit-chart.mjs +12 -12
  19. package/fesm2022/mesgflow-ui-kit-checkbox.mjs +3 -3
  20. package/fesm2022/mesgflow-ui-kit-chip.mjs +3 -3
  21. package/fesm2022/mesgflow-ui-kit-code-block.mjs +3 -3
  22. package/fesm2022/mesgflow-ui-kit-collapsible.mjs +9 -9
  23. package/fesm2022/mesgflow-ui-kit-color-picker.mjs +3 -3
  24. package/fesm2022/mesgflow-ui-kit-combobox.mjs +4 -4
  25. package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
  26. package/fesm2022/mesgflow-ui-kit-command.mjs +15 -16
  27. package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -1
  28. package/fesm2022/mesgflow-ui-kit-context-menu.mjs +3 -3
  29. package/fesm2022/mesgflow-ui-kit-copy-button.mjs +6 -6
  30. package/fesm2022/mesgflow-ui-kit-core.mjs +9 -4
  31. package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
  32. package/fesm2022/mesgflow-ui-kit-countdown.mjs +3 -3
  33. package/fesm2022/mesgflow-ui-kit-date-picker.mjs +12 -12
  34. package/fesm2022/mesgflow-ui-kit-description-list.mjs +3 -3
  35. package/fesm2022/mesgflow-ui-kit-dialog.mjs +197 -34
  36. package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
  37. package/fesm2022/mesgflow-ui-kit-divider.mjs +3 -3
  38. package/fesm2022/mesgflow-ui-kit-drawer.mjs +4 -4
  39. package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -1
  40. package/fesm2022/mesgflow-ui-kit-dropzone.mjs +3 -3
  41. package/fesm2022/mesgflow-ui-kit-empty-state.mjs +3 -3
  42. package/fesm2022/mesgflow-ui-kit-field.mjs +38 -7
  43. package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
  44. package/fesm2022/mesgflow-ui-kit-file-upload.mjs +3 -3
  45. package/fesm2022/mesgflow-ui-kit-hover-card.mjs +6 -6
  46. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +4 -0
  47. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
  48. package/fesm2022/mesgflow-ui-kit-icon.mjs +3 -3
  49. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +3 -3
  50. package/fesm2022/mesgflow-ui-kit-input.mjs +21 -19
  51. package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
  52. package/fesm2022/mesgflow-ui-kit-kbd.mjs +3 -3
  53. package/fesm2022/mesgflow-ui-kit-lightbox.mjs +9 -9
  54. package/fesm2022/mesgflow-ui-kit-link.mjs +3 -3
  55. package/fesm2022/mesgflow-ui-kit-listbox.mjs +3 -3
  56. package/fesm2022/mesgflow-ui-kit-mention.mjs +6 -6
  57. package/fesm2022/mesgflow-ui-kit-menu.mjs +12 -12
  58. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +3 -3
  59. package/fesm2022/mesgflow-ui-kit-notification-center.mjs +3 -3
  60. package/fesm2022/mesgflow-ui-kit-number-input.mjs +3 -3
  61. package/fesm2022/mesgflow-ui-kit-otp-input.mjs +3 -3
  62. package/fesm2022/mesgflow-ui-kit-page-header.mjs +6 -6
  63. package/fesm2022/mesgflow-ui-kit-pagination.mjs +3 -3
  64. package/fesm2022/mesgflow-ui-kit-password-input.mjs +47 -71
  65. package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
  66. package/fesm2022/mesgflow-ui-kit-popover.mjs +3 -3
  67. package/fesm2022/mesgflow-ui-kit-progress.mjs +3 -3
  68. package/fesm2022/mesgflow-ui-kit-qr-code.mjs +766 -0
  69. package/fesm2022/mesgflow-ui-kit-qr-code.mjs.map +1 -0
  70. package/fesm2022/mesgflow-ui-kit-radio.mjs +6 -6
  71. package/fesm2022/mesgflow-ui-kit-rating.mjs +3 -3
  72. package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +3 -3
  73. package/fesm2022/mesgflow-ui-kit-search-input.mjs +3 -3
  74. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +34 -22
  75. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
  76. package/fesm2022/mesgflow-ui-kit-select.mjs +3 -3
  77. package/fesm2022/mesgflow-ui-kit-sidebar.mjs +12 -12
  78. package/fesm2022/mesgflow-ui-kit-skeleton.mjs +3 -3
  79. package/fesm2022/mesgflow-ui-kit-slider.mjs +6 -6
  80. package/fesm2022/mesgflow-ui-kit-sortable.mjs +6 -6
  81. package/fesm2022/mesgflow-ui-kit-spinner.mjs +3 -3
  82. package/fesm2022/mesgflow-ui-kit-split-button.mjs +3 -3
  83. package/fesm2022/mesgflow-ui-kit-splitter.mjs +12 -12
  84. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +3 -3
  85. package/fesm2022/mesgflow-ui-kit-stepper.mjs +6 -6
  86. package/fesm2022/mesgflow-ui-kit-switch.mjs +3 -3
  87. package/fesm2022/mesgflow-ui-kit-table.mjs +21 -21
  88. package/fesm2022/mesgflow-ui-kit-tabs.mjs +27 -27
  89. package/fesm2022/mesgflow-ui-kit-tag-input.mjs +3 -3
  90. package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +3 -3
  91. package/fesm2022/mesgflow-ui-kit-theming.mjs +3 -3
  92. package/fesm2022/mesgflow-ui-kit-time-picker.mjs +3 -3
  93. package/fesm2022/mesgflow-ui-kit-timeline.mjs +3 -3
  94. package/fesm2022/mesgflow-ui-kit-toast.mjs +6 -6
  95. package/fesm2022/mesgflow-ui-kit-toggle.mjs +9 -9
  96. package/fesm2022/mesgflow-ui-kit-toolbar.mjs +9 -9
  97. package/fesm2022/mesgflow-ui-kit-tooltip.mjs +3 -3
  98. package/fesm2022/mesgflow-ui-kit-tour.mjs +9 -9
  99. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +3 -3
  100. package/fesm2022/mesgflow-ui-kit-tree-select.mjs +3 -3
  101. package/fesm2022/mesgflow-ui-kit-tree.mjs +3 -3
  102. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +3 -3
  103. package/fesm2022/mesgflow-ui-kit.mjs +1 -0
  104. package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
  105. package/package.json +5 -1
  106. package/tokens.json +1583 -1583
  107. package/types/mesgflow-ui-kit-command.d.ts +2 -2
  108. package/types/mesgflow-ui-kit-core.d.ts +10 -2
  109. package/types/mesgflow-ui-kit-dialog.d.ts +97 -12
  110. package/types/mesgflow-ui-kit-field.d.ts +24 -2
  111. package/types/mesgflow-ui-kit-input.d.ts +2 -0
  112. package/types/mesgflow-ui-kit-password-input.d.ts +43 -6
  113. package/types/mesgflow-ui-kit-qr-code.d.ts +160 -0
  114. package/types/mesgflow-ui-kit-segmented-control.d.ts +19 -11
  115. package/types/mesgflow-ui-kit.d.ts +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mesgflow-ui-kit-qr-code.mjs","sources":["../../../projects/ui-kit/qr-code/qr-code-geometry.ts","../../../projects/ui-kit/qr-code/qr-encoder.ts","../../../projects/ui-kit/qr-code/qr-code.ts","../../../projects/ui-kit/qr-code/qr-code.html","../../../projects/ui-kit/qr-code/mesgflow-ui-kit-qr-code.ts"],"sourcesContent":["import type { QrMatrix } from './qr-encoder';\r\n\r\n/** Veri modüllerinin çizim biçimi. */\r\nexport type QrModuleShape = 'square' | 'rounded' | 'dots';\r\n/** Üç köşedeki konum (finder) desenlerinin biçimi. */\r\nexport type QrFinderShape = 'square' | 'rounded';\r\n\r\nexport interface QrGeometry {\r\n /** Modül cinsinden QR kenarı (sessiz bölge hariç). */\r\n readonly size: number;\r\n /** Veri + timing + alignment modülleri — tek `<path>` (tek path = komşu modüller arasında AA dikişi yok). */\r\n readonly dataPath: string;\r\n /** Finder dış halkaları (`fill-rule=\"evenodd\"`). */\r\n readonly finderOuterPath: string;\r\n /** Finder iç 3×3 gözleri. */\r\n readonly finderInnerPath: string;\r\n /** Logo için boşaltılan kare (modül); logo yoksa 0. */\r\n readonly excavated: number;\r\n}\r\n\r\nconst FINDER = 7;\r\n\r\n/** SVG yolu sayıları — gereksiz ondalıkları at, çıktıyı kısa tut. */\r\nfunction n(value: number): string {\r\n return String(Math.round(value * 1000) / 1000);\r\n}\r\n\r\nfunction isFinder(x: number, y: number, size: number): boolean {\r\n return (\r\n (x < FINDER && y < FINDER) ||\r\n (x >= size - FINDER && y < FINDER) ||\r\n (x < FINDER && y >= size - FINDER)\r\n );\r\n}\r\n\r\n/** Saat yönünde yuvarlatılmış dikdörtgen alt yolu. */\r\nfunction roundedRect(x: number, y: number, w: number, h: number, r: number): string {\r\n if (r <= 0) return `M${n(x)} ${n(y)}h${n(w)}v${n(h)}h${n(-w)}z`;\r\n return (\r\n `M${n(x + r)} ${n(y)}h${n(w - 2 * r)}a${n(r)} ${n(r)} 0 0 1 ${n(r)} ${n(r)}` +\r\n `v${n(h - 2 * r)}a${n(r)} ${n(r)} 0 0 1 ${n(-r)} ${n(r)}` +\r\n `h${n(-(w - 2 * r))}a${n(r)} ${n(r)} 0 0 1 ${n(-r)} ${n(-r)}` +\r\n `v${n(-(h - 2 * r))}a${n(r)} ${n(r)} 0 0 1 ${n(r)} ${n(-r)}z`\r\n );\r\n}\r\n\r\n/**\r\n * Köşe başına yarıçaplı tek modül — bir köşe yalnızca o köşeye bakan İKİ komşu\r\n * de açıksa yuvarlanır. Sonuç: yan yana modüller kesintisiz \"akışkan\" bloklar,\r\n * yalnız modüller daire olur.\r\n */\r\nfunction blobModule(x: number, y: number, tl: number, tr: number, br: number, bl: number): string {\r\n let d = `M${n(x + tl)} ${n(y)}H${n(x + 1 - tr)}`;\r\n if (tr) d += `a${n(tr)} ${n(tr)} 0 0 1 ${n(tr)} ${n(tr)}`;\r\n d += `V${n(y + 1 - br)}`;\r\n if (br) d += `a${n(br)} ${n(br)} 0 0 1 ${n(-br)} ${n(br)}`;\r\n d += `H${n(x + bl)}`;\r\n if (bl) d += `a${n(bl)} ${n(bl)} 0 0 1 ${n(-bl)} ${n(-bl)}`;\r\n d += `V${n(y + tl)}`;\r\n if (tl) d += `a${n(tl)} ${n(tl)} 0 0 1 ${n(tl)} ${n(-tl)}`;\r\n return `${d}z`;\r\n}\r\n\r\nfunction dot(x: number, y: number, r: number): string {\r\n return `M${n(x + 0.5 - r)} ${n(y + 0.5)}a${n(r)} ${n(r)} 0 1 0 ${n(2 * r)} 0a${n(r)} ${n(r)} 0 1 0 ${n(-2 * r)} 0z`;\r\n}\r\n\r\n/**\r\n * Logo için merkezde boşaltılacak kare kenarı (modül). QR kenarıyla aynı\r\n * paritede (tek) tutulur ki kare tam ortalansın; oran 0–0.3 arası kırpılır\r\n * (H seviyesi ~%30 hasarı kurtarır — alan olarak 0.3² ≈ %9, güvenli pay).\r\n */\r\nexport function excavationSize(size: number, ratio: number): number {\r\n const clamped = Math.min(0.3, Math.max(0, ratio));\r\n if (clamped === 0) return 0;\r\n let side = Math.round(size * clamped);\r\n if (side % 2 !== size % 2) side += 1;\r\n return Math.min(side, size - 2 * (FINDER + 1));\r\n}\r\n\r\n/** Kodlanmış matrisi saf SVG yol dizelerine çevirir — DOM'suz, `computed()` içinde çağrılır. */\r\nexport function qrGeometry(\r\n matrix: QrMatrix,\r\n shape: QrModuleShape,\r\n finder: QrFinderShape,\r\n logoRatio: number,\r\n): QrGeometry {\r\n const size = matrix.size;\r\n const excavated = excavationSize(size, logoRatio);\r\n const start = (size - excavated) / 2;\r\n const inLogo = (x: number, y: number): boolean =>\r\n excavated > 0 && x >= start && x < start + excavated && y >= start && y < start + excavated;\r\n\r\n const drawn = (x: number, y: number): boolean =>\r\n x >= 0 &&\r\n y >= 0 &&\r\n x < size &&\r\n y < size &&\r\n matrix.modules[y][x] &&\r\n !isFinder(x, y, size) &&\r\n !inLogo(x, y);\r\n\r\n let dataPath = '';\r\n for (let y = 0; y < size; y++) {\r\n if (shape === 'square') {\r\n // Yatay koşuları birleştir — path ~%60 kısalır.\r\n for (let x = 0; x < size;) {\r\n if (!drawn(x, y)) {\r\n x++;\r\n continue;\r\n }\r\n let run = 1;\r\n while (drawn(x + run, y)) run++;\r\n dataPath += `M${x} ${y}h${run}v1h${-run}z`;\r\n x += run;\r\n }\r\n continue;\r\n }\r\n for (let x = 0; x < size; x++) {\r\n if (!drawn(x, y)) continue;\r\n if (shape === 'dots') {\r\n dataPath += dot(x, y, 0.42);\r\n continue;\r\n }\r\n const up = drawn(x, y - 1);\r\n const down = drawn(x, y + 1);\r\n const left = drawn(x - 1, y);\r\n const right = drawn(x + 1, y);\r\n const r = 0.5;\r\n dataPath += blobModule(\r\n x,\r\n y,\r\n !up && !left ? r : 0,\r\n !up && !right ? r : 0,\r\n !down && !right ? r : 0,\r\n !down && !left ? r : 0,\r\n );\r\n }\r\n }\r\n\r\n const rounded = finder === 'rounded';\r\n const origins: [number, number][] = [\r\n [0, 0],\r\n [size - FINDER, 0],\r\n [0, size - FINDER],\r\n ];\r\n let finderOuterPath = '';\r\n let finderInnerPath = '';\r\n for (const [x, y] of origins) {\r\n finderOuterPath +=\r\n roundedRect(x, y, 7, 7, rounded ? 2 : 0) + roundedRect(x + 1, y + 1, 5, 5, rounded ? 1.4 : 0);\r\n finderInnerPath += roundedRect(x + 2, y + 2, 3, 3, rounded ? 0.9 : 0);\r\n }\r\n\r\n return { size, dataPath, finderOuterPath, finderInnerPath, excavated };\r\n}\r\n\r\nexport interface QrSvgStringOptions {\r\n /** Sessiz bölge (modül), varsayılan 4 — baskı/dışa aktarım için standart. */\r\n margin?: number;\r\n /** Piksel kenar, varsayılan 256. */\r\n pixelSize?: number;\r\n foreground?: string;\r\n background?: string;\r\n}\r\n\r\n/** Bağımsız bir `<svg>` belgesi (indirme/paylaşım için) — logo katmanı HTML olduğu için dahil DEĞİL. */\r\nexport function qrSvgString(geometry: QrGeometry, options: QrSvgStringOptions = {}): string {\r\n const margin = options.margin ?? 4;\r\n const px = options.pixelSize ?? 256;\r\n const fg = escapeAttr(options.foreground ?? '#000000');\r\n const bg = escapeAttr(options.background ?? '#ffffff');\r\n const total = geometry.size + margin * 2;\r\n return (\r\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${px}\" height=\"${px}\" viewBox=\"${-margin} ${-margin} ${total} ${total}\">` +\r\n `<rect x=\"${-margin}\" y=\"${-margin}\" width=\"${total}\" height=\"${total}\" fill=\"${bg}\"/>` +\r\n `<path d=\"${geometry.finderOuterPath}\" fill=\"${fg}\" fill-rule=\"evenodd\"/>` +\r\n `<path d=\"${geometry.finderInnerPath}\" fill=\"${fg}\"/>` +\r\n `<path d=\"${geometry.dataPath}\" fill=\"${fg}\"/>` +\r\n `</svg>`\r\n );\r\n}\r\n\r\nfunction escapeAttr(value: string): string {\r\n return value.replace(/[&\"<>]/g, (c) => `&#${c.charCodeAt(0)};`);\r\n}\r\n","/*\r\n * QR Code encoder — Project Nayuki \"QR Code generator library\" (TypeScript)\r\n * algoritmasının kite ait, tipli ve sadeleştirilmiş portu.\r\n *\r\n * Copyright (c) Project Nayuki. (MIT License)\r\n * https://www.nayuki.io/page/qr-code-generator-library\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\r\n * this software and associated documentation files (the \"Software\"), to deal in\r\n * the Software without restriction, including without limitation the rights to\r\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r\n * the Software, and to permit persons to whom the Software is furnished to do so,\r\n * subject to the following conditions:\r\n * - The above copyright notice and this permission notice shall be included in\r\n * all copies or substantial portions of the Software.\r\n * - The Software is provided \"as is\", without warranty of any kind, express or\r\n * implied, including but not limited to the warranties of merchantability,\r\n * fitness for a particular purpose and noninfringement. In no event shall the\r\n * authors or copyright holders be liable for any claim, damages or other\r\n * liability, whether in an action of contract, tort or otherwise, arising from,\r\n * out of or in connection with the Software or the use or other dealings in the\r\n * Software.\r\n *\r\n * Neden vendor (bağımlılık değil): kitin her runtime kütüphanesi bir peerDependency\r\n * olmak zorunda ve `ng add` bunu HER tüketiciye kurar — ~5 KB'lık saf bir algoritma\r\n * için yeni bir peer eklemek yerine kodlayıcı burada yaşıyor. DOM'a dokunmaz (SSR güvenli).\r\n */\r\n\r\n/** Hata düzeltme seviyesi — kurtarılabilir hasar oranı: L ~%7, M ~%15, Q ~%25, H ~%30. */\r\nexport type QrEcc = 'L' | 'M' | 'Q' | 'H';\r\n\r\nexport interface QrEncodeOptions {\r\n /** Varsayılan `'M'`. */\r\n ecc?: QrEcc;\r\n /** 1–40, varsayılan 1. */\r\n minVersion?: number;\r\n /** 1–40, varsayılan 40. */\r\n maxVersion?: number;\r\n /**\r\n * Seçilen sürüm (boyut) büyümeden daha yüksek bir hata düzeltme seviyesi sığıyorsa\r\n * onu kullanır — aynı boyutta bedava dayanıklılık. Varsayılan `true`.\r\n */\r\n boostEcc?: boolean;\r\n}\r\n\r\nexport interface QrMatrix {\r\n /** Modül cinsinden kenar (21–177) — sessiz bölge (quiet zone) HARİÇ. */\r\n readonly size: number;\r\n /** 1–40. */\r\n readonly version: number;\r\n /** Gerçekte kullanılan seviye (`boostEcc` ile istenenden yüksek olabilir). */\r\n readonly ecc: QrEcc;\r\n readonly mask: number;\r\n /** `modules[y][x]` — `true` koyu modül. */\r\n readonly modules: readonly (readonly boolean[])[];\r\n /** `isFunction[y][x]` — finder/timing/alignment/format/version modülü (veri değil). */\r\n readonly isFunction: readonly (readonly boolean[])[];\r\n}\r\n\r\n/** İçerik, `maxVersion` ve seçilen `ecc` ile sığmıyor. */\r\nexport class QrCapacityError extends Error {\r\n constructor() {\r\n super('QR code data too long for the requested version / error correction level');\r\n this.name = 'QrCapacityError';\r\n }\r\n}\r\n\r\nconst ECC_ORDINAL: Record<QrEcc, number> = { L: 0, M: 1, Q: 2, H: 3 };\r\nconst ECC_FORMAT_BITS: Record<QrEcc, number> = { L: 1, M: 0, Q: 3, H: 2 };\r\n\r\n// prettier-ignore\r\nconst ECC_CODEWORDS_PER_BLOCK: readonly (readonly number[])[] = [\r\n // Sürüm: 0 (dolgu), 1 … 40\r\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // L\r\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28], // M\r\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // Q\r\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30], // H\r\n];\r\n\r\n// prettier-ignore\r\nconst NUM_ERROR_CORRECTION_BLOCKS: readonly (readonly number[])[] = [\r\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25], // L\r\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49], // M\r\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68], // Q\r\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81], // H\r\n];\r\n\r\nconst PENALTY_N1 = 3;\r\nconst PENALTY_N2 = 3;\r\nconst PENALTY_N3 = 40;\r\nconst PENALTY_N4 = 10;\r\n\r\nconst ALPHANUMERIC_CHARSET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:';\r\nconst NUMERIC = /^[0-9]*$/;\r\nconst ALPHANUMERIC = /^[A-Z0-9 $%*+./:-]*$/;\r\n\r\ninterface Mode {\r\n readonly bits: number;\r\n /** Karakter sayacı genişliği: sürüm 1–9, 10–26, 27–40. */\r\n readonly countBits: readonly [number, number, number];\r\n}\r\nconst MODE_NUMERIC: Mode = { bits: 0x1, countBits: [10, 12, 14] };\r\nconst MODE_ALPHANUMERIC: Mode = { bits: 0x2, countBits: [9, 11, 13] };\r\nconst MODE_BYTE: Mode = { bits: 0x4, countBits: [8, 16, 16] };\r\n\r\ninterface Segment {\r\n readonly mode: Mode;\r\n readonly numChars: number;\r\n readonly data: readonly number[]; // bit dizisi\r\n}\r\n\r\nfunction appendBits(value: number, length: number, out: number[]): void {\r\n for (let i = length - 1; i >= 0; i--) out.push((value >>> i) & 1);\r\n}\r\n\r\nfunction getBit(value: number, i: number): boolean {\r\n return ((value >>> i) & 1) !== 0;\r\n}\r\n\r\nfunction charCountBits(mode: Mode, version: number): number {\r\n return mode.countBits[Math.floor((version + 7) / 17)];\r\n}\r\n\r\nfunction makeSegment(data: string | Uint8Array): Segment | null {\r\n if (typeof data !== 'string') return byteSegment(data);\r\n if (data === '') return null;\r\n if (NUMERIC.test(data)) {\r\n const bits: number[] = [];\r\n for (let i = 0; i < data.length; i += 3) {\r\n const chunk = data.substring(i, i + 3);\r\n appendBits(Number.parseInt(chunk, 10), chunk.length * 3 + 1, bits);\r\n }\r\n return { mode: MODE_NUMERIC, numChars: data.length, data: bits };\r\n }\r\n if (ALPHANUMERIC.test(data)) {\r\n const bits: number[] = [];\r\n let i = 0;\r\n for (; i + 2 <= data.length; i += 2) {\r\n const pair =\r\n ALPHANUMERIC_CHARSET.indexOf(data.charAt(i)) * 45 +\r\n ALPHANUMERIC_CHARSET.indexOf(data.charAt(i + 1));\r\n appendBits(pair, 11, bits);\r\n }\r\n if (i < data.length) appendBits(ALPHANUMERIC_CHARSET.indexOf(data.charAt(i)), 6, bits);\r\n return { mode: MODE_ALPHANUMERIC, numChars: data.length, data: bits };\r\n }\r\n return byteSegment(new TextEncoder().encode(data));\r\n}\r\n\r\nfunction byteSegment(bytes: Uint8Array): Segment {\r\n const bits: number[] = [];\r\n for (const b of bytes) appendBits(b, 8, bits);\r\n return { mode: MODE_BYTE, numChars: bytes.length, data: bits };\r\n}\r\n\r\nfunction totalBits(segments: readonly Segment[], version: number): number {\r\n let result = 0;\r\n for (const seg of segments) {\r\n const ccBits = charCountBits(seg.mode, version);\r\n if (seg.numChars >= 1 << ccBits) return Number.POSITIVE_INFINITY;\r\n result += 4 + ccBits + seg.data.length;\r\n }\r\n return result;\r\n}\r\n\r\nfunction numRawDataModules(version: number): number {\r\n let result = (16 * version + 128) * version + 64;\r\n if (version >= 2) {\r\n const numAlign = Math.floor(version / 7) + 2;\r\n result -= (25 * numAlign - 10) * numAlign - 55;\r\n if (version >= 7) result -= 36;\r\n }\r\n return result;\r\n}\r\n\r\nfunction numDataCodewords(version: number, ecc: QrEcc): number {\r\n const o = ECC_ORDINAL[ecc];\r\n return (\r\n Math.floor(numRawDataModules(version) / 8) -\r\n ECC_CODEWORDS_PER_BLOCK[o][version] * NUM_ERROR_CORRECTION_BLOCKS[o][version]\r\n );\r\n}\r\n\r\n// --- Reed–Solomon (GF(2^8), indirgeme polinomu 0x11D) ---\r\n\r\nfunction rsMultiply(x: number, y: number): number {\r\n let z = 0;\r\n for (let i = 7; i >= 0; i--) {\r\n z = (z << 1) ^ ((z >>> 7) * 0x11d);\r\n z ^= ((y >>> i) & 1) * x;\r\n }\r\n return z;\r\n}\r\n\r\nfunction rsDivisor(degree: number): number[] {\r\n const result = new Array<number>(degree).fill(0);\r\n result[degree - 1] = 1;\r\n let root = 1;\r\n for (let i = 0; i < degree; i++) {\r\n for (let j = 0; j < result.length; j++) {\r\n result[j] = rsMultiply(result[j], root);\r\n if (j + 1 < result.length) result[j] ^= result[j + 1];\r\n }\r\n root = rsMultiply(root, 0x02);\r\n }\r\n return result;\r\n}\r\n\r\nfunction rsRemainder(data: readonly number[], divisor: readonly number[]): number[] {\r\n const result = divisor.map(() => 0);\r\n for (const b of data) {\r\n const factor = b ^ (result.shift() as number);\r\n result.push(0);\r\n divisor.forEach((coef, i) => (result[i] ^= rsMultiply(coef, factor)));\r\n }\r\n return result;\r\n}\r\n\r\n// --- Matris ---\r\n\r\nclass Grid {\r\n readonly size: number;\r\n readonly modules: boolean[][];\r\n readonly isFunction: boolean[][];\r\n\r\n constructor(readonly version: number) {\r\n this.size = version * 4 + 17;\r\n this.modules = Array.from({ length: this.size }, () =>\r\n new Array<boolean>(this.size).fill(false),\r\n );\r\n this.isFunction = Array.from({ length: this.size }, () =>\r\n new Array<boolean>(this.size).fill(false),\r\n );\r\n }\r\n\r\n setFunction(x: number, y: number, dark: boolean): void {\r\n this.modules[y][x] = dark;\r\n this.isFunction[y][x] = true;\r\n }\r\n\r\n drawFunctionPatterns(ecc: QrEcc): void {\r\n for (let i = 0; i < this.size; i++) {\r\n this.setFunction(6, i, i % 2 === 0);\r\n this.setFunction(i, 6, i % 2 === 0);\r\n }\r\n this.drawFinder(3, 3);\r\n this.drawFinder(this.size - 4, 3);\r\n this.drawFinder(3, this.size - 4);\r\n\r\n const align = this.alignmentPositions();\r\n const n = align.length;\r\n for (let i = 0; i < n; i++) {\r\n for (let j = 0; j < n; j++) {\r\n const corner = (i === 0 && j === 0) || (i === 0 && j === n - 1) || (i === n - 1 && j === 0);\r\n if (!corner) this.drawAlignment(align[i], align[j]);\r\n }\r\n }\r\n this.drawFormatBits(ecc, 0); // yer tutucu — maske seçildikten sonra üzerine yazılır\r\n this.drawVersion();\r\n }\r\n\r\n private drawFinder(cx: number, cy: number): void {\r\n for (let dy = -4; dy <= 4; dy++) {\r\n for (let dx = -4; dx <= 4; dx++) {\r\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\r\n const x = cx + dx;\r\n const y = cy + dy;\r\n if (x >= 0 && x < this.size && y >= 0 && y < this.size) {\r\n this.setFunction(x, y, dist !== 2 && dist !== 4);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private drawAlignment(cx: number, cy: number): void {\r\n for (let dy = -2; dy <= 2; dy++) {\r\n for (let dx = -2; dx <= 2; dx++) {\r\n this.setFunction(cx + dx, cy + dy, Math.max(Math.abs(dx), Math.abs(dy)) !== 1);\r\n }\r\n }\r\n }\r\n\r\n private alignmentPositions(): number[] {\r\n if (this.version === 1) return [];\r\n const numAlign = Math.floor(this.version / 7) + 2;\r\n const step =\r\n this.version === 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\r\n const result = [6];\r\n for (let pos = this.size - 7; result.length < numAlign; pos -= step) result.splice(1, 0, pos);\r\n return result;\r\n }\r\n\r\n drawFormatBits(ecc: QrEcc, mask: number): void {\r\n const data = (ECC_FORMAT_BITS[ecc] << 3) | mask;\r\n let rem = data;\r\n for (let i = 0; i < 10; i++) rem = (rem << 1) ^ ((rem >>> 9) * 0x537);\r\n const bits = ((data << 10) | rem) ^ 0x5412;\r\n\r\n for (let i = 0; i <= 5; i++) this.setFunction(8, i, getBit(bits, i));\r\n this.setFunction(8, 7, getBit(bits, 6));\r\n this.setFunction(8, 8, getBit(bits, 7));\r\n this.setFunction(7, 8, getBit(bits, 8));\r\n for (let i = 9; i < 15; i++) this.setFunction(14 - i, 8, getBit(bits, i));\r\n\r\n for (let i = 0; i < 8; i++) this.setFunction(this.size - 1 - i, 8, getBit(bits, i));\r\n for (let i = 8; i < 15; i++) this.setFunction(8, this.size - 15 + i, getBit(bits, i));\r\n this.setFunction(8, this.size - 8, true); // her zaman koyu modül\r\n }\r\n\r\n private drawVersion(): void {\r\n if (this.version < 7) return;\r\n let rem = this.version;\r\n for (let i = 0; i < 12; i++) rem = (rem << 1) ^ ((rem >>> 11) * 0x1f25);\r\n const bits = (this.version << 12) | rem;\r\n for (let i = 0; i < 18; i++) {\r\n const dark = getBit(bits, i);\r\n const a = this.size - 11 + (i % 3);\r\n const b = Math.floor(i / 3);\r\n this.setFunction(a, b, dark);\r\n this.setFunction(b, a, dark);\r\n }\r\n }\r\n\r\n drawCodewords(codewords: readonly number[]): void {\r\n let i = 0;\r\n for (let right = this.size - 1; right >= 1; right -= 2) {\r\n if (right === 6) right = 5;\r\n for (let vert = 0; vert < this.size; vert++) {\r\n for (let j = 0; j < 2; j++) {\r\n const x = right - j;\r\n const upward = ((right + 1) & 2) === 0;\r\n const y = upward ? this.size - 1 - vert : vert;\r\n if (!this.isFunction[y][x] && i < codewords.length * 8) {\r\n this.modules[y][x] = getBit(codewords[i >>> 3], 7 - (i & 7));\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n applyMask(mask: number): void {\r\n for (let y = 0; y < this.size; y++) {\r\n for (let x = 0; x < this.size; x++) {\r\n if (!this.isFunction[y][x] && maskBit(mask, x, y)) {\r\n this.modules[y][x] = !this.modules[y][x];\r\n }\r\n }\r\n }\r\n }\r\n\r\n penalty(): number {\r\n let result = 0;\r\n const size = this.size;\r\n const m = this.modules;\r\n\r\n const line = (get: (i: number) => boolean): void => {\r\n let runColor = false;\r\n let run = 0;\r\n const history = [0, 0, 0, 0, 0, 0, 0];\r\n for (let i = 0; i < size; i++) {\r\n if (get(i) === runColor) {\r\n run++;\r\n if (run === 5) result += PENALTY_N1;\r\n else if (run > 5) result++;\r\n } else {\r\n this.addHistory(run, history);\r\n if (!runColor) result += this.countFinderLike(history) * PENALTY_N3;\r\n runColor = get(i);\r\n run = 1;\r\n }\r\n }\r\n if (runColor) {\r\n this.addHistory(run, history);\r\n run = 0;\r\n }\r\n run += size;\r\n this.addHistory(run, history);\r\n result += this.countFinderLike(history) * PENALTY_N3;\r\n };\r\n\r\n for (let y = 0; y < size; y++) line((x) => m[y][x]);\r\n for (let x = 0; x < size; x++) line((y) => m[y][x]);\r\n\r\n for (let y = 0; y < size - 1; y++) {\r\n for (let x = 0; x < size - 1; x++) {\r\n const c = m[y][x];\r\n if (c === m[y][x + 1] && c === m[y + 1][x] && c === m[y + 1][x + 1]) result += PENALTY_N2;\r\n }\r\n }\r\n\r\n let dark = 0;\r\n for (const row of m) for (const c of row) if (c) dark++;\r\n const total = size * size;\r\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\r\n result += k * PENALTY_N4;\r\n return result;\r\n }\r\n\r\n private countFinderLike(h: readonly number[]): number {\r\n const n = h[1];\r\n const core = n > 0 && h[2] === n && h[3] === n * 3 && h[4] === n && h[5] === n;\r\n return (\r\n (core && h[0] >= n * 4 && h[6] >= n ? 1 : 0) + (core && h[6] >= n * 4 && h[0] >= n ? 1 : 0)\r\n );\r\n }\r\n\r\n private addHistory(run: number, history: number[]): void {\r\n if (history[0] === 0) run += this.size; // ilk koşuya sanal açık sessiz bölge\r\n history.pop();\r\n history.unshift(run);\r\n }\r\n}\r\n\r\nfunction maskBit(mask: number, x: number, y: number): boolean {\r\n switch (mask) {\r\n case 0:\r\n return (x + y) % 2 === 0;\r\n case 1:\r\n return y % 2 === 0;\r\n case 2:\r\n return x % 3 === 0;\r\n case 3:\r\n return (x + y) % 3 === 0;\r\n case 4:\r\n return (Math.floor(x / 3) + Math.floor(y / 2)) % 2 === 0;\r\n case 5:\r\n return ((x * y) % 2) + ((x * y) % 3) === 0;\r\n case 6:\r\n return (((x * y) % 2) + ((x * y) % 3)) % 2 === 0;\r\n default:\r\n return (((x + y) % 2) + ((x * y) % 3)) % 2 === 0;\r\n }\r\n}\r\n\r\nfunction addEccAndInterleave(data: readonly number[], version: number, ecc: QrEcc): number[] {\r\n const o = ECC_ORDINAL[ecc];\r\n const numBlocks = NUM_ERROR_CORRECTION_BLOCKS[o][version];\r\n const blockEccLen = ECC_CODEWORDS_PER_BLOCK[o][version];\r\n const rawCodewords = Math.floor(numRawDataModules(version) / 8);\r\n const numShortBlocks = numBlocks - (rawCodewords % numBlocks);\r\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\r\n\r\n const divisor = rsDivisor(blockEccLen);\r\n const blocks: number[][] = [];\r\n for (let i = 0, k = 0; i < numBlocks; i++) {\r\n const dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\r\n k += dat.length;\r\n const eccBytes = rsRemainder(dat, divisor);\r\n if (i < numShortBlocks) dat.push(0);\r\n blocks.push(dat.concat(eccBytes));\r\n }\r\n\r\n const result: number[] = [];\r\n for (let i = 0; i < blocks[0].length; i++) {\r\n blocks.forEach((block, j) => {\r\n if (i !== shortBlockLen - blockEccLen || j >= numShortBlocks) result.push(block[i]);\r\n });\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Metni (UTF-8; tamamen rakamsa numeric, büyük harf/rakam/` $%*+-./:` ise\r\n * alphanumeric kip) ya da ham baytları bir QR matrisine kodlar. En küçük uygun\r\n * sürümü ve en düşük cezalı maskeyi seçer.\r\n *\r\n * @throws {QrCapacityError} içerik sığmıyorsa.\r\n */\r\nexport function encodeQr(data: string | Uint8Array, options: QrEncodeOptions = {}): QrMatrix {\r\n const minVersion = Math.max(1, Math.min(40, Math.floor(options.minVersion ?? 1)));\r\n const maxVersion = Math.max(minVersion, Math.min(40, Math.floor(options.maxVersion ?? 40)));\r\n let ecc: QrEcc = options.ecc ?? 'M';\r\n const boost = options.boostEcc ?? true;\r\n\r\n const segment = makeSegment(data);\r\n const segments = segment ? [segment] : [];\r\n\r\n let version = minVersion;\r\n let usedBits: number;\r\n for (; ; version++) {\r\n usedBits = totalBits(segments, version);\r\n if (usedBits <= numDataCodewords(version, ecc) * 8) break;\r\n if (version >= maxVersion) throw new QrCapacityError();\r\n }\r\n\r\n if (boost) {\r\n for (const higher of ['M', 'Q', 'H'] as const) {\r\n if (usedBits <= numDataCodewords(version, higher) * 8) ecc = higher;\r\n }\r\n }\r\n\r\n const bits: number[] = [];\r\n for (const seg of segments) {\r\n appendBits(seg.mode.bits, 4, bits);\r\n appendBits(seg.numChars, charCountBits(seg.mode, version), bits);\r\n for (const b of seg.data) bits.push(b);\r\n }\r\n const capacity = numDataCodewords(version, ecc) * 8;\r\n appendBits(0, Math.min(4, capacity - bits.length), bits); // sonlandırıcı\r\n appendBits(0, (8 - (bits.length % 8)) % 8, bits);\r\n for (let pad = 0xec; bits.length < capacity; pad ^= 0xec ^ 0x11) appendBits(pad, 8, bits);\r\n\r\n const codewords = new Array<number>(bits.length / 8).fill(0);\r\n bits.forEach((b, i) => (codewords[i >>> 3] |= b << (7 - (i & 7))));\r\n\r\n const grid = new Grid(version);\r\n grid.drawFunctionPatterns(ecc);\r\n grid.drawCodewords(addEccAndInterleave(codewords, version, ecc));\r\n\r\n let bestMask = 0;\r\n let minPenalty = Number.POSITIVE_INFINITY;\r\n for (let mask = 0; mask < 8; mask++) {\r\n grid.applyMask(mask);\r\n grid.drawFormatBits(ecc, mask);\r\n const penalty = grid.penalty();\r\n if (penalty < minPenalty) {\r\n bestMask = mask;\r\n minPenalty = penalty;\r\n }\r\n grid.applyMask(mask); // XOR — geri al\r\n }\r\n grid.applyMask(bestMask);\r\n grid.drawFormatBits(ecc, bestMask);\r\n\r\n return {\r\n size: grid.size,\r\n version,\r\n ecc,\r\n mask: bestMask,\r\n modules: grid.modules,\r\n isFunction: grid.isFunction,\r\n };\r\n}\r\n","import {\r\n Component,\r\n Directive,\r\n computed,\r\n contentChild,\r\n effect,\r\n inject,\r\n input,\r\n numberAttribute,\r\n output,\r\n} from '@angular/core';\r\nimport { cn, MF_QR_CODE_LABELS } from '@mesgflow/ui-kit/core';\r\nimport {\r\n qrGeometry,\r\n qrSvgString,\r\n type QrFinderShape,\r\n type QrModuleShape,\r\n type QrSvgStringOptions,\r\n} from './qr-code-geometry';\r\nimport { QrCapacityError, encodeQr, type QrEcc, type QrMatrix } from './qr-encoder';\r\n\r\n/**\r\n * `<mf-qr-code data=\"…\"><img mfQrCodeLogo src=\"logo.svg\" alt=\"\" /></mf-qr-code>` —\r\n * QR'ın ortasına yerleştirilen logo. Varlığı hata düzeltmeyi otomatik `H`'ye\r\n * yükseltir ve altındaki modülleri boşaltır. Dekoratif olduğu için `alt=\"\"`\r\n * önerilir — erişilebilir ad `mf-qr-code`'un kendi `aria-label`'ındadır.\r\n */\r\n@Directive({\r\n selector: '[mfQrCodeLogo]',\r\n host: { class: 'block max-h-full max-w-full object-contain' },\r\n})\r\nexport class QrCodeLogo {}\r\n\r\n/**\r\n * `<mf-qr-code data=\"https://mesgflow.dev\" />`\r\n *\r\n * Saf SVG QR kod — kodlayıcı kitin içinde (`qr-encoder.ts`, Nayuki portu), ek\r\n * bağımlılık yok; tüm geometri `computed()` ile üretilir, DOM API'si\r\n * kullanılmaz (SSR güvenli).\r\n *\r\n * - `shape`: `square` (klasik) · `rounded` (akışkan, komşu modüllerle birleşen) · `dots`.\r\n * - `finder`: köşe desenleri `square` / `rounded`.\r\n * - `ecc`: L/M/Q/H — logo varsa otomatik `H`. Aynı boyutta daha yüksek seviye\r\n * sığıyorsa zaten yükseltilir (`boostEcc`).\r\n * - `margin`: sessiz bölge (modül). Okuyucular ≥ 2 ister; baskı için 4.\r\n * - Logo: `[mfQrCodeLogo]` içerik (bkz. `QrCodeLogo`).\r\n * - `toSvgString()`: indirme/paylaşım için bağımsız SVG.\r\n *\r\n * Renk: varsayılan beyaz kart üstünde siyah modül — BİLİNÇLİ ham renk istisnası:\r\n * kameralar koyu-üstünde-açık (ters) QR'ı güvenilir okuyamaz, bu yüzden koyu temada\r\n * da açık kart kalır. `foreground`/`background` (herhangi bir CSS rengi, `var(--…)`\r\n * dahil) ile değiştirilir — satır içi stil olduğu için sınıf sırası çakışması yok;\r\n * modüller `currentColor`, logo kutusu zemini miras alır. Koyu modül / açık zemin ve\r\n * yeterli kontrast (≥ ~4:1) korunmalı.\r\n *\r\n * İçerik sığmazsa hata fırlatmaz: yerinde erişilebilir bir hata durumu çizer ve\r\n * `encoded` çıkışı `null` yayar.\r\n */\r\n@Component({\r\n selector: 'mf-qr-code',\r\n exportAs: 'mfQrCode',\r\n host: {\r\n role: 'img',\r\n '[attr.aria-label]': 'effectiveAriaLabel()',\r\n '[class]': 'hostClasses()',\r\n '[style.width.px]': 'size()',\r\n '[style.height.px]': 'size()',\r\n '[style.color]': \"matrix() ? (foreground() ?? '#000') : null\",\r\n '[style.background-color]': \"matrix() ? (background() ?? '#fff') : null\",\r\n },\r\n templateUrl: './qr-code.html',\r\n})\r\nexport class QrCode {\r\n /** Kodlanacak içerik (URL, metin, `WIFI:…`, `mailto:` vb.). */\r\n readonly data = input.required<string>();\r\n /** Piksel kenar (sessiz bölge dahil). */\r\n readonly size = input(160, { transform: numberAttribute });\r\n readonly ecc = input<QrEcc>('M');\r\n /** Sessiz bölge, modül cinsinden. */\r\n readonly margin = input(2, { transform: numberAttribute });\r\n readonly shape = input<QrModuleShape>('square');\r\n readonly finder = input<QrFinderShape>('square');\r\n /** Logo karesinin QR kenarına oranı (0–0.3); yalnızca `[mfQrCodeLogo]` varken etkili. */\r\n readonly logoSize = input(0.22, { transform: numberAttribute });\r\n /** Modül rengi (CSS rengi). Verilmezse siyah. */\r\n readonly foreground = input<string>();\r\n /** Zemin rengi (CSS rengi). Verilmezse beyaz. */\r\n readonly background = input<string>();\r\n /** `role=\"img\"` erişilebilir adı — verilmezse `MF_QR_CODE_LABELS.ariaLabel`. İçeriği anlatan bir ad önerilir. */\r\n readonly ariaLabel = input<string>();\r\n\r\n /** Her yeniden kodlamada matris (hata durumunda `null`). */\r\n readonly encoded = output<QrMatrix | null>();\r\n\r\n private readonly labels = inject(MF_QR_CODE_LABELS);\r\n private readonly logo = contentChild(QrCodeLogo);\r\n protected readonly hasLogo = computed(() => !!this.logo());\r\n\r\n protected readonly effectiveEcc = computed<QrEcc>(() => (this.hasLogo() ? 'H' : this.ecc()));\r\n\r\n protected readonly matrix = computed<QrMatrix | null>(() => {\r\n try {\r\n return encodeQr(this.data(), { ecc: this.effectiveEcc() });\r\n } catch (error) {\r\n if (error instanceof QrCapacityError) return null;\r\n throw error;\r\n }\r\n });\r\n\r\n protected readonly geometry = computed(() => {\r\n const matrix = this.matrix();\r\n if (!matrix) return null;\r\n return qrGeometry(matrix, this.shape(), this.finder(), this.hasLogo() ? this.logoSize() : 0);\r\n });\r\n\r\n protected readonly quietZone = computed(() => Math.max(0, this.margin()));\r\n protected readonly viewBox = computed(() => {\r\n const g = this.geometry();\r\n if (!g) return '0 0 1 1';\r\n const m = this.quietZone();\r\n const total = g.size + m * 2;\r\n return `${-m} ${-m} ${total} ${total}`;\r\n });\r\n\r\n /** Logo kutusunun piksel kenarı — boşaltılan karenin ekrandaki karşılığı. */\r\n protected readonly logoBoxPx = computed(() => {\r\n const g = this.geometry();\r\n if (!g || !g.excavated) return 0;\r\n return (g.excavated / (g.size + this.quietZone() * 2)) * this.size();\r\n });\r\n\r\n protected readonly crisp = computed(() => this.shape() === 'square');\r\n\r\n protected readonly effectiveAriaLabel = computed(() =>\r\n this.matrix() ? (this.ariaLabel() ?? this.labels().ariaLabel) : this.labels().error,\r\n );\r\n\r\n protected readonly hostClasses = computed(() =>\r\n cn(\r\n 'relative inline-flex shrink-0 items-center justify-center overflow-hidden rounded-lg',\r\n this.matrix() ? '' : 'bg-danger-tint text-danger-tint-fg',\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => this.encoded.emit(this.matrix()));\r\n }\r\n\r\n /**\r\n * Bağımsız SVG belgesi — logo katmanı dahil DEĞİL. İçerik sığmıyorsa `null`.\r\n * Renkler verilmezse `foreground`/`background` girdileri (onlar da yoksa siyah/beyaz);\r\n * `var(--…)` gibi bağlama bağlı değerler dışa aktarımda çözülmez — somut renk geçin.\r\n */\r\n toSvgString(options?: QrSvgStringOptions): string | null {\r\n const g = this.geometry();\r\n if (!g) return null;\r\n return qrSvgString(g, {\r\n margin: this.quietZone(),\r\n foreground: this.foreground(),\r\n background: this.background(),\r\n ...options,\r\n });\r\n }\r\n}\r\n","@if (geometry(); as g) {\r\n <svg\r\n class=\"block h-full w-full\"\r\n [attr.viewBox]=\"viewBox()\"\r\n [attr.shape-rendering]=\"crisp() ? 'crispEdges' : 'geometricPrecision'\"\r\n aria-hidden=\"true\"\r\n focusable=\"false\"\r\n >\r\n <path data-part=\"finder\" fill=\"currentColor\" fill-rule=\"evenodd\" [attr.d]=\"g.finderOuterPath\" />\r\n <path data-part=\"finder\" fill=\"currentColor\" [attr.d]=\"g.finderInnerPath\" />\r\n <path data-part=\"modules\" fill=\"currentColor\" [attr.d]=\"g.dataPath\" />\r\n </svg>\r\n} @else {\r\n <span class=\"p-3 text-center text-xs\" aria-hidden=\"true\">{{ effectiveAriaLabel() }}</span>\r\n}\r\n\r\n<!-- `contentChild` logo'yu projeksiyon yerinden bağımsız görür; kutu yalnızca boşaltma varken çizilir. -->\r\n@if (logoBoxPx()) {\r\n <span\r\n class=\"absolute inset-0 m-auto flex items-center justify-center overflow-hidden rounded-md bg-inherit p-[6%]\"\r\n [style.width.px]=\"logoBoxPx()\"\r\n [style.height.px]=\"logoBoxPx()\"\r\n >\r\n <ng-content select=\"[mfQrCodeLogo]\" />\r\n </span>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAoBA,MAAM,MAAM,GAAG,CAAC;AAEhB;AACA,SAAS,CAAC,CAAC,KAAa,EAAA;AACtB,IAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAChD;AAEA,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,IAAY,EAAA;IAClD,QACE,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM;SACxB,CAAC,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,MAAM,CAAC;SACjC,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC;AAEtC;AAEA;AACA,SAAS,WAAW,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;IACxE,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;AAC/D,IAAA,QACE,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE;AAC5E,QAAA,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE;AACzD,QAAA,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE;AAC7D,QAAA,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;AAEjE;AAEA;;;;AAIG;AACH,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;IACtF,IAAI,CAAC,GAAG,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA,CAAE;AAChD,IAAA,IAAI,EAAE;QAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,CAAA,CAAE;IACzD,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA,CAAE;AACxB,IAAA,IAAI,EAAE;QAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,CAAA,CAAE;IAC1D,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA,CAAE;AACpB,IAAA,IAAI,EAAE;QAAE,CAAC,IAAI,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,CAAE;IAC3D,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA,CAAE;AACpB,IAAA,IAAI,EAAE;QAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,CAAE;IAC1D,OAAO,CAAA,EAAG,CAAC,CAAA,CAAA,CAAG;AAChB;AAEA,SAAS,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;IAC1C,OAAO,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,CAAC,CAAA,OAAA,EAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,GAAA,CAAK;AACrH;AAEA;;;;AAIG;AACG,SAAU,cAAc,CAAC,IAAY,EAAE,KAAa,EAAA;AACxD,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACjD,IAAI,OAAO,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC;IAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;AACrC,IAAA,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC;QAAE,IAAI,IAAI,CAAC;AACpC,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD;AAEA;AACM,SAAU,UAAU,CACxB,MAAgB,EAChB,KAAoB,EACpB,MAAqB,EACrB,SAAiB,EAAA;AAEjB,IAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;IACxB,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,SAAS,IAAI,CAAC;AACpC,IAAA,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,CAAS,KAClC,SAAS,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,SAAS;IAE7F,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAS,KACjC,CAAC,IAAI,CAAC;AACN,QAAA,CAAC,IAAI,CAAC;AACN,QAAA,CAAC,GAAG,IAAI;AACR,QAAA,CAAC,GAAG,IAAI;AACR,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AACrB,QAAA,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,QAAQ,GAAG,EAAE;AACjB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC7B,QAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;;YAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG;gBACzB,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AAChB,oBAAA,CAAC,EAAE;oBACH;gBACF;gBACA,IAAI,GAAG,GAAG,CAAC;AACX,gBAAA,OAAO,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;AAAE,oBAAA,GAAG,EAAE;gBAC/B,QAAQ,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,CAAA,CAAA,CAAG;gBAC1C,CAAC,IAAI,GAAG;YACV;YACA;QACF;AACA,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE;AAClB,YAAA,IAAI,KAAK,KAAK,MAAM,EAAE;gBACpB,QAAQ,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;gBAC3B;YACF;YACA,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,GAAG;AACb,YAAA,QAAQ,IAAI,UAAU,CACpB,CAAC,EACD,CAAC,EACD,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,EACpB,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EACrB,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,EACvB,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CACvB;QACH;IACF;AAEA,IAAA,MAAM,OAAO,GAAG,MAAM,KAAK,SAAS;AACpC,IAAA,MAAM,OAAO,GAAuB;QAClC,CAAC,CAAC,EAAE,CAAC,CAAC;AACN,QAAA,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC;AAClB,QAAA,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;KACnB;IACD,IAAI,eAAe,GAAG,EAAE;IACxB,IAAI,eAAe,GAAG,EAAE;IACxB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE;QAC5B,eAAe;YACb,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC;QAC/F,eAAe,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,GAAG,GAAG,CAAC,CAAC;IACvE;IAEA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE;AACxE;AAWA;SACgB,WAAW,CAAC,QAAoB,EAAE,UAA8B,EAAE,EAAA;AAChF,IAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;AAClC,IAAA,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG;IACnC,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC;IACtD,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC;AACxC,IAAA,QACE,CAAA,+CAAA,EAAkD,EAAE,CAAA,UAAA,EAAa,EAAE,CAAA,WAAA,EAAc,CAAC,MAAM,CAAA,CAAA,EAAI,CAAC,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,CAAI;QACzH,CAAA,SAAA,EAAY,CAAC,MAAM,CAAA,KAAA,EAAQ,CAAC,MAAM,CAAA,SAAA,EAAY,KAAK,CAAA,UAAA,EAAa,KAAK,CAAA,QAAA,EAAW,EAAE,CAAA,GAAA,CAAK;AACvF,QAAA,CAAA,SAAA,EAAY,QAAQ,CAAC,eAAe,CAAA,QAAA,EAAW,EAAE,CAAA,uBAAA,CAAyB;AAC1E,QAAA,CAAA,SAAA,EAAY,QAAQ,CAAC,eAAe,CAAA,QAAA,EAAW,EAAE,CAAA,GAAA,CAAK;AACtD,QAAA,CAAA,SAAA,EAAY,QAAQ,CAAC,QAAQ,CAAA,QAAA,EAAW,EAAE,CAAA,GAAA,CAAK;AAC/C,QAAA,CAAA,MAAA,CAAQ;AAEZ;AAEA,SAAS,UAAU,CAAC,KAAa,EAAA;IAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAA,EAAA,EAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;AACjE;;ACzLA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;AAiCH;AACM,MAAO,eAAgB,SAAQ,KAAK,CAAA;AACxC,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,0EAA0E,CAAC;AACjF,QAAA,IAAI,CAAC,IAAI,GAAG,iBAAiB;IAC/B;AACD;AAED,MAAM,WAAW,GAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACrE,MAAM,eAAe,GAA0B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAEzE;AACA,MAAM,uBAAuB,GAAmC;;AAE9D,IAAA,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACnK,IAAA,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpK,IAAA,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACpK,IAAA,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;CACrK;AAED;AACA,MAAM,2BAA2B,GAAmC;AAClE,IAAA,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC7I,IAAA,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACtJ,IAAA,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,E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"}
@@ -49,12 +49,12 @@ class RadioGroup {
49
49
  this.onChange(value);
50
50
  this.onTouched();
51
51
  }
52
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
53
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: RadioGroup, isStandalone: true, selector: "mf-radio-group", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "role": "radiogroup" }, properties: { "class": "hostClasses()", "attr.aria-label": "ariaLabel() || null", "attr.aria-orientation": "orientation()" } }, providers: [
52
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: RadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
53
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: RadioGroup, isStandalone: true, selector: "mf-radio-group", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { attributes: { "role": "radiogroup" }, properties: { "class": "hostClasses()", "attr.aria-label": "ariaLabel() || null", "attr.aria-orientation": "orientation()" } }, providers: [
54
54
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioGroup), multi: true },
55
55
  ], exportAs: ["mfRadioGroup"], ngImport: i0, template: '<ng-content />', isInline: true });
56
56
  }
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: RadioGroup, decorators: [{
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: RadioGroup, decorators: [{
58
58
  type: Component,
59
59
  args: [{
60
60
  selector: 'mf-radio-group',
@@ -96,10 +96,10 @@ class Radio {
96
96
  this.group.onRadioChange(value);
97
97
  }
98
98
  }
99
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Radio, deps: [], target: i0.ɵɵFactoryTarget.Directive });
100
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: Radio, isStandalone: true, selector: "input[type=radio][mfRadio]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "change": "onChange()" }, properties: { "class": "classes()", "attr.name": "group.name()", "checked": "group.value() === value()", "disabled": "group.disabled() || disabled()" } }, ngImport: i0 });
99
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Radio, deps: [], target: i0.ɵɵFactoryTarget.Directive });
100
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: Radio, isStandalone: true, selector: "input[type=radio][mfRadio]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "change": "onChange()" }, properties: { "class": "classes()", "attr.name": "group.name()", "checked": "group.value() === value()", "disabled": "group.disabled() || disabled()" } }, ngImport: i0 });
101
101
  }
102
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Radio, decorators: [{
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Radio, decorators: [{
103
103
  type: Directive,
104
104
  args: [{
105
105
  selector: 'input[type=radio][mfRadio]',
@@ -94,10 +94,10 @@ class Rating extends ValueAccessorBase {
94
94
  setDisabledState(disabled) {
95
95
  this.formDisabled.set(disabled);
96
96
  }
97
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Rating, deps: null, target: i0.ɵɵFactoryTarget.Component });
98
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: Rating, isStandalone: true, selector: "mf-rating", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, allowClear: { classPropertyName: "allowClear", publicName: "allowClear", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "pointerleave": "hover.set(null)" }, properties: { "attr.role": "readonly() ? 'img' : 'radiogroup'", "attr.aria-label": "hostLabel()", "attr.aria-disabled": "isDisabled() || null" }, classAttribute: "inline-flex" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Rating), multi: true }], exportAs: ["mfRating"], usesInheritance: true, ngImport: i0, template: "@for (star of stars(); track star) {\r\n <!-- G\u00F6rsel y\u0131ld\u0131z: bo\u015F taban + \u00FCstte doluluk y\u00FCzdesi kadar k\u0131rp\u0131lm\u0131\u015F dolu y\u0131ld\u0131z. -->\r\n <ng-template #glyph>\r\n <span\r\n aria-hidden=\"true\"\r\n class=\"relative block\"\r\n [style.width.px]=\"size()\"\r\n [style.height.px]=\"size()\"\r\n >\r\n <span mfIcon [size]=\"size()\" class=\"absolute inset-0 text-fg-subtle\">star</span>\r\n <span class=\"absolute inset-y-0 start-0 overflow-hidden\" [style.width.%]=\"fill(star)\">\r\n <span mfIcon [size]=\"size()\" [filled]=\"true\" class=\"absolute top-0 start-0 text-warning\"\r\n >star</span\r\n >\r\n </span>\r\n </span>\r\n </ng-template>\r\n\r\n @if (readonly()) {\r\n <span class=\"p-0.5\"><ng-container [ngTemplateOutlet]=\"glyph\" /></span>\r\n } @else {\r\n <label\r\n class=\"cursor-pointer rounded-sm p-0.5 transition-transform duration-fast ease-spring has-[:focus-visible]:outline has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-1 has-[:focus-visible]:outline-focus-ring hover:scale-110\"\r\n [class.opacity-50]=\"isDisabled()\"\r\n [class.pointer-events-none]=\"isDisabled()\"\r\n (pointerenter)=\"preview(star)\"\r\n >\r\n <input\r\n type=\"radio\"\r\n class=\"sr-only\"\r\n [name]=\"name\"\r\n [value]=\"star\"\r\n [checked]=\"value() === star\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"starLabel(star)\"\r\n (click)=\"choose(star)\"\r\n (keydown.delete)=\"clear($event)\"\r\n (keydown.backspace)=\"clear($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n <ng-container [ngTemplateOutlet]=\"glyph\" />\r\n </label>\r\n }\r\n}\r\n", dependencies: [{ kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
97
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Rating, deps: null, target: i0.ɵɵFactoryTarget.Component });
98
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: Rating, isStandalone: true, selector: "mf-rating", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, allowClear: { classPropertyName: "allowClear", publicName: "allowClear", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "pointerleave": "hover.set(null)" }, properties: { "attr.role": "readonly() ? 'img' : 'radiogroup'", "attr.aria-label": "hostLabel()", "attr.aria-disabled": "isDisabled() || null" }, classAttribute: "inline-flex" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Rating), multi: true }], exportAs: ["mfRating"], usesInheritance: true, ngImport: i0, template: "@for (star of stars(); track star) {\r\n <!-- G\u00F6rsel y\u0131ld\u0131z: bo\u015F taban + \u00FCstte doluluk y\u00FCzdesi kadar k\u0131rp\u0131lm\u0131\u015F dolu y\u0131ld\u0131z. -->\r\n <ng-template #glyph>\r\n <span\r\n aria-hidden=\"true\"\r\n class=\"relative block\"\r\n [style.width.px]=\"size()\"\r\n [style.height.px]=\"size()\"\r\n >\r\n <span mfIcon [size]=\"size()\" class=\"absolute inset-0 text-fg-subtle\">star</span>\r\n <span class=\"absolute inset-y-0 start-0 overflow-hidden\" [style.width.%]=\"fill(star)\">\r\n <span mfIcon [size]=\"size()\" [filled]=\"true\" class=\"absolute top-0 start-0 text-warning\"\r\n >star</span\r\n >\r\n </span>\r\n </span>\r\n </ng-template>\r\n\r\n @if (readonly()) {\r\n <span class=\"p-0.5\"><ng-container [ngTemplateOutlet]=\"glyph\" /></span>\r\n } @else {\r\n <label\r\n class=\"cursor-pointer rounded-sm p-0.5 transition-transform duration-fast ease-spring has-[:focus-visible]:outline has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-1 has-[:focus-visible]:outline-focus-ring hover:scale-110\"\r\n [class.opacity-50]=\"isDisabled()\"\r\n [class.pointer-events-none]=\"isDisabled()\"\r\n (pointerenter)=\"preview(star)\"\r\n >\r\n <input\r\n type=\"radio\"\r\n class=\"sr-only\"\r\n [name]=\"name\"\r\n [value]=\"star\"\r\n [checked]=\"value() === star\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"starLabel(star)\"\r\n (click)=\"choose(star)\"\r\n (keydown.delete)=\"clear($event)\"\r\n (keydown.backspace)=\"clear($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n <ng-container [ngTemplateOutlet]=\"glyph\" />\r\n </label>\r\n }\r\n}\r\n", dependencies: [{ kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
99
99
  }
100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Rating, decorators: [{
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Rating, decorators: [{
101
101
  type: Component,
102
102
  args: [{ selector: 'mf-rating', exportAs: 'mfRating', imports: [Icon, NgTemplateOutlet], host: {
103
103
  class: 'inline-flex',
@@ -60,10 +60,10 @@ class ScrollArea {
60
60
  this.canScrollStart.set(offset > 1);
61
61
  this.canScrollEnd.set(max > 1 && offset < max - 1);
62
62
  }
63
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ScrollArea, deps: [], target: i0.ɵɵFactoryTarget.Component });
64
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: ScrollArea, isStandalone: true, selector: "mf-scroll-area", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "scroll": "updateEdges()" }, properties: { "class": "hostClasses()" } }, exportAs: ["mfScrollArea"], ngImport: i0, template: '<ng-content />', isInline: true });
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: ScrollArea, deps: [], target: i0.ɵɵFactoryTarget.Component });
64
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: ScrollArea, isStandalone: true, selector: "mf-scroll-area", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "scroll": "updateEdges()" }, properties: { "class": "hostClasses()" } }, exportAs: ["mfScrollArea"], ngImport: i0, template: '<ng-content />', isInline: true });
65
65
  }
66
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: ScrollArea, decorators: [{
66
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: ScrollArea, decorators: [{
67
67
  type: Component,
68
68
  args: [{
69
69
  selector: 'mf-scroll-area',
@@ -138,12 +138,12 @@ class SearchInput extends ValueAccessorBase {
138
138
  else
139
139
  this.inputEl()?.nativeElement.blur();
140
140
  }
141
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: SearchInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
142
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: SearchInput, isStandalone: true, selector: "mf-search-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, tooltipLabel: { classPropertyName: "tooltipLabel", publicName: "tooltipLabel", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, debounceMs: { classPropertyName: "debounceMs", publicName: "debounceMs", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.w-full": "fullWidth()" }, classAttribute: "inline-block" }, providers: [
141
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SearchInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
142
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SearchInput, isStandalone: true, selector: "mf-search-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, inputId: { classPropertyName: "inputId", publicName: "inputId", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, tooltipLabel: { classPropertyName: "tooltipLabel", publicName: "tooltipLabel", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, debounceMs: { classPropertyName: "debounceMs", publicName: "debounceMs", isSignal: true, isRequired: false, transformFunction: null }, collapsible: { classPropertyName: "collapsible", publicName: "collapsible", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.w-full": "fullWidth()" }, classAttribute: "inline-block" }, providers: [
143
143
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SearchInput), multi: true },
144
144
  ], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true, isSignal: true }, { propertyName: "tooltipRef", first: true, predicate: Tooltip, descendants: true, isSignal: true }], exportAs: ["mfSearchInput"], usesInheritance: true, ngImport: i0, template: "<div class=\"relative inline-flex items-center\" [class.w-full]=\"fullWidth()\">\r\n @if (showSpinner()) {\r\n <span\r\n aria-hidden=\"true\"\r\n class=\"pointer-events-none absolute top-1/2 start-2.5 inline-flex -translate-y-1/2 text-fg-subtle\"\r\n ><mf-spinner size=\"sm\"\r\n /></span>\r\n } @else {\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 start-2.5 -translate-y-1/2 text-fg-subtle\"\r\n >search</span\r\n >\r\n }\r\n <input\r\n mfInput\r\n [attr.id]=\"inputId() || null\"\r\n #inputEl\r\n type=\"text\"\r\n [class]=\"inputWidthClass()\"\r\n class=\"transition-[width] duration-base ease-out\"\r\n [value]=\"draft()\"\r\n [placeholder]=\"expanded() ? effectivePlaceholder() : ''\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [mfTooltip]=\"expanded() ? '' : effectiveTooltipLabel()\"\r\n (focus)=\"expand()\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (blur)=\"collapseIfEmpty()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (expanded() && draft()) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center justify-center absolute top-1/2 end-2 -translate-y-1/2 appearance-none border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"clear()\"\r\n [attr.aria-label]=\"effectiveClearAriaLabel()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n</div>\r\n", dependencies: [{ kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "directive", type: Input, selector: "input[mfInput]:not([type=checkbox]):not([type=radio]), textarea[mfInput]", inputs: ["size", "hasError", "autosize", "minRows", "maxRows"] }, { kind: "component", type: Spinner, selector: "mf-spinner", inputs: ["size", "tone", "ariaLabel"], exportAs: ["mfSpinner"] }, { kind: "directive", type: Tooltip, selector: "[mfTooltip], [mfTooltipContent]", inputs: ["mfTooltip", "mfTooltipContent", "tooltipPosition"], exportAs: ["mfTooltip"] }] });
145
145
  }
146
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: SearchInput, decorators: [{
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SearchInput, decorators: [{
147
147
  type: Component,
148
148
  args: [{ selector: 'mf-search-input', exportAs: 'mfSearchInput', imports: [Icon, Input, Spinner, Tooltip], host: { class: 'inline-block', '[class.w-full]': 'fullWidth()' }, providers: [
149
149
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SearchInput), multi: true },
@@ -35,8 +35,16 @@ const segmentedItemVariants = cva('relative cursor-pointer appearance-none white
35
35
  * farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving
36
36
  * tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın
37
37
  * `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —
38
- * dokümantasyondaki kompozisyon şekli birebir izlendi (dıştaki `ngToolbar`,
39
- * içteki `ngToolbarWidgetGroup [multi]="false"`).
38
+ * dokümantasyondaki kompozisyon şekli izlendi (dıştaki `ngToolbar`, içteki
39
+ * `ngToolbarWidgetGroup`).
40
+ *
41
+ * SEÇİM toolbar'dan DEĞİL, bileşenin kendisinden: `@angular/aria` 22.2 toolbar'ın
42
+ * `value`/`valueChange`'ini ve grubun `multi`'sini KALDIRDI (toolbar artık yalnızca
43
+ * gezinme). Kit önceden derlendiği için tüketicide derleme hatası çıkmıyor, tıklama
44
+ * sessizce etkisiz kalıyordu (gerçek bulgu, 0.6–0.8). Artık tıklama + Enter/Space
45
+ * doğrudan `select()`'i çağırır — 22.1 ve 22.2'de aynı çalışır. Widget'ın `[value]`'su
46
+ * yalnızca 22.1'in zorunlu girdisi için duruyor (22.2'de düğmenin DOM `value`'suna düşer).
47
+ * Seçili durum `aria-pressed` ile duyurulur (toolbar hiçbir sürümde vermiyor).
40
48
  *
41
49
  * Seçili parça core'un `[mfSlidingIndicator]`'ıyla (Tabs ile aynı motor) yay
42
50
  * eğrisiyle kayar; aria/toolbar seçili öznitelik vermediği için hedef
@@ -53,42 +61,46 @@ class SegmentedControl extends ValueAccessorBase {
53
61
  ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
54
62
  disabled = input(false, /* @ts-ignore */
55
63
  ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
56
- toolbarValue = computed(() => this.value() == null ? [] : [this.value()], /* @ts-ignore */
57
- ...(ngDevMode ? [{ debugName: "toolbarValue" }] : /* istanbul ignore next */ []));
58
64
  trackClasses = computed(() => cn(segmentedTrackVariants({ size: this.size() })), /* @ts-ignore */
59
65
  ...(ngDevMode ? [{ debugName: "trackClasses" }] : /* istanbul ignore next */ []));
60
66
  writeValue(value) {
61
67
  this.value.set(value);
62
68
  }
63
69
  /**
64
- * `@angular/aria/toolbar`'ın kendi widget-kayıt döngüsü, gerçek bir tıklama
65
- * OLMADAN da BOŞ bir dizi ile (`values: []`) tetiklenebiliyor (gerçek bulgu
66
- * — bir seçeneğe tıklarken bile araya giren, seçimle ilgisiz iç kayıt
67
- * event'leri). `this.value` her event'te güncellenir (görsel durum ETKİLENMEZ,
68
- * zaten `values[0]` genelde mevcut değerle AYNI), ama CVA `onChange`/`onTouched`
69
- * SADECE dolu bir dizi (gerçek bir seçim) geldiğinde tetiklenir — aksi halde
70
- * Reactive Forms'a sahte "null'a değişti" bildirimleri sızardı.
70
+ * Seçili seçeneğe tekrar basmak seçimi KALDIRMAZ (segmented control'de her zaman bir
71
+ * seçim durur) ve değişiklik bildirmez; CVA `onChange` yalnızca gerçek bir değişimde.
72
+ */
73
+ select(value) {
74
+ if (this.disabled())
75
+ return;
76
+ this.onTouched();
77
+ if (value === this.value())
78
+ return;
79
+ this.value.set(value);
80
+ this.onChange(value);
81
+ }
82
+ /**
83
+ * Enter/Space: 22.1'in toolbar'ı bu tuşları kendisi yakalayıp `preventDefault` ettiği
84
+ * için düğmenin yerel `click`'i gelmiyordu; 22.2'de geliyor. Burada seçip varsayılanı
85
+ * engellemek iki sürümde de TEK seçim üretir.
71
86
  */
72
- onToolbarValueChange(values) {
73
- this.value.set(values[0] ?? null);
74
- if (values.length > 0) {
75
- this.onChange(values[0]);
76
- this.onTouched();
77
- }
87
+ onActivateKey(event, value) {
88
+ event.preventDefault();
89
+ this.select(value);
78
90
  }
79
91
  itemClasses(option) {
80
92
  return cn(segmentedItemVariants({ selected: option.value === this.value(), disabled: this.disabled() }));
81
93
  }
82
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: SegmentedControl, deps: null, target: i0.ɵɵFactoryTarget.Component });
83
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: SegmentedControl, isStandalone: true, selector: "mf-segmented-control", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { classAttribute: "inline-block" }, providers: [
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SegmentedControl, deps: null, target: i0.ɵɵFactoryTarget.Component });
95
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SegmentedControl, isStandalone: true, selector: "mf-segmented-control", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { classAttribute: "inline-block" }, providers: [
84
96
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SegmentedControl), multi: true },
85
- ], exportAs: ["mfSegmentedControl"], usesInheritance: true, ngImport: i0, template: "<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [value]=\"toolbarValue()\"\r\n (valueChange)=\"onToolbarValueChange($event)\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan par\u00E7a (core `[mfSlidingIndicator]`) \u2014 se\u00E7enekler `relative`, \u00FCst\u00FCne boyan\u0131r. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [multi]=\"false\" [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: Toolbar, selector: "[ngToolbar]", inputs: ["orientation", "softDisabled", "disabled", "wrap", "value"], outputs: ["valueChange"], exportAs: ["ngToolbar"] }, { kind: "directive", type: ToolbarWidgetGroup, selector: "[ngToolbarWidgetGroup]", inputs: ["disabled", "multi"], exportAs: ["ngToolbarWidgetGroup"] }, { kind: "directive", type: ToolbarWidget, selector: "[ngToolbarWidget]", inputs: ["id", "disabled", "value"], exportAs: ["ngToolbarWidget"] }, { kind: "directive", type: SlidingIndicator, selector: "[mfSlidingIndicator]", inputs: ["axis", "target", "track", "container"], exportAs: ["mfSlidingIndicator"] }] });
97
+ ], exportAs: ["mfSegmentedControl"], usesInheritance: true, ngImport: i0, template: "<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan par\u00E7a (core `[mfSlidingIndicator]`) \u2014 se\u00E7enekler `relative`, \u00FCst\u00FCne boyan\u0131r. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.aria-pressed]=\"option.value === value()\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n (click)=\"select(option.value)\"\r\n (keydown.enter)=\"onActivateKey($event, option.value)\"\r\n (keydown.space)=\"onActivateKey($event, option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: Toolbar, selector: "[ngToolbar]", inputs: ["orientation", "softDisabled", "disabled", "wrap", "value"], outputs: ["valueChange"], exportAs: ["ngToolbar"] }, { kind: "directive", type: ToolbarWidgetGroup, selector: "[ngToolbarWidgetGroup]", inputs: ["disabled", "multi"], exportAs: ["ngToolbarWidgetGroup"] }, { kind: "directive", type: ToolbarWidget, selector: "[ngToolbarWidget]", inputs: ["id", "disabled", "value"], exportAs: ["ngToolbarWidget"] }, { kind: "directive", type: SlidingIndicator, selector: "[mfSlidingIndicator]", inputs: ["axis", "target", "track", "container"], exportAs: ["mfSlidingIndicator"] }] });
86
98
  }
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: SegmentedControl, decorators: [{
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SegmentedControl, decorators: [{
88
100
  type: Component,
89
101
  args: [{ selector: 'mf-segmented-control', exportAs: 'mfSegmentedControl', imports: [Toolbar, ToolbarWidgetGroup, ToolbarWidget, SlidingIndicator], host: { class: 'inline-block' }, providers: [
90
102
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SegmentedControl), multi: true },
91
- ], template: "<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [value]=\"toolbarValue()\"\r\n (valueChange)=\"onToolbarValueChange($event)\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan par\u00E7a (core `[mfSlidingIndicator]`) \u2014 se\u00E7enekler `relative`, \u00FCst\u00FCne boyan\u0131r. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [multi]=\"false\" [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n" }]
103
+ ], template: "<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan par\u00E7a (core `[mfSlidingIndicator]`) \u2014 se\u00E7enekler `relative`, \u00FCst\u00FCne boyan\u0131r. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.aria-pressed]=\"option.value === value()\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n (click)=\"select(option.value)\"\r\n (keydown.enter)=\"onActivateKey($event, option.value)\"\r\n (keydown.space)=\"onActivateKey($event, option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n" }]
92
104
  }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
93
105
 
94
106
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mesgflow-ui-kit-segmented-control.mjs","sources":["../../../projects/ui-kit/segmented-control/segmented-control.variants.ts","../../../projects/ui-kit/segmented-control/segmented-control.ts","../../../projects/ui-kit/segmented-control/segmented-control.html","../../../projects/ui-kit/segmented-control/mesgflow-ui-kit-segmented-control.ts"],"sourcesContent":["import { focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const segmentedTrackVariants = cva(\r\n 'relative inline-flex items-center gap-0.5 rounded-md bg-surface-alt p-0.5',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'text-xs',\r\n md: 'text-sm',\r\n },\r\n },\r\n defaultVariants: { size: 'md' },\r\n },\r\n);\r\n\r\nexport const segmentedItemVariants = cva(\r\n 'relative cursor-pointer appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1 text-fg-muted transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\r\n focusRecipe,\r\n {\r\n variants: {\r\n selected: {\r\n true: 'text-fg',\r\n false: 'hover:text-fg',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50 active:scale-100',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { selected: false, disabled: false },\r\n },\r\n);\r\n\r\nexport type SegmentedControlSize = VariantProps<typeof segmentedTrackVariants>['size'];\r\n","import {\r\n Toolbar as AriaToolbar,\r\n ToolbarWidget as AriaToolbarWidget,\r\n ToolbarWidgetGroup as AriaToolbarWidgetGroup,\r\n} from '@angular/aria/toolbar';\r\nimport { Component, computed, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { SlidingIndicator, ValueAccessorBase, cn } from '@mesgflow/ui-kit/core';\r\nimport {\r\n segmentedItemVariants,\r\n segmentedTrackVariants,\r\n type SegmentedControlSize,\r\n} from './segmented-control.variants';\r\n\r\nexport interface SegmentedOption<T> {\r\n label: string;\r\n value: T;\r\n}\r\n\r\n/**\r\n * `<mf-segmented-control [options]=\"opts\" [(value)]=\"mode\" />` — hizalama,\r\n * cihaz önizlemesi gibi KISA/tek-seçimli seçenek kümeleri için. `Tabs`'tan\r\n * farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving\r\n * tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın\r\n * `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —\r\n * dokümantasyondaki kompozisyon şekli birebir izlendi (dıştaki `ngToolbar`,\r\n * içteki `ngToolbarWidgetGroup [multi]=\"false\"`).\r\n *\r\n * Seçili parça core'un `[mfSlidingIndicator]`'ıyla (Tabs ile aynı motor) yay\r\n * eğrisiyle kayar; aria/toolbar seçili öznitelik vermediği için hedef\r\n * `data-selected`.\r\n */\r\n@Component({\r\n selector: 'mf-segmented-control',\r\n exportAs: 'mfSegmentedControl',\r\n imports: [AriaToolbar, AriaToolbarWidgetGroup, AriaToolbarWidget, SlidingIndicator],\r\n host: { class: 'inline-block' },\r\n templateUrl: './segmented-control.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SegmentedControl), multi: true },\r\n ],\r\n})\r\nexport class SegmentedControl<T>\r\n extends ValueAccessorBase<T | null>\r\n implements ControlValueAccessor\r\n{\r\n readonly options = input.required<SegmentedOption<T>[]>();\r\n readonly value = model<T | null>(null);\r\n readonly size = input<SegmentedControlSize>('md');\r\n readonly ariaLabel = input('');\r\n readonly disabled = input(false);\r\n\r\n protected readonly toolbarValue = computed<T[]>(() =>\r\n this.value() == null ? [] : [this.value() as T],\r\n );\r\n protected readonly trackClasses = computed(() =>\r\n cn(segmentedTrackVariants({ size: this.size() })),\r\n );\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n /**\r\n * `@angular/aria/toolbar`'ın kendi widget-kayıt döngüsü, gerçek bir tıklama\r\n * OLMADAN da BOŞ bir dizi ile (`values: []`) tetiklenebiliyor (gerçek bulgu\r\n * — bir seçeneğe tıklarken bile araya giren, seçimle ilgisiz iç kayıt\r\n * event'leri). `this.value` her event'te güncellenir (görsel durum ETKİLENMEZ,\r\n * zaten `values[0]` genelde mevcut değerle AYNI), ama CVA `onChange`/`onTouched`\r\n * SADECE dolu bir dizi (gerçek bir seçim) geldiğinde tetiklenir — aksi halde\r\n * Reactive Forms'a sahte \"null'a değişti\" bildirimleri sızardı.\r\n */\r\n protected onToolbarValueChange(values: readonly T[]): void {\r\n this.value.set(values[0] ?? null);\r\n if (values.length > 0) {\r\n this.onChange(values[0]!);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n protected itemClasses(option: SegmentedOption<T>): string {\r\n return cn(\r\n segmentedItemVariants({ selected: option.value === this.value(), disabled: this.disabled() }),\r\n );\r\n }\r\n}\r\n","<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [value]=\"toolbarValue()\"\r\n (valueChange)=\"onToolbarValueChange($event)\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan parça (core `[mfSlidingIndicator]`) — seçenekler `relative`, üstüne boyanır. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [multi]=\"false\" [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AriaToolbar","AriaToolbarWidgetGroup","AriaToolbarWidget"],"mappings":";;;;;;;AAGO,MAAM,sBAAsB,GAAG,GAAG,CACvC,2EAA2E,EAC3E;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,IAAI,EAAE;AACJ,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,EAAE,EAAE,SAAS;AACd,SAAA;AACF,KAAA;AACD,IAAA,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;AAChC,CAAA;AAGI,MAAM,qBAAqB,GAAG,GAAG,CACtC,2LAA2L;AACzL,IAAA,WAAW,EACb;AACE,IAAA,QAAQ,EAAE;AACR,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,SAAS;AACf,YAAA,KAAK,EAAE,eAAe;AACvB,SAAA;AACD,QAAA,QAAQ,EAAE;AACR,YAAA,IAAI,EAAE,iDAAiD;AACvD,YAAA,KAAK,EAAE,EAAE;AACV,SAAA;AACF,KAAA;IACD,eAAe,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;AACtD,CAAA;;ACZH;;;;;;;;;;;;AAYG;AAWG,MAAO,gBACX,SAAQ,iBAA2B,CAAA;IAG1B,OAAO,GAAG,KAAK,CAAC,QAAQ;gFAAwB;IAChD,KAAK,GAAG,KAAK,CAAW,IAAI;8EAAC;IAC7B,IAAI,GAAG,KAAK,CAAuB,IAAI;6EAAC;IACxC,SAAS,GAAG,KAAK,CAAC,EAAE;kFAAC;IACrB,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IAEb,YAAY,GAAG,QAAQ,CAAM,MAC9C,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,EAAO,CAAC;qFAChD;AACkB,IAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,EAAE,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;qFAClD;AAED,IAAA,UAAU,CAAC,KAAe,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AAEA;;;;;;;;AAQG;AACO,IAAA,oBAAoB,CAAC,MAAoB,EAAA;AACjD,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACjC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;YACzB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEU,IAAA,WAAW,CAAC,MAA0B,EAAA;QAC9C,OAAO,EAAE,CACP,qBAAqB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC9F;IACH;uGA1CW,gBAAgB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAJhB;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;SAC7F,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECxCH,u9BA6BA,4CDMYA,OAAW,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAEC,kBAAsB,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAEC,aAAiB,kIAAE,gBAAgB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAOvE,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAV5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,YACtB,oBAAoB,EAAA,OAAA,EACrB,CAACF,OAAW,EAAEC,kBAAsB,EAAEC,aAAiB,EAAE,gBAAgB,CAAC,EAAA,IAAA,EAC7E,EAAE,KAAK,EAAE,cAAc,EAAE,EAAA,SAAA,EAEpB;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAC7F,qBAAA,EAAA,QAAA,EAAA,u9BAAA,EAAA;;;AExCH;;AAEG;;"}
1
+ {"version":3,"file":"mesgflow-ui-kit-segmented-control.mjs","sources":["../../../projects/ui-kit/segmented-control/segmented-control.variants.ts","../../../projects/ui-kit/segmented-control/segmented-control.ts","../../../projects/ui-kit/segmented-control/segmented-control.html","../../../projects/ui-kit/segmented-control/mesgflow-ui-kit-segmented-control.ts"],"sourcesContent":["import { focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const segmentedTrackVariants = cva(\r\n 'relative inline-flex items-center gap-0.5 rounded-md bg-surface-alt p-0.5',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'text-xs',\r\n md: 'text-sm',\r\n },\r\n },\r\n defaultVariants: { size: 'md' },\r\n },\r\n);\r\n\r\nexport const segmentedItemVariants = cva(\r\n 'relative cursor-pointer appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1 text-fg-muted transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\r\n focusRecipe,\r\n {\r\n variants: {\r\n selected: {\r\n true: 'text-fg',\r\n false: 'hover:text-fg',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50 active:scale-100',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { selected: false, disabled: false },\r\n },\r\n);\r\n\r\nexport type SegmentedControlSize = VariantProps<typeof segmentedTrackVariants>['size'];\r\n","import {\r\n Toolbar as AriaToolbar,\r\n ToolbarWidget as AriaToolbarWidget,\r\n ToolbarWidgetGroup as AriaToolbarWidgetGroup,\r\n} from '@angular/aria/toolbar';\r\nimport { Component, computed, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { SlidingIndicator, ValueAccessorBase, cn } from '@mesgflow/ui-kit/core';\r\nimport {\r\n segmentedItemVariants,\r\n segmentedTrackVariants,\r\n type SegmentedControlSize,\r\n} from './segmented-control.variants';\r\n\r\nexport interface SegmentedOption<T> {\r\n label: string;\r\n value: T;\r\n}\r\n\r\n/**\r\n * `<mf-segmented-control [options]=\"opts\" [(value)]=\"mode\" />` — hizalama,\r\n * cihaz önizlemesi gibi KISA/tek-seçimli seçenek kümeleri için. `Tabs`'tan\r\n * farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving\r\n * tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın\r\n * `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —\r\n * dokümantasyondaki kompozisyon şekli izlendi (dıştaki `ngToolbar`, içteki\r\n * `ngToolbarWidgetGroup`).\r\n *\r\n * SEÇİM toolbar'dan DEĞİL, bileşenin kendisinden: `@angular/aria` 22.2 toolbar'ın\r\n * `value`/`valueChange`'ini ve grubun `multi`'sini KALDIRDI (toolbar artık yalnızca\r\n * gezinme). Kit önceden derlendiği için tüketicide derleme hatası çıkmıyor, tıklama\r\n * sessizce etkisiz kalıyordu (gerçek bulgu, 0.6–0.8). Artık tıklama + Enter/Space\r\n * doğrudan `select()`'i çağırır — 22.1 ve 22.2'de aynı çalışır. Widget'ın `[value]`'su\r\n * yalnızca 22.1'in zorunlu girdisi için duruyor (22.2'de düğmenin DOM `value`'suna düşer).\r\n * Seçili durum `aria-pressed` ile duyurulur (toolbar hiçbir sürümde vermiyor).\r\n *\r\n * Seçili parça core'un `[mfSlidingIndicator]`'ıyla (Tabs ile aynı motor) yay\r\n * eğrisiyle kayar; aria/toolbar seçili öznitelik vermediği için hedef\r\n * `data-selected`.\r\n */\r\n@Component({\r\n selector: 'mf-segmented-control',\r\n exportAs: 'mfSegmentedControl',\r\n imports: [AriaToolbar, AriaToolbarWidgetGroup, AriaToolbarWidget, SlidingIndicator],\r\n host: { class: 'inline-block' },\r\n templateUrl: './segmented-control.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SegmentedControl), multi: true },\r\n ],\r\n})\r\nexport class SegmentedControl<T>\r\n extends ValueAccessorBase<T | null>\r\n implements ControlValueAccessor\r\n{\r\n readonly options = input.required<SegmentedOption<T>[]>();\r\n readonly value = model<T | null>(null);\r\n readonly size = input<SegmentedControlSize>('md');\r\n readonly ariaLabel = input('');\r\n readonly disabled = input(false);\r\n\r\n protected readonly trackClasses = computed(() =>\r\n cn(segmentedTrackVariants({ size: this.size() })),\r\n );\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n /**\r\n * Seçili seçeneğe tekrar basmak seçimi KALDIRMAZ (segmented control'de her zaman bir\r\n * seçim durur) ve değişiklik bildirmez; CVA `onChange` yalnızca gerçek bir değişimde.\r\n */\r\n protected select(value: T): void {\r\n if (this.disabled()) return;\r\n this.onTouched();\r\n if (value === this.value()) return;\r\n this.value.set(value);\r\n this.onChange(value);\r\n }\r\n\r\n /**\r\n * Enter/Space: 22.1'in toolbar'ı bu tuşları kendisi yakalayıp `preventDefault` ettiği\r\n * için düğmenin yerel `click`'i gelmiyordu; 22.2'de geliyor. Burada seçip varsayılanı\r\n * engellemek iki sürümde de TEK seçim üretir.\r\n */\r\n protected onActivateKey(event: Event, value: T): void {\r\n event.preventDefault();\r\n this.select(value);\r\n }\r\n\r\n protected itemClasses(option: SegmentedOption<T>): string {\r\n return cn(\r\n segmentedItemVariants({ selected: option.value === this.value(), disabled: this.disabled() }),\r\n );\r\n }\r\n}\r\n","<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <!-- Kayan parça (core `[mfSlidingIndicator]`) — seçenekler `relative`, üstüne boyanır. -->\r\n <span\r\n mfSlidingIndicator\r\n target='[data-selected=\"true\"]'\r\n [track]=\"value()\"\r\n class=\"inset-y-0.5 rounded-sm bg-surface shadow-1\"\r\n ></span>\r\n <div ngToolbarWidgetGroup [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button\r\n type=\"button\"\r\n ngToolbarWidget\r\n [value]=\"option.value\"\r\n [attr.aria-pressed]=\"option.value === value()\"\r\n [attr.data-selected]=\"option.value === value()\"\r\n [class]=\"itemClasses(option)\"\r\n (click)=\"select(option.value)\"\r\n (keydown.enter)=\"onActivateKey($event, option.value)\"\r\n (keydown.space)=\"onActivateKey($event, option.value)\"\r\n >\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AriaToolbar","AriaToolbarWidgetGroup","AriaToolbarWidget"],"mappings":"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"}
@@ -212,10 +212,10 @@ class Select {
212
212
  this.select(option);
213
213
  }
214
214
  }
215
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Select, deps: [], target: i0.ɵɵFactoryTarget.Component });
216
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: Select, isStandalone: true, selector: "mf-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleChips: { classPropertyName: "maxVisibleChips", publicName: "maxVisibleChips", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", values: "valuesChange" }, host: { classAttribute: "block" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Select), multi: true }], exportAs: ["mfSelect"], ngImport: i0, template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"triggerClasses()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n @if (multiple()) {\r\n @if (selectedOptions().length > 0) {\r\n <span class=\"flex min-w-0 flex-1 flex-wrap items-center gap-1\">\r\n @for (option of visibleChips(); track option.label) {\r\n <mf-chip size=\"sm\">{{ option.label }}</mf-chip>\r\n }\r\n @if (overflowChipCount() > 0) {\r\n <mf-chip size=\"sm\">+{{ overflowChipCount() }}</mf-chip>\r\n }\r\n </span>\r\n } @else {\r\n <span class=\"truncate text-fg-subtle\">{{ effectivePlaceholder() }}</span>\r\n }\r\n } @else {\r\n <span class=\"truncate\" [class.text-fg-subtle]=\"!selectedLabel()\">\r\n {{ selectedLabel() || effectivePlaceholder() }}\r\n </span>\r\n }\r\n <span mfIcon [size]=\"18\" class=\"shrink-0 text-fg-subtle\">unfold_more</span>\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]=\"true\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n class=\"w-full max-h-64 min-w-[8rem] text-sm\"\r\n (keydown)=\"onPanelKeydown($event)\"\r\n >\r\n @for (option of options(); track option.label; 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]=\"isSelected(option)\"\r\n [class]=\"optionClasses(option, i)\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(option)\"\r\n >\r\n <span class=\"truncate\">{{ option.label }}</span>\r\n @if (isSelected(option)) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }, { kind: "component", type: Chip, selector: "mf-chip", inputs: ["tone", "size", "selected", "disabled", "removable", "removeLabel"], outputs: ["removed"], exportAs: ["mfChip"] }] });
215
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Select, deps: [], target: i0.ɵɵFactoryTarget.Component });
216
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: Select, isStandalone: true, selector: "mf-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleChips: { classPropertyName: "maxVisibleChips", publicName: "maxVisibleChips", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, hasError: { classPropertyName: "hasError", publicName: "hasError", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", values: "valuesChange" }, host: { classAttribute: "block" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Select), multi: true }], exportAs: ["mfSelect"], ngImport: i0, template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"triggerClasses()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n @if (multiple()) {\r\n @if (selectedOptions().length > 0) {\r\n <span class=\"flex min-w-0 flex-1 flex-wrap items-center gap-1\">\r\n @for (option of visibleChips(); track option.label) {\r\n <mf-chip size=\"sm\">{{ option.label }}</mf-chip>\r\n }\r\n @if (overflowChipCount() > 0) {\r\n <mf-chip size=\"sm\">+{{ overflowChipCount() }}</mf-chip>\r\n }\r\n </span>\r\n } @else {\r\n <span class=\"truncate text-fg-subtle\">{{ effectivePlaceholder() }}</span>\r\n }\r\n } @else {\r\n <span class=\"truncate\" [class.text-fg-subtle]=\"!selectedLabel()\">\r\n {{ selectedLabel() || effectivePlaceholder() }}\r\n </span>\r\n }\r\n <span mfIcon [size]=\"18\" class=\"shrink-0 text-fg-subtle\">unfold_more</span>\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]=\"true\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n class=\"w-full max-h-64 min-w-[8rem] text-sm\"\r\n (keydown)=\"onPanelKeydown($event)\"\r\n >\r\n @for (option of options(); track option.label; 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]=\"isSelected(option)\"\r\n [class]=\"optionClasses(option, i)\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(option)\"\r\n >\r\n <span class=\"truncate\">{{ option.label }}</span>\r\n @if (isSelected(option)) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n", dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }, { kind: "component", type: Popover, selector: "mf-popover", inputs: ["origin", "open", "placement", "padding", "hasBackdrop", "matchTriggerWidth", "panelClass"], outputs: ["openChange", "closed"], exportAs: ["mfPopover"] }, { kind: "component", type: Chip, selector: "mf-chip", inputs: ["tone", "size", "selected", "disabled", "removable", "removeLabel"], outputs: ["removed"], exportAs: ["mfChip"] }] });
217
217
  }
218
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Select, decorators: [{
218
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Select, decorators: [{
219
219
  type: Component,
220
220
  args: [{ selector: 'mf-select', exportAs: 'mfSelect', imports: [OverlayModule, Icon, Popover, Chip], host: { class: 'block' }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Select), multi: true }], template: "<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"triggerClasses()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n @if (multiple()) {\r\n @if (selectedOptions().length > 0) {\r\n <span class=\"flex min-w-0 flex-1 flex-wrap items-center gap-1\">\r\n @for (option of visibleChips(); track option.label) {\r\n <mf-chip size=\"sm\">{{ option.label }}</mf-chip>\r\n }\r\n @if (overflowChipCount() > 0) {\r\n <mf-chip size=\"sm\">+{{ overflowChipCount() }}</mf-chip>\r\n }\r\n </span>\r\n } @else {\r\n <span class=\"truncate text-fg-subtle\">{{ effectivePlaceholder() }}</span>\r\n }\r\n } @else {\r\n <span class=\"truncate\" [class.text-fg-subtle]=\"!selectedLabel()\">\r\n {{ selectedLabel() || effectivePlaceholder() }}\r\n </span>\r\n }\r\n <span mfIcon [size]=\"18\" class=\"shrink-0 text-fg-subtle\">unfold_more</span>\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]=\"true\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n class=\"w-full max-h-64 min-w-[8rem] text-sm\"\r\n (keydown)=\"onPanelKeydown($event)\"\r\n >\r\n @for (option of options(); track option.label; 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]=\"isSelected(option)\"\r\n [class]=\"optionClasses(option, i)\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(option)\"\r\n >\r\n <span class=\"truncate\">{{ option.label }}</span>\r\n @if (isSelected(option)) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n" }]
221
221
  }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], values: [{ type: i0.Input, args: [{ isSignal: true, alias: "values", required: false }] }, { type: i0.Output, args: ["valuesChange"] }], maxVisibleChips: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleChips", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], hasError: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasError", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });