@mesgflow/ui-kit 0.6.0 → 0.8.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 (227) hide show
  1. package/README.md +56 -5
  2. package/fesm2022/mesgflow-ui-kit-accordion.mjs +9 -8
  3. package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -1
  4. package/fesm2022/mesgflow-ui-kit-agenda.mjs +208 -0
  5. package/fesm2022/mesgflow-ui-kit-agenda.mjs.map +1 -0
  6. package/fesm2022/mesgflow-ui-kit-alert.mjs +3 -3
  7. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +37 -0
  8. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
  9. package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +3 -3
  10. package/fesm2022/mesgflow-ui-kit-avatar.mjs +3 -3
  11. package/fesm2022/mesgflow-ui-kit-badge.mjs +3 -3
  12. package/fesm2022/mesgflow-ui-kit-banner.mjs +3 -3
  13. package/fesm2022/mesgflow-ui-kit-blocks.mjs +207 -0
  14. package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -0
  15. package/fesm2022/mesgflow-ui-kit-box-input.mjs +4 -4
  16. package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
  17. package/fesm2022/mesgflow-ui-kit-brand.mjs +3 -3
  18. package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +3 -3
  19. package/fesm2022/mesgflow-ui-kit-button-group.mjs +3 -3
  20. package/fesm2022/mesgflow-ui-kit-button.mjs +190 -244
  21. package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
  22. package/fesm2022/mesgflow-ui-kit-card.mjs +48 -27
  23. package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -1
  24. package/fesm2022/mesgflow-ui-kit-carousel.mjs +308 -0
  25. package/fesm2022/mesgflow-ui-kit-carousel.mjs.map +1 -0
  26. package/fesm2022/mesgflow-ui-kit-chart.mjs +12 -12
  27. package/fesm2022/mesgflow-ui-kit-checkbox.mjs +18 -23
  28. package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
  29. package/fesm2022/mesgflow-ui-kit-chip.mjs +5 -5
  30. package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
  31. package/fesm2022/mesgflow-ui-kit-code-block.mjs +11 -7
  32. package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
  33. package/fesm2022/mesgflow-ui-kit-collapsible.mjs +9 -9
  34. package/fesm2022/mesgflow-ui-kit-color-picker.mjs +9 -7
  35. package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
  36. package/fesm2022/mesgflow-ui-kit-combobox.mjs +147 -67
  37. package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
  38. package/fesm2022/mesgflow-ui-kit-command.mjs +15 -16
  39. package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -1
  40. package/fesm2022/mesgflow-ui-kit-context-menu.mjs +7 -9
  41. package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
  42. package/fesm2022/mesgflow-ui-kit-copy-button.mjs +6 -6
  43. package/fesm2022/mesgflow-ui-kit-core.mjs +446 -128
  44. package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
  45. package/fesm2022/mesgflow-ui-kit-countdown.mjs +149 -0
  46. package/fesm2022/mesgflow-ui-kit-countdown.mjs.map +1 -0
  47. package/fesm2022/mesgflow-ui-kit-date-picker.mjs +140 -19
  48. package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
  49. package/fesm2022/mesgflow-ui-kit-description-list.mjs +3 -3
  50. package/fesm2022/mesgflow-ui-kit-dialog.mjs +310 -64
  51. package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
  52. package/fesm2022/mesgflow-ui-kit-divider.mjs +3 -3
  53. package/fesm2022/mesgflow-ui-kit-drawer.mjs +109 -0
  54. package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -0
  55. package/fesm2022/mesgflow-ui-kit-dropzone.mjs +6 -6
  56. package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
  57. package/fesm2022/mesgflow-ui-kit-empty-state.mjs +3 -3
  58. package/fesm2022/mesgflow-ui-kit-field.mjs +55 -14
  59. package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
  60. package/fesm2022/mesgflow-ui-kit-file-upload.mjs +356 -0
  61. package/fesm2022/mesgflow-ui-kit-file-upload.mjs.map +1 -0
  62. package/fesm2022/mesgflow-ui-kit-hover-card.mjs +6 -6
  63. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +135 -0
  64. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
  65. package/fesm2022/mesgflow-ui-kit-icon.mjs +8 -3
  66. package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -1
  67. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs +371 -0
  68. package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs.map +1 -0
  69. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +279 -0
  70. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs.map +1 -0
  71. package/fesm2022/mesgflow-ui-kit-input.mjs +162 -19
  72. package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
  73. package/fesm2022/mesgflow-ui-kit-kbd.mjs +3 -3
  74. package/fesm2022/mesgflow-ui-kit-lightbox.mjs +299 -0
  75. package/fesm2022/mesgflow-ui-kit-lightbox.mjs.map +1 -0
  76. package/fesm2022/mesgflow-ui-kit-link.mjs +5 -5
  77. package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -1
  78. package/fesm2022/mesgflow-ui-kit-listbox.mjs +151 -0
  79. package/fesm2022/mesgflow-ui-kit-listbox.mjs.map +1 -0
  80. package/fesm2022/mesgflow-ui-kit-mention.mjs +283 -0
  81. package/fesm2022/mesgflow-ui-kit-mention.mjs.map +1 -0
  82. package/fesm2022/mesgflow-ui-kit-menu.mjs +178 -14
  83. package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
  84. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +276 -0
  85. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs.map +1 -0
  86. package/fesm2022/mesgflow-ui-kit-notification-center.mjs +281 -0
  87. package/fesm2022/mesgflow-ui-kit-notification-center.mjs.map +1 -0
  88. package/fesm2022/mesgflow-ui-kit-number-input.mjs +9 -6
  89. package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
  90. package/fesm2022/mesgflow-ui-kit-otp-input.mjs +3 -3
  91. package/fesm2022/mesgflow-ui-kit-page-header.mjs +6 -6
  92. package/fesm2022/mesgflow-ui-kit-pagination.mjs +7 -6
  93. package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
  94. package/fesm2022/mesgflow-ui-kit-password-input.mjs +38 -68
  95. package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
  96. package/fesm2022/mesgflow-ui-kit-popover.mjs +12 -52
  97. package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
  98. package/fesm2022/mesgflow-ui-kit-progress.mjs +164 -23
  99. package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
  100. package/fesm2022/mesgflow-ui-kit-qr-code.mjs +766 -0
  101. package/fesm2022/mesgflow-ui-kit-qr-code.mjs.map +1 -0
  102. package/fesm2022/mesgflow-ui-kit-radio.mjs +10 -12
  103. package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
  104. package/fesm2022/mesgflow-ui-kit-rating.mjs +4 -4
  105. package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
  106. package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +3 -3
  107. package/fesm2022/mesgflow-ui-kit-search-input.mjs +11 -7
  108. package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
  109. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +15 -11
  110. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
  111. package/fesm2022/mesgflow-ui-kit-select.mjs +6 -5
  112. package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
  113. package/fesm2022/mesgflow-ui-kit-sidebar.mjs +24 -21
  114. package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
  115. package/fesm2022/mesgflow-ui-kit-skeleton.mjs +6 -5
  116. package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
  117. package/fesm2022/mesgflow-ui-kit-slider.mjs +253 -6
  118. package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -1
  119. package/fesm2022/mesgflow-ui-kit-sortable.mjs +526 -0
  120. package/fesm2022/mesgflow-ui-kit-sortable.mjs.map +1 -0
  121. package/fesm2022/mesgflow-ui-kit-spinner.mjs +44 -15
  122. package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -1
  123. package/fesm2022/mesgflow-ui-kit-split-button.mjs +205 -0
  124. package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -0
  125. package/fesm2022/mesgflow-ui-kit-splitter.mjs +213 -6
  126. package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
  127. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +13 -6
  128. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
  129. package/fesm2022/mesgflow-ui-kit-stepper.mjs +171 -64
  130. package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
  131. package/fesm2022/mesgflow-ui-kit-switch.mjs +4 -4
  132. package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
  133. package/fesm2022/mesgflow-ui-kit-table.mjs +34 -28
  134. package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
  135. package/fesm2022/mesgflow-ui-kit-tabs.mjs +421 -180
  136. package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
  137. package/fesm2022/mesgflow-ui-kit-tag-input.mjs +9 -4
  138. package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
  139. package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +3 -3
  140. package/fesm2022/mesgflow-ui-kit-theming.mjs +7 -7
  141. package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
  142. package/fesm2022/mesgflow-ui-kit-time-picker.mjs +6 -6
  143. package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
  144. package/fesm2022/mesgflow-ui-kit-timeline.mjs +3 -3
  145. package/fesm2022/mesgflow-ui-kit-toast.mjs +118 -35
  146. package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
  147. package/fesm2022/mesgflow-ui-kit-toggle.mjs +12 -11
  148. package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
  149. package/fesm2022/mesgflow-ui-kit-toolbar.mjs +13 -11
  150. package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
  151. package/fesm2022/mesgflow-ui-kit-tooltip.mjs +76 -53
  152. package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
  153. package/fesm2022/mesgflow-ui-kit-tour.mjs +17 -29
  154. package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -1
  155. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +288 -0
  156. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs.map +1 -0
  157. package/fesm2022/mesgflow-ui-kit-tree-select.mjs +3 -3
  158. package/fesm2022/mesgflow-ui-kit-tree.mjs +4 -4
  159. package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -1
  160. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +109 -0
  161. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs.map +1 -0
  162. package/fesm2022/mesgflow-ui-kit.mjs +93 -12836
  163. package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
  164. package/package.json +91 -3
  165. package/schematics/collection.json +10 -0
  166. package/schematics/migration.json +10 -0
  167. package/schematics/migrations/v0-7.cjs +70 -0
  168. package/schematics/ng-add/index.cjs +234 -0
  169. package/schematics/ng-add/schema.json +43 -0
  170. package/tokens/color.css +96 -0
  171. package/tokens/controls.css +145 -0
  172. package/tokens/elevation.css +62 -6
  173. package/tokens/motion.css +304 -66
  174. package/tokens/radius.css +14 -0
  175. package/tokens.css +1 -0
  176. package/tokens.json +1583 -0
  177. package/types/mesgflow-ui-kit-agenda.d.ts +49 -0
  178. package/types/mesgflow-ui-kit-aspect-ratio.d.ts +18 -0
  179. package/types/mesgflow-ui-kit-blocks.d.ts +128 -0
  180. package/types/mesgflow-ui-kit-button.d.ts +23 -38
  181. package/types/mesgflow-ui-kit-card.d.ts +26 -16
  182. package/types/mesgflow-ui-kit-carousel.d.ts +51 -0
  183. package/types/mesgflow-ui-kit-checkbox.d.ts +8 -5
  184. package/types/mesgflow-ui-kit-code-block.d.ts +4 -1
  185. package/types/mesgflow-ui-kit-combobox.d.ts +47 -22
  186. package/types/mesgflow-ui-kit-command.d.ts +2 -2
  187. package/types/mesgflow-ui-kit-core.d.ts +279 -21
  188. package/types/mesgflow-ui-kit-countdown.d.ts +47 -0
  189. package/types/mesgflow-ui-kit-date-picker.d.ts +31 -1
  190. package/types/mesgflow-ui-kit-dialog.d.ts +122 -14
  191. package/types/mesgflow-ui-kit-drawer.d.ts +45 -0
  192. package/types/mesgflow-ui-kit-field.d.ts +17 -8
  193. package/types/mesgflow-ui-kit-file-upload.d.ts +64 -0
  194. package/types/mesgflow-ui-kit-hover-card.d.ts +2 -2
  195. package/types/mesgflow-ui-kit-icons-lucide.d.ts +27 -0
  196. package/types/mesgflow-ui-kit-inline-edit.d.ts +42 -0
  197. package/types/mesgflow-ui-kit-input.d.ts +64 -2
  198. package/types/mesgflow-ui-kit-lightbox.d.ts +54 -0
  199. package/types/mesgflow-ui-kit-listbox.d.ts +30 -0
  200. package/types/mesgflow-ui-kit-mention.d.ts +59 -0
  201. package/types/mesgflow-ui-kit-menu.d.ts +41 -2
  202. package/types/mesgflow-ui-kit-nav-menu.d.ts +58 -0
  203. package/types/mesgflow-ui-kit-notification-center.d.ts +41 -0
  204. package/types/mesgflow-ui-kit-number-input.d.ts +3 -1
  205. package/types/mesgflow-ui-kit-password-input.d.ts +35 -5
  206. package/types/mesgflow-ui-kit-popover.d.ts +13 -5
  207. package/types/mesgflow-ui-kit-progress.d.ts +33 -12
  208. package/types/mesgflow-ui-kit-qr-code.d.ts +160 -0
  209. package/types/mesgflow-ui-kit-radio.d.ts +2 -2
  210. package/types/mesgflow-ui-kit-search-input.d.ts +3 -1
  211. package/types/mesgflow-ui-kit-segmented-control.d.ts +4 -0
  212. package/types/mesgflow-ui-kit-sidebar.d.ts +1 -1
  213. package/types/mesgflow-ui-kit-slider.d.ts +60 -1
  214. package/types/mesgflow-ui-kit-sortable.d.ts +103 -0
  215. package/types/mesgflow-ui-kit-spinner.d.ts +5 -8
  216. package/types/mesgflow-ui-kit-split-button.d.ts +47 -0
  217. package/types/mesgflow-ui-kit-splitter.d.ts +64 -1
  218. package/types/mesgflow-ui-kit-stat-tile.d.ts +3 -0
  219. package/types/mesgflow-ui-kit-stepper.d.ts +54 -32
  220. package/types/mesgflow-ui-kit-table.d.ts +2 -0
  221. package/types/mesgflow-ui-kit-tabs.d.ts +193 -93
  222. package/types/mesgflow-ui-kit-tag-input.d.ts +3 -1
  223. package/types/mesgflow-ui-kit-toast.d.ts +48 -22
  224. package/types/mesgflow-ui-kit-tooltip.d.ts +15 -12
  225. package/types/mesgflow-ui-kit-transfer-list.d.ts +34 -0
  226. package/types/mesgflow-ui-kit-virtual-list.d.ts +35 -0
  227. package/types/mesgflow-ui-kit.d.ts +88 -5444
@@ -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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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { model, input, computed, forwardRef, Component, inject, Directive } from '@angular/core';
3
- import { nextId, cn } from '@mesgflow/ui-kit/core';
3
+ import { nextId, cn, focusRecipe } from '@mesgflow/ui-kit/core';
4
4
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
5
 
6
6
  /**
@@ -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',
@@ -75,8 +75,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
75
75
  const SIZE_CLASSES = { sm: 'h-3.5 w-3.5', md: 'h-4 w-4', lg: 'h-5 w-5' };
76
76
  /**
77
77
  * `<input type="radio" mfRadio [value]="'pro'" />` — `Checkbox` (bkz.
78
- * checkbox.ts) ile AYNI "native accent-color" deseni, `rounded-full` dışında
79
- * fark yok. Bir `mf-radio-group` ATASI ZORUNLU — `name`/`checked`/`disabled`
78
+ * checkbox.ts) ile AYNI desen — native input + `mf-radio` görsel katmanı
79
+ * (styles/tokens/controls.css, yay eğrisiyle büyüyen nokta). Bir `mf-radio-group` ATASI ZORUNLU — `name`/`checked`/`disabled`
80
80
  * DI ile ondan okunur (bkz. `radio-group.ts`'in JSDoc'u); grup dışında
81
81
  * kullanılırsa `inject(RadioGroup)` hata fırlatır (fail-fast).
82
82
  */
@@ -88,9 +88,7 @@ class Radio {
88
88
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
89
89
  disabled = input(false, /* @ts-ignore */
90
90
  ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
91
- classes = computed(() => cn(SIZE_CLASSES[this.size()], 'shrink-0 rounded-full border-border accent-primary-600 dark:accent-primary-400 transition-colors duration-fast ease-emphasis ' +
92
- 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +
93
- 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50'), /* @ts-ignore */
91
+ classes = computed(() => cn('mf-radio', SIZE_CLASSES[this.size()], focusRecipe), /* @ts-ignore */
94
92
  ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
95
93
  onChange() {
96
94
  const value = this.value();
@@ -98,10 +96,10 @@ class Radio {
98
96
  this.group.onRadioChange(value);
99
97
  }
100
98
  }
101
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Radio, deps: [], target: i0.ɵɵFactoryTarget.Directive });
102
- 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 });
103
101
  }
104
- 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: [{
105
103
  type: Directive,
106
104
  args: [{
107
105
  selector: 'input[type=radio][mfRadio]',
@@ -1 +1 @@
1
- {"version":3,"file":"mesgflow-ui-kit-radio.mjs","sources":["../../../projects/ui-kit/radio/radio-group.ts","../../../projects/ui-kit/radio/radio.ts","../../../projects/ui-kit/radio/mesgflow-ui-kit-radio.ts"],"sourcesContent":["import { Component, computed, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { nextId } from '@mesgflow/ui-kit/core';\r\n\r\nexport type RadioGroupOrientation = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * `<mf-radio-group [(value)]=\"plan\"><label><input type=\"radio\" mfRadio\r\n * [value]=\"'pro'\" /> Pro</label>...</mf-radio-group>`\r\n *\r\n * Projekte edilen `input[mfRadio]` öğeleri DI ile bu bileşene bağlanır\r\n * (`Radio`'nun `inject(RadioGroup)`'u — bkz. `radio.ts`), `name`/`checked`/\r\n * `disabled` GRUPTAN gelir; her `mfRadio` KENDİ `mf-radio-group` atası\r\n * DIŞINDA kullanılamaz.\r\n *\r\n * Ok tuşu navigasyonu/roving tabindex için ÖZEL bir odak yöneticisi\r\n * (`@angular/aria`'da radio pattern'i olmadığı için akla gelen CDK\r\n * `FocusKeyManager`) BİLEREK YOK — hepsi AYNI native `name` attribute'unu\r\n * paylaşan gerçek `<input type=\"radio\">` öğeleri olduğu için tarayıcı bunu\r\n * ZATEN ücretsiz sağlıyor (native radio grubu semantiği). Üstüne bir odak\r\n * yöneticisi eklemek gerçek davranışı TEKRARLAYIP çakıştırırdı.\r\n */\r\n@Component({\r\n selector: 'mf-radio-group',\r\n exportAs: 'mfRadioGroup',\r\n host: {\r\n role: 'radiogroup',\r\n '[class]': 'hostClasses()',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.aria-orientation]': 'orientation()',\r\n },\r\n template: '<ng-content />',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioGroup), multi: true },\r\n ],\r\n})\r\nexport class RadioGroup<T = unknown> implements ControlValueAccessor {\r\n readonly value = model<T | null>(null);\r\n readonly name = input(nextId('mf-radio-group'));\r\n readonly orientation = input<RadioGroupOrientation>('vertical');\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input('');\r\n\r\n private onChange: (value: T | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected readonly hostClasses = computed(() =>\r\n this.orientation() === 'horizontal' ? 'flex items-center gap-4' : 'flex flex-col gap-2',\r\n );\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n registerOnChange(fn: (value: T | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /** `Radio`'nun `(change)` işleyicisinden çağrılır — bkz. `radio.ts`. */\r\n onRadioChange(value: T): void {\r\n this.value.set(value);\r\n this.onChange(value);\r\n this.onTouched();\r\n }\r\n}\r\n","import { Directive, computed, inject, input } from '@angular/core';\r\nimport { cn, type MfSize } from '@mesgflow/ui-kit/core';\r\nimport { RadioGroup } from './radio-group';\r\n\r\nconst SIZE_CLASSES: Record<MfSize, string> = { sm: 'h-3.5 w-3.5', md: 'h-4 w-4', lg: 'h-5 w-5' };\r\n\r\n/**\r\n * `<input type=\"radio\" mfRadio [value]=\"'pro'\" />` — `Checkbox` (bkz.\r\n * checkbox.ts) ile AYNI \"native accent-color\" deseni, `rounded-full` dışında\r\n * fark yok. Bir `mf-radio-group` ATASI ZORUNLU — `name`/`checked`/`disabled`\r\n * DI ile ondan okunur (bkz. `radio-group.ts`'in JSDoc'u); grup dışında\r\n * kullanılırsa `inject(RadioGroup)` hata fırlatır (fail-fast).\r\n */\r\n@Directive({\r\n selector: 'input[type=radio][mfRadio]',\r\n host: {\r\n '[class]': 'classes()',\r\n '[attr.name]': 'group.name()',\r\n '[checked]': 'group.value() === value()',\r\n '[disabled]': 'group.disabled() || disabled()',\r\n '(change)': 'onChange()',\r\n },\r\n})\r\nexport class Radio<T = unknown> {\r\n protected readonly group = inject<RadioGroup<T>>(RadioGroup);\r\n\r\n readonly size = input<MfSize>('md');\r\n readonly value = input<T | undefined>(undefined);\r\n readonly disabled = input(false);\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n SIZE_CLASSES[this.size()],\r\n 'shrink-0 rounded-full border-border accent-primary-600 dark:accent-primary-400 transition-colors duration-fast ease-emphasis ' +\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\r\n ),\r\n );\r\n\r\n protected onChange(): void {\r\n const value = this.value();\r\n if (value !== undefined) {\r\n this.group.onRadioChange(value);\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mesgflow-ui-kit-radio.mjs","sources":["../../../projects/ui-kit/radio/radio-group.ts","../../../projects/ui-kit/radio/radio.ts","../../../projects/ui-kit/radio/mesgflow-ui-kit-radio.ts"],"sourcesContent":["import { Component, computed, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { nextId } from '@mesgflow/ui-kit/core';\r\n\r\nexport type RadioGroupOrientation = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * `<mf-radio-group [(value)]=\"plan\"><label><input type=\"radio\" mfRadio\r\n * [value]=\"'pro'\" /> Pro</label>...</mf-radio-group>`\r\n *\r\n * Projekte edilen `input[mfRadio]` öğeleri DI ile bu bileşene bağlanır\r\n * (`Radio`'nun `inject(RadioGroup)`'u — bkz. `radio.ts`), `name`/`checked`/\r\n * `disabled` GRUPTAN gelir; her `mfRadio` KENDİ `mf-radio-group` atası\r\n * DIŞINDA kullanılamaz.\r\n *\r\n * Ok tuşu navigasyonu/roving tabindex için ÖZEL bir odak yöneticisi\r\n * (`@angular/aria`'da radio pattern'i olmadığı için akla gelen CDK\r\n * `FocusKeyManager`) BİLEREK YOK — hepsi AYNI native `name` attribute'unu\r\n * paylaşan gerçek `<input type=\"radio\">` öğeleri olduğu için tarayıcı bunu\r\n * ZATEN ücretsiz sağlıyor (native radio grubu semantiği). Üstüne bir odak\r\n * yöneticisi eklemek gerçek davranışı TEKRARLAYIP çakıştırırdı.\r\n */\r\n@Component({\r\n selector: 'mf-radio-group',\r\n exportAs: 'mfRadioGroup',\r\n host: {\r\n role: 'radiogroup',\r\n '[class]': 'hostClasses()',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.aria-orientation]': 'orientation()',\r\n },\r\n template: '<ng-content />',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioGroup), multi: true },\r\n ],\r\n})\r\nexport class RadioGroup<T = unknown> implements ControlValueAccessor {\r\n readonly value = model<T | null>(null);\r\n readonly name = input(nextId('mf-radio-group'));\r\n readonly orientation = input<RadioGroupOrientation>('vertical');\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input('');\r\n\r\n private onChange: (value: T | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected readonly hostClasses = computed(() =>\r\n this.orientation() === 'horizontal' ? 'flex items-center gap-4' : 'flex flex-col gap-2',\r\n );\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n registerOnChange(fn: (value: T | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /** `Radio`'nun `(change)` işleyicisinden çağrılır — bkz. `radio.ts`. */\r\n onRadioChange(value: T): void {\r\n this.value.set(value);\r\n this.onChange(value);\r\n this.onTouched();\r\n }\r\n}\r\n","import { Directive, computed, inject, input } from '@angular/core';\r\nimport { cn, type MfSize, focusRecipe } from '@mesgflow/ui-kit/core';\r\nimport { RadioGroup } from './radio-group';\r\n\r\nconst SIZE_CLASSES: Record<MfSize, string> = { sm: 'h-3.5 w-3.5', md: 'h-4 w-4', lg: 'h-5 w-5' };\r\n\r\n/**\r\n * `<input type=\"radio\" mfRadio [value]=\"'pro'\" />` — `Checkbox` (bkz.\r\n * checkbox.ts) ile AYNI desen — native input + `mf-radio` görsel katmanı\r\n * (styles/tokens/controls.css, yay eğrisiyle büyüyen nokta). Bir `mf-radio-group` ATASI ZORUNLU — `name`/`checked`/`disabled`\r\n * DI ile ondan okunur (bkz. `radio-group.ts`'in JSDoc'u); grup dışında\r\n * kullanılırsa `inject(RadioGroup)` hata fırlatır (fail-fast).\r\n */\r\n@Directive({\r\n selector: 'input[type=radio][mfRadio]',\r\n host: {\r\n '[class]': 'classes()',\r\n '[attr.name]': 'group.name()',\r\n '[checked]': 'group.value() === value()',\r\n '[disabled]': 'group.disabled() || disabled()',\r\n '(change)': 'onChange()',\r\n },\r\n})\r\nexport class Radio<T = unknown> {\r\n protected readonly group = inject<RadioGroup<T>>(RadioGroup);\r\n\r\n readonly size = input<MfSize>('md');\r\n readonly value = input<T | undefined>(undefined);\r\n readonly disabled = input(false);\r\n\r\n protected readonly classes = computed(() =>\r\n cn('mf-radio', SIZE_CLASSES[this.size()], focusRecipe),\r\n );\r\n\r\n protected onChange(): void {\r\n const value = this.value();\r\n if (value !== undefined) {\r\n this.group.onRadioChange(value);\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAMA;;;;;;;;;;;;;;;AAeG;MAeU,UAAU,CAAA;IACZ,KAAK,GAAG,KAAK,CAAW,IAAI;8EAAC;AAC7B,IAAA,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC;6EAAC;IACtC,WAAW,GAAG,KAAK,CAAwB,UAAU;oFAAC;IACtD,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;IACvB,SAAS,GAAG,KAAK,CAAC,EAAE;kFAAC;AAEtB,IAAA,QAAQ,GAA8B,MAAK,EAAE,CAAC;AAC9C,IAAA,SAAS,GAAe,MAAK,EAAE,CAAC;AAErB,IAAA,WAAW,GAAG,QAAQ,CAAC,MACxC,IAAI,CAAC,WAAW,EAAE,KAAK,YAAY,GAAG,yBAAyB,GAAG,qBAAqB;oFACxF;AAED,IAAA,UAAU,CAAC,KAAe,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AAEA,IAAA,gBAAgB,CAAC,EAA6B,EAAA;AAC5C,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE;IACpB;AAEA,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;;AAGA,IAAA,aAAa,CAAC,KAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACpB,IAAI,CAAC,SAAS,EAAE;IAClB;uGA/BW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,UAAA,EAAA,EAAA,MAAA,EAAA,YAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAJV;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACvF,SAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAHS,gBAAgB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAKf,UAAU,EAAA,UAAA,EAAA,CAAA;kBAdtB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,YAAY;AAClB,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,mBAAmB,EAAE,qBAAqB;AAC1C,wBAAA,yBAAyB,EAAE,eAAe;AAC3C,qBAAA;AACD,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AACvF,qBAAA;AACF,iBAAA;;;AC/BD,MAAM,YAAY,GAA2B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE;AAEhG;;;;;;AAMG;MAWU,KAAK,CAAA;AACG,IAAA,KAAK,GAAG,MAAM,CAAgB,UAAU,CAAC;IAEnD,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;IAC1B,KAAK,GAAG,KAAK,CAAgB,SAAS;8EAAC;IACvC,QAAQ,GAAG,KAAK,CAAC,KAAK;iFAAC;AAEb,IAAA,OAAO,GAAG,QAAQ,CAAC,MACpC,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC;gFACvD;IAES,QAAQ,GAAA;AAChB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;QACjC;IACF;uGAhBW,KAAK,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAL,KAAK,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,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,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,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,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,YAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,WAAA,EAAA,cAAA,EAAA,SAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,gCAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAL,KAAK,EAAA,UAAA,EAAA,CAAA;kBAVjB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,aAAa,EAAE,cAAc;AAC7B,wBAAA,WAAW,EAAE,2BAA2B;AACxC,wBAAA,YAAY,EAAE,gCAAgC;AAC9C,wBAAA,UAAU,EAAE,YAAY;AACzB,qBAAA;AACF,iBAAA;;;ACtBD;;AAEG;;"}
@@ -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=\"text-warning\">star</span>\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',
@@ -105,7 +105,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
105
105
  '[attr.aria-label]': 'hostLabel()',
106
106
  '[attr.aria-disabled]': 'isDisabled() || null',
107
107
  '(pointerleave)': 'hover.set(null)',
108
- }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Rating), multi: true }], 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=\"text-warning\">star</span>\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" }]
108
+ }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Rating), multi: true }], 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" }]
109
109
  }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], allowClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowClear", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
110
110
 
111
111
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mesgflow-ui-kit-rating.mjs","sources":["../../../projects/ui-kit/rating/rating.ts","../../../projects/ui-kit/rating/rating.html","../../../projects/ui-kit/rating/mesgflow-ui-kit-rating.ts"],"sourcesContent":["import {\r\n Component,\r\n booleanAttribute,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { MF_RATING_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\n\r\nlet ratingIdSeq = 0;\r\n\r\n/**\r\n * `<mf-rating [(value)]=\"score\" />` · salt okunur ortalama: `<mf-rating [value]=\"3.7\" readonly />`\r\n *\r\n * Etkileşimli mod yerel `<input type=\"radio\">`'lar üzerine kurulu (görsel olarak gizli): ok tuşu\r\n * gezinmesi, tek sekme durağı, form davranışı tarayıcıdan gelir — `role=\"radiogroup\"` + her\r\n * yıldız \"3 out of 5\" gibi adlı bir radyo. Üzerine gelince önizleme; seçili yıldıza tekrar\r\n * tıklamak temizler (`allowClear`). Salt okunur mod tek bir `role=\"img\"` (\"3.7 out of 5\");\r\n * ondalıklar yıldızın kısmen dolmasıyla gösterilir (ortalama puanlar için).\r\n */\r\n@Component({\r\n selector: 'mf-rating',\r\n exportAs: 'mfRating',\r\n imports: [Icon, NgTemplateOutlet],\r\n host: {\r\n class: 'inline-flex',\r\n '[attr.role]': \"readonly() ? 'img' : 'radiogroup'\",\r\n '[attr.aria-label]': 'hostLabel()',\r\n '[attr.aria-disabled]': 'isDisabled() || null',\r\n '(pointerleave)': 'hover.set(null)',\r\n },\r\n templateUrl: './rating.html',\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Rating), multi: true }],\r\n})\r\nexport class Rating extends ValueAccessorBase<number> implements ControlValueAccessor {\r\n readonly value = model(0);\r\n readonly max = input(5);\r\n readonly readonly = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n /** Seçili yıldıza tekrar tıklamak değeri 0'a çeker. */\r\n readonly allowClear = input(true, { transform: booleanAttribute });\r\n readonly size = input(20);\r\n /** Verilmezse `MfLabels.rating.ariaLabel`. */\r\n readonly ariaLabel = input<string>();\r\n\r\n protected readonly labels = inject(MF_RATING_LABELS);\r\n protected readonly name = `mf-rating-${++ratingIdSeq}`;\r\n protected readonly hover = signal<number | null>(null);\r\n private readonly formDisabled = signal(false);\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\r\n protected readonly stars = computed(() => Array.from({ length: this.max() }, (_, i) => i + 1));\r\n /** Görüntülenen değer — önizleme varsa o, yoksa gerçek değer. */\r\n protected readonly shown = computed(() => this.hover() ?? this.value());\r\n\r\n protected readonly hostLabel = computed(() => {\r\n const base = this.ariaLabel() ?? this.labels().ariaLabel;\r\n if (!this.readonly()) return base;\r\n const rounded = Math.round(this.value() * 10) / 10;\r\n return `${base}: ${rounded} ${this.labels().outOf} ${this.max()}`;\r\n });\r\n\r\n /** Yıldızın doluluk yüzdesi (0–100) — salt okunur ondalıklar için kısmi. */\r\n protected fill(star: number): number {\r\n const amount = this.shown() - (star - 1);\r\n return Math.round(Math.min(1, Math.max(0, amount)) * 100);\r\n }\r\n\r\n protected starLabel(star: number): string {\r\n return `${star} ${this.labels().outOf} ${this.max()}`;\r\n }\r\n\r\n /**\r\n * TEK giriş noktası `click`: tarayıcı ok tuşuyla radyo seçiminde de `click` üretir. `change`\r\n * ayrıca dinlenmez — seçili radyoya tıklamak `change` üretmediğinden temizleme yalnızca\r\n * click'te yakalanabiliyor, ikisini birden dinlemek ise yeni seçimde çift tetiklenirdi.\r\n */\r\n protected choose(star: number): void {\r\n if (this.readonly() || this.isDisabled()) return;\r\n const next = this.allowClear() && star === this.value() ? 0 : star;\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * Klavyeyle temizleme: Delete/Backspace. Seçili radyoda Space tarayıcıda `click` üretmez\r\n * (radyo zaten seçili — gerçek tarayıcıda doğrulandı), bu yüzden fareyle yeniden tıklamanın\r\n * klavye karşılığı ayrı bir tuş.\r\n */\r\n protected clear(event: Event): void {\r\n if (this.readonly() || this.isDisabled() || !this.allowClear() || this.value() === 0) return;\r\n event.preventDefault();\r\n this.value.set(0);\r\n this.onChange(0);\r\n this.onTouched();\r\n }\r\n\r\n protected preview(star: number | null): void {\r\n if (!this.readonly() && !this.isDisabled()) this.hover.set(star);\r\n }\r\n\r\n writeValue(value: number | null): void {\r\n this.value.set(value ?? 0);\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.formDisabled.set(disabled);\r\n }\r\n}\r\n","@for (star of stars(); track star) {\r\n <!-- Görsel yıldız: boş taban + üstte doluluk yüzdesi kadar kırpılmış dolu yıldız. -->\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=\"text-warning\">star</span>\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mesgflow-ui-kit-rating.mjs","sources":["../../../projects/ui-kit/rating/rating.ts","../../../projects/ui-kit/rating/rating.html","../../../projects/ui-kit/rating/mesgflow-ui-kit-rating.ts"],"sourcesContent":["import {\r\n Component,\r\n booleanAttribute,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { MF_RATING_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\n\r\nlet ratingIdSeq = 0;\r\n\r\n/**\r\n * `<mf-rating [(value)]=\"score\" />` · salt okunur ortalama: `<mf-rating [value]=\"3.7\" readonly />`\r\n *\r\n * Etkileşimli mod yerel `<input type=\"radio\">`'lar üzerine kurulu (görsel olarak gizli): ok tuşu\r\n * gezinmesi, tek sekme durağı, form davranışı tarayıcıdan gelir — `role=\"radiogroup\"` + her\r\n * yıldız \"3 out of 5\" gibi adlı bir radyo. Üzerine gelince önizleme; seçili yıldıza tekrar\r\n * tıklamak temizler (`allowClear`). Salt okunur mod tek bir `role=\"img\"` (\"3.7 out of 5\");\r\n * ondalıklar yıldızın kısmen dolmasıyla gösterilir (ortalama puanlar için).\r\n */\r\n@Component({\r\n selector: 'mf-rating',\r\n exportAs: 'mfRating',\r\n imports: [Icon, NgTemplateOutlet],\r\n host: {\r\n class: 'inline-flex',\r\n '[attr.role]': \"readonly() ? 'img' : 'radiogroup'\",\r\n '[attr.aria-label]': 'hostLabel()',\r\n '[attr.aria-disabled]': 'isDisabled() || null',\r\n '(pointerleave)': 'hover.set(null)',\r\n },\r\n templateUrl: './rating.html',\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Rating), multi: true }],\r\n})\r\nexport class Rating extends ValueAccessorBase<number> implements ControlValueAccessor {\r\n readonly value = model(0);\r\n readonly max = input(5);\r\n readonly readonly = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n /** Seçili yıldıza tekrar tıklamak değeri 0'a çeker. */\r\n readonly allowClear = input(true, { transform: booleanAttribute });\r\n readonly size = input(20);\r\n /** Verilmezse `MfLabels.rating.ariaLabel`. */\r\n readonly ariaLabel = input<string>();\r\n\r\n protected readonly labels = inject(MF_RATING_LABELS);\r\n protected readonly name = `mf-rating-${++ratingIdSeq}`;\r\n protected readonly hover = signal<number | null>(null);\r\n private readonly formDisabled = signal(false);\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\r\n protected readonly stars = computed(() => Array.from({ length: this.max() }, (_, i) => i + 1));\r\n /** Görüntülenen değer — önizleme varsa o, yoksa gerçek değer. */\r\n protected readonly shown = computed(() => this.hover() ?? this.value());\r\n\r\n protected readonly hostLabel = computed(() => {\r\n const base = this.ariaLabel() ?? this.labels().ariaLabel;\r\n if (!this.readonly()) return base;\r\n const rounded = Math.round(this.value() * 10) / 10;\r\n return `${base}: ${rounded} ${this.labels().outOf} ${this.max()}`;\r\n });\r\n\r\n /** Yıldızın doluluk yüzdesi (0–100) — salt okunur ondalıklar için kısmi. */\r\n protected fill(star: number): number {\r\n const amount = this.shown() - (star - 1);\r\n return Math.round(Math.min(1, Math.max(0, amount)) * 100);\r\n }\r\n\r\n protected starLabel(star: number): string {\r\n return `${star} ${this.labels().outOf} ${this.max()}`;\r\n }\r\n\r\n /**\r\n * TEK giriş noktası `click`: tarayıcı ok tuşuyla radyo seçiminde de `click` üretir. `change`\r\n * ayrıca dinlenmez — seçili radyoya tıklamak `change` üretmediğinden temizleme yalnızca\r\n * click'te yakalanabiliyor, ikisini birden dinlemek ise yeni seçimde çift tetiklenirdi.\r\n */\r\n protected choose(star: number): void {\r\n if (this.readonly() || this.isDisabled()) return;\r\n const next = this.allowClear() && star === this.value() ? 0 : star;\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * Klavyeyle temizleme: Delete/Backspace. Seçili radyoda Space tarayıcıda `click` üretmez\r\n * (radyo zaten seçili — gerçek tarayıcıda doğrulandı), bu yüzden fareyle yeniden tıklamanın\r\n * klavye karşılığı ayrı bir tuş.\r\n */\r\n protected clear(event: Event): void {\r\n if (this.readonly() || this.isDisabled() || !this.allowClear() || this.value() === 0) return;\r\n event.preventDefault();\r\n this.value.set(0);\r\n this.onChange(0);\r\n this.onTouched();\r\n }\r\n\r\n protected preview(star: number | null): void {\r\n if (!this.readonly() && !this.isDisabled()) this.hover.set(star);\r\n }\r\n\r\n writeValue(value: number | null): void {\r\n this.value.set(value ?? 0);\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.formDisabled.set(disabled);\r\n }\r\n}\r\n","@for (star of stars(); track star) {\r\n <!-- Görsel yıldız: boş taban + üstte doluluk yüzdesi kadar kırpılmış dolu yıldız. -->\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -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',
@@ -4,6 +4,7 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
4
  import { ValueAccessorBase, MF_SEARCH_INPUT_LABELS } from '@mesgflow/ui-kit/core';
5
5
  import { Icon } from '@mesgflow/ui-kit/icon';
6
6
  import { Input } from '@mesgflow/ui-kit/input';
7
+ import { Spinner } from '@mesgflow/ui-kit/spinner';
7
8
  import { Tooltip } from '@mesgflow/ui-kit/tooltip';
8
9
 
9
10
  /**
@@ -24,6 +25,9 @@ class SearchInput extends ValueAccessorBase {
24
25
  ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
25
26
  placeholder = input(/* @ts-ignore */
26
27
  ...(ngDevMode ? [undefined, { debugName: "placeholder" }] : /* istanbul ignore next */ []));
28
+ /** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */
29
+ inputId = input(/* @ts-ignore */
30
+ ...(ngDevMode ? [undefined, { debugName: "inputId" }] : /* istanbul ignore next */ []));
27
31
  ariaLabel = input(/* @ts-ignore */
28
32
  ...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
29
33
  tooltipLabel = input(/* @ts-ignore */
@@ -134,17 +138,17 @@ class SearchInput extends ValueAccessorBase {
134
138
  else
135
139
  this.inputEl()?.nativeElement.blur();
136
140
  }
137
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: SearchInput, deps: [], target: i0.ɵɵFactoryTarget.Component });
138
- 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 }, 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: [
139
143
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SearchInput), multi: true },
140
- ], 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 <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 [class.animate-spin]=\"showSpinner()\"\r\n >{{ showSpinner() ? 'progress_activity' : 'search' }}</span\r\n >\r\n <input\r\n mfInput\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=\"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: "directive", type: Tooltip, selector: "[mfTooltip], [mfTooltipContent]", inputs: ["mfTooltip", "mfTooltipContent", "tooltipPosition"], exportAs: ["mfTooltip"] }] });
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"] }] });
141
145
  }
142
- 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: [{
143
147
  type: Component,
144
- args: [{ selector: 'mf-search-input', exportAs: 'mfSearchInput', imports: [Icon, Input, Tooltip], host: { class: 'inline-block', '[class.w-full]': 'fullWidth()' }, providers: [
148
+ args: [{ selector: 'mf-search-input', exportAs: 'mfSearchInput', imports: [Icon, Input, Spinner, Tooltip], host: { class: 'inline-block', '[class.w-full]': 'fullWidth()' }, providers: [
145
149
  { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SearchInput), multi: true },
146
- ], template: "<div class=\"relative inline-flex items-center\" [class.w-full]=\"fullWidth()\">\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 [class.animate-spin]=\"showSpinner()\"\r\n >{{ showSpinner() ? 'progress_activity' : 'search' }}</span\r\n >\r\n <input\r\n mfInput\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=\"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" }]
147
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], tooltipLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipLabel", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], debounceMs: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounceMs", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], inputEl: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }], tooltipRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => Tooltip), { isSignal: true }] }] } });
150
+ ], 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" }]
151
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], tooltipLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "tooltipLabel", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], debounceMs: [{ type: i0.Input, args: [{ isSignal: true, alias: "debounceMs", required: false }] }], collapsible: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsible", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], inputEl: [{ type: i0.ViewChild, args: ['inputEl', { isSignal: true }] }], tooltipRef: [{ type: i0.ViewChild, args: [i0.forwardRef(() => Tooltip), { isSignal: true }] }] } });
148
152
 
149
153
  /**
150
154
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"mesgflow-ui-kit-search-input.mjs","sources":["../../../projects/ui-kit/search-input/search-input.ts","../../../projects/ui-kit/search-input/search-input.html","../../../projects/ui-kit/search-input/mesgflow-ui-kit-search-input.ts"],"sourcesContent":["import {\r\n Component,\r\n ElementRef,\r\n computed,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { MF_SEARCH_INPUT_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Input } from '@mesgflow/ui-kit/input';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\n\r\n/**\r\n * `<mf-search-input [(value)]=\"term\" [loading]=\"fetching()\" placeholder=\"Ara...\" />`\r\n *\r\n * Kapalıyken sadece bir ikon-buton genişliğinde (ikon tıklanabilir/odaklanabilir\r\n * — hem mouse hem klavye ile genişliyor), odak alınca/tıklanınca genişliyor.\r\n * Yazarken debounce süresi boyunca VE (varsa) dışarıdan verilen `loading`\r\n * true olduğu sürece dönen bir spinner gösteriyor — \"arıyor\" hissi debounce\r\n * bitiminde kaybolmuyor, gerçek sorgu sonucu gelene kadar sürüyor.\r\n *\r\n * Component (directive değil) — Field/Switch gibi gerçek iç yapı (ikon+input+\r\n * temizle butonu+genişleme animasyonu) gerektiriyor (bkz. projects/ui-kit/README.md\r\n * \"Directive mi, component mi?\").\r\n */\r\n@Component({\r\n selector: 'mf-search-input',\r\n exportAs: 'mfSearchInput',\r\n imports: [Icon, Input, Tooltip],\r\n host: { class: 'inline-block', '[class.w-full]': 'fullWidth()' },\r\n templateUrl: './search-input.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SearchInput), multi: true },\r\n ],\r\n})\r\nexport class SearchInput extends ValueAccessorBase<string> implements ControlValueAccessor {\r\n readonly value = model('');\r\n readonly placeholder = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly tooltipLabel = input<string>();\r\n /** Tüketicinin gerçek veri çekme durumu — debounce bittikten sonra da spinner'ı sürdürür. */\r\n readonly loading = input(false);\r\n readonly debounceMs = input(300);\r\n /**\r\n * `false` → her zaman tam genişlikte açık, ikon tıklanabilir bir \"kapı\"\r\n * değil (bkz. `table/table.ts` — bir VERİ TABLOSUNDA arama gizlenmez,\r\n * bu bir navbar deseni; Table `[collapsible]=\"false\"` geçiyor).\r\n * Varsayılan `true` — bu bileşenin bugünkü tek gerçek davranışı, henüz\r\n * başka bir tüketici yok ama gelecekte navbar/toolbar gibi dar bağlamlarda\r\n * ihtiyaç olabilir diye korunuyor.\r\n */\r\n readonly collapsible = input(true);\r\n /**\r\n * `true` → kutu sabit `w-64` (256px) yerine kapsayıcısının TAM genişliğinde\r\n * açılır — kutunun panelin geri kalanıyla (ör. yan yana duran bir sekme\r\n * listesiyle) aynı genişlikte hizalanması gereken bağlamlar için.\r\n * `collapsible` ile birlikte anlamlı (`[collapsible]=\"false\"` olmadan\r\n * daralmış hâl `w-10` sabit kalır, `fullWidth` sadece GENİŞLEMİŞ genişliği\r\n * değiştirir). Varsayılan `false` — navbar/toolbar'daki bugünkü sabit\r\n * genişlik davranışı değişmez.\r\n */\r\n readonly fullWidth = input(false);\r\n\r\n private readonly searchInputLabels = inject(MF_SEARCH_INPUT_LABELS);\r\n protected readonly effectivePlaceholder = computed(\r\n () => this.placeholder() ?? this.searchInputLabels().placeholder,\r\n );\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.searchInputLabels().ariaLabel,\r\n );\r\n protected readonly effectiveTooltipLabel = computed(\r\n () => this.tooltipLabel() ?? this.searchInputLabels().ariaLabel,\r\n );\r\n protected readonly effectiveClearAriaLabel = computed(\r\n () => this.searchInputLabels().clearAriaLabel,\r\n );\r\n\r\n private readonly expandedState = signal(false);\r\n /** `collapsible()` false ise HER ZAMAN true — genişleme mekaniği devre dışı kalır ama `expandedState` yine de \"odaklanınca tooltip'i kapat\" gibi yan mantık için iç durumu takip etmeye devam eder. */\r\n protected readonly expanded = computed(() => !this.collapsible() || this.expandedState());\r\n /** `w-64`/`w-10` yerine `w-full` — bkz. `fullWidth` doc yorumu. */\r\n protected readonly inputWidthClass = computed(() =>\r\n this.fullWidth()\r\n ? 'w-full cursor-text pe-8 ps-9'\r\n : this.expanded()\r\n ? 'w-64 cursor-text pe-8 ps-9'\r\n : 'w-10 cursor-pointer caret-transparent pe-2 ps-9',\r\n );\r\n protected readonly draft = signal('');\r\n protected readonly pending = signal(false);\r\n protected readonly showSpinner = computed(() => this.pending() || this.loading());\r\n\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\r\n private readonly tooltipRef = viewChild(Tooltip);\r\n private debounceHandle?: ReturnType<typeof setTimeout>;\r\n\r\n constructor() {\r\n super();\r\n // Dışarıdan (ör. \"Filtreleri temizle\") value() sıfırlanırsa draft de eşlensin.\r\n effect(() => {\r\n const current = this.value();\r\n untracked(() => this.draft.set(current));\r\n });\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value);\r\n }\r\n\r\n protected expand(): void {\r\n this.expandedState.set(true);\r\n // Tooltip'in kendi `(focus)` dinleyicisi AYNI olayda tetiklendiğinden\r\n // (\"Ara...\" balonu) genişlemiş, placeholder'ı zaten aynı metni gösteren\r\n // input'un üstünde gereksiz kalıyordu — anında kapatılıyor (gerçek bulgu).\r\n this.tooltipRef()?.hide();\r\n }\r\n\r\n protected collapseIfEmpty(): void {\r\n if (!this.draft().trim()) this.expandedState.set(false);\r\n }\r\n\r\n protected onInput(raw: string): void {\r\n this.draft.set(raw);\r\n this.pending.set(true);\r\n this.onTouched();\r\n clearTimeout(this.debounceHandle);\r\n this.debounceHandle = setTimeout(() => {\r\n this.pending.set(false);\r\n this.value.set(raw);\r\n this.onChange(raw);\r\n }, this.debounceMs());\r\n }\r\n\r\n protected clear(): void {\r\n clearTimeout(this.debounceHandle);\r\n this.pending.set(false);\r\n this.draft.set('');\r\n this.value.set('');\r\n this.onChange('');\r\n this.onTouched();\r\n this.inputEl()?.nativeElement.focus();\r\n }\r\n\r\n protected onEscape(): void {\r\n if (this.draft()) this.clear();\r\n else this.inputEl()?.nativeElement.blur();\r\n }\r\n}\r\n","<div class=\"relative inline-flex items-center\" [class.w-full]=\"fullWidth()\">\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 [class.animate-spin]=\"showSpinner()\"\r\n >{{ showSpinner() ? 'progress_activity' : 'search' }}</span\r\n >\r\n <input\r\n mfInput\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=\"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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mesgflow-ui-kit-search-input.mjs","sources":["../../../projects/ui-kit/search-input/search-input.ts","../../../projects/ui-kit/search-input/search-input.html","../../../projects/ui-kit/search-input/mesgflow-ui-kit-search-input.ts"],"sourcesContent":["import {\r\n Component,\r\n ElementRef,\r\n computed,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { MF_SEARCH_INPUT_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Input } from '@mesgflow/ui-kit/input';\r\nimport { Spinner } from '@mesgflow/ui-kit/spinner';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\n\r\n/**\r\n * `<mf-search-input [(value)]=\"term\" [loading]=\"fetching()\" placeholder=\"Ara...\" />`\r\n *\r\n * Kapalıyken sadece bir ikon-buton genişliğinde (ikon tıklanabilir/odaklanabilir\r\n * — hem mouse hem klavye ile genişliyor), odak alınca/tıklanınca genişliyor.\r\n * Yazarken debounce süresi boyunca VE (varsa) dışarıdan verilen `loading`\r\n * true olduğu sürece dönen bir spinner gösteriyor — \"arıyor\" hissi debounce\r\n * bitiminde kaybolmuyor, gerçek sorgu sonucu gelene kadar sürüyor.\r\n *\r\n * Component (directive değil) — Field/Switch gibi gerçek iç yapı (ikon+input+\r\n * temizle butonu+genişleme animasyonu) gerektiriyor (bkz. projects/ui-kit/README.md\r\n * \"Directive mi, component mi?\").\r\n */\r\n@Component({\r\n selector: 'mf-search-input',\r\n exportAs: 'mfSearchInput',\r\n imports: [Icon, Input, Spinner, Tooltip],\r\n host: { class: 'inline-block', '[class.w-full]': 'fullWidth()' },\r\n templateUrl: './search-input.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SearchInput), multi: true },\r\n ],\r\n})\r\nexport class SearchInput extends ValueAccessorBase<string> implements ControlValueAccessor {\r\n readonly value = model('');\r\n readonly placeholder = input<string>();\r\n /** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */\r\n readonly inputId = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly tooltipLabel = input<string>();\r\n /** Tüketicinin gerçek veri çekme durumu — debounce bittikten sonra da spinner'ı sürdürür. */\r\n readonly loading = input(false);\r\n readonly debounceMs = input(300);\r\n /**\r\n * `false` → her zaman tam genişlikte açık, ikon tıklanabilir bir \"kapı\"\r\n * değil (bkz. `table/table.ts` — bir VERİ TABLOSUNDA arama gizlenmez,\r\n * bu bir navbar deseni; Table `[collapsible]=\"false\"` geçiyor).\r\n * Varsayılan `true` — bu bileşenin bugünkü tek gerçek davranışı, henüz\r\n * başka bir tüketici yok ama gelecekte navbar/toolbar gibi dar bağlamlarda\r\n * ihtiyaç olabilir diye korunuyor.\r\n */\r\n readonly collapsible = input(true);\r\n /**\r\n * `true` → kutu sabit `w-64` (256px) yerine kapsayıcısının TAM genişliğinde\r\n * açılır — kutunun panelin geri kalanıyla (ör. yan yana duran bir sekme\r\n * listesiyle) aynı genişlikte hizalanması gereken bağlamlar için.\r\n * `collapsible` ile birlikte anlamlı (`[collapsible]=\"false\"` olmadan\r\n * daralmış hâl `w-10` sabit kalır, `fullWidth` sadece GENİŞLEMİŞ genişliği\r\n * değiştirir). Varsayılan `false` — navbar/toolbar'daki bugünkü sabit\r\n * genişlik davranışı değişmez.\r\n */\r\n readonly fullWidth = input(false);\r\n\r\n private readonly searchInputLabels = inject(MF_SEARCH_INPUT_LABELS);\r\n protected readonly effectivePlaceholder = computed(\r\n () => this.placeholder() ?? this.searchInputLabels().placeholder,\r\n );\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.searchInputLabels().ariaLabel,\r\n );\r\n protected readonly effectiveTooltipLabel = computed(\r\n () => this.tooltipLabel() ?? this.searchInputLabels().ariaLabel,\r\n );\r\n protected readonly effectiveClearAriaLabel = computed(\r\n () => this.searchInputLabels().clearAriaLabel,\r\n );\r\n\r\n private readonly expandedState = signal(false);\r\n /** `collapsible()` false ise HER ZAMAN true — genişleme mekaniği devre dışı kalır ama `expandedState` yine de \"odaklanınca tooltip'i kapat\" gibi yan mantık için iç durumu takip etmeye devam eder. */\r\n protected readonly expanded = computed(() => !this.collapsible() || this.expandedState());\r\n /** `w-64`/`w-10` yerine `w-full` — bkz. `fullWidth` doc yorumu. */\r\n protected readonly inputWidthClass = computed(() =>\r\n this.fullWidth()\r\n ? 'w-full cursor-text pe-8 ps-9'\r\n : this.expanded()\r\n ? 'w-64 cursor-text pe-8 ps-9'\r\n : 'w-10 cursor-pointer caret-transparent pe-2 ps-9',\r\n );\r\n protected readonly draft = signal('');\r\n protected readonly pending = signal(false);\r\n protected readonly showSpinner = computed(() => this.pending() || this.loading());\r\n\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\r\n private readonly tooltipRef = viewChild(Tooltip);\r\n private debounceHandle?: ReturnType<typeof setTimeout>;\r\n\r\n constructor() {\r\n super();\r\n // Dışarıdan (ör. \"Filtreleri temizle\") value() sıfırlanırsa draft de eşlensin.\r\n effect(() => {\r\n const current = this.value();\r\n untracked(() => this.draft.set(current));\r\n });\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value);\r\n }\r\n\r\n protected expand(): void {\r\n this.expandedState.set(true);\r\n // Tooltip'in kendi `(focus)` dinleyicisi AYNI olayda tetiklendiğinden\r\n // (\"Ara...\" balonu) genişlemiş, placeholder'ı zaten aynı metni gösteren\r\n // input'un üstünde gereksiz kalıyordu — anında kapatılıyor (gerçek bulgu).\r\n this.tooltipRef()?.hide();\r\n }\r\n\r\n protected collapseIfEmpty(): void {\r\n if (!this.draft().trim()) this.expandedState.set(false);\r\n }\r\n\r\n protected onInput(raw: string): void {\r\n this.draft.set(raw);\r\n this.pending.set(true);\r\n this.onTouched();\r\n clearTimeout(this.debounceHandle);\r\n this.debounceHandle = setTimeout(() => {\r\n this.pending.set(false);\r\n this.value.set(raw);\r\n this.onChange(raw);\r\n }, this.debounceMs());\r\n }\r\n\r\n protected clear(): void {\r\n clearTimeout(this.debounceHandle);\r\n this.pending.set(false);\r\n this.draft.set('');\r\n this.value.set('');\r\n this.onChange('');\r\n this.onTouched();\r\n this.inputEl()?.nativeElement.focus();\r\n }\r\n\r\n protected onEscape(): void {\r\n if (this.draft()) this.clear();\r\n else this.inputEl()?.nativeElement.blur();\r\n }\r\n}\r\n","<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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}