@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-carousel.mjs","sources":["../../../projects/ui-kit/carousel/carousel.ts","../../../projects/ui-kit/carousel/mesgflow-ui-kit-carousel.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n TemplateRef,\r\n booleanAttribute,\r\n computed,\r\n contentChild,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { MF_CAROUSEL_LABELS, prefersReducedMotion } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\n\r\n/**\r\n * `<mf-carousel [items]=\"slides\" [perView]=\"1\" autoplay>\r\n * <ng-template let-slide>…</ng-template>\r\n * </mf-carousel>`\r\n *\r\n * Yerel kaydırma + `scroll-snap` üstüne kurulu karusel — dokunma/trackpad\r\n * kaydırması tarayıcının kendisi (akıcı, ataletli), düğmeler ve noktalar\r\n * `scrollTo` ile gezinir. WAI-ARIA APG \"Carousel\":\r\n * - Kök `role=\"region\"` + `aria-roledescription=\"carousel\"`, slaytlar\r\n * `role=\"group\"` + `aria-roledescription=\"slide\"` + \"{i} / {n}\" adı.\r\n * - Otomatik oynatma üzerine gelince/odaklanınca DURUR, açık bir\r\n * Durdur/Oynat düğmesi vardır (WCAG 2.2.2); azaltılmış harekette başlamaz.\r\n * - ←/→ (karusel odaktayken) önceki/sonraki.\r\n */\r\n@Component({\r\n selector: 'mf-carousel',\r\n exportAs: 'mfCarousel',\r\n imports: [NgTemplateOutlet, Button, Icon],\r\n host: {\r\n role: 'region',\r\n '[attr.aria-roledescription]': 'labels().carousel',\r\n '[attr.aria-label]': 'ariaLabel() || labels().carousel',\r\n class: 'group/carousel relative block',\r\n '(mouseenter)': 'hovering.set(true)',\r\n '(mouseleave)': 'hovering.set(false)',\r\n '(focusin)': 'focusWithin.set(true)',\r\n '(focusout)': 'focusWithin.set(false)',\r\n '(keydown.arrowleft)': 'onArrow($event, -1)',\r\n '(keydown.arrowright)': 'onArrow($event, 1)',\r\n },\r\n template: `\r\n <div\r\n #track\r\n class=\"flex snap-x snap-mandatory overflow-x-auto scroll-smooth rounded-xl [scrollbar-width:none] motion-reduce:scroll-auto [&::-webkit-scrollbar]:hidden\"\r\n [style.gap.px]=\"gap()\"\r\n (scroll)=\"onScroll()\"\r\n [attr.aria-live]=\"playing() ? 'off' : 'polite'\"\r\n >\r\n @for (item of items(); track $index; let i = $index) {\r\n <div\r\n role=\"group\"\r\n aria-roledescription=\"slide\"\r\n [attr.aria-label]=\"slideLabel(i)\"\r\n class=\"shrink-0 snap-start\"\r\n [style.flex-basis]=\"slideBasis()\"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"template() ?? null\"\r\n [ngTemplateOutletContext]=\"{ $implicit: item, index: i }\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div class=\"mt-3 flex items-center justify-between gap-3\">\r\n <div class=\"flex items-center gap-1.5\" role=\"group\" [attr.aria-label]=\"labels().carousel\">\r\n @for (page of pages(); track page) {\r\n <button\r\n type=\"button\"\r\n class=\"h-2 rounded-full transition-all duration-base ease-emphasis focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [class]=\"\r\n page === index() ? 'w-6 bg-accent-fill' : 'w-2 bg-border-strong hover:bg-fg-subtle'\r\n \"\r\n [attr.aria-label]=\"labels().goTo.replace('{index}', '' + (page + 1))\"\r\n [attr.aria-current]=\"page === index() || null\"\r\n (click)=\"goTo(page)\"\r\n ></button>\r\n }\r\n </div>\r\n <div class=\"flex items-center gap-1\">\r\n @if (autoplay()) {\r\n <button\r\n mfButton\r\n size=\"icon-sm\"\r\n shape=\"square\"\r\n appearance=\"ghost\"\r\n tone=\"neutral\"\r\n [attr.aria-label]=\"playing() ? labels().pause : labels().play\"\r\n (click)=\"userPaused.set(playing())\"\r\n >\r\n <span mfIcon [size]=\"16\">{{ playing() ? 'pause' : 'play_arrow' }}</span>\r\n </button>\r\n }\r\n <button\r\n mfButton\r\n size=\"icon-sm\"\r\n shape=\"square\"\r\n appearance=\"outlined\"\r\n tone=\"neutral\"\r\n [attr.aria-label]=\"labels().previous\"\r\n [disabled]=\"!loop() && index() === 0\"\r\n (click)=\"step(-1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_left</span>\r\n </button>\r\n <button\r\n mfButton\r\n size=\"icon-sm\"\r\n shape=\"square\"\r\n appearance=\"outlined\"\r\n tone=\"neutral\"\r\n [attr.aria-label]=\"labels().next\"\r\n [disabled]=\"!loop() && index() === pages().length - 1\"\r\n (click)=\"step(1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_right</span>\r\n </button>\r\n </div>\r\n </div>\r\n `,\r\n})\r\nexport class Carousel<T> {\r\n readonly items = input.required<readonly T[]>();\r\n /** Görünürdeki slayt sayısı. */\r\n readonly perView = input(1);\r\n readonly gap = input(16);\r\n readonly loop = input(false, { transform: booleanAttribute });\r\n readonly autoplay = input(false, { transform: booleanAttribute });\r\n /** ms */\r\n readonly interval = input(5000);\r\n readonly ariaLabel = input('');\r\n /** Geçerli sayfa (ilk görünür slayt). */\r\n readonly index = model(0);\r\n\r\n protected readonly labels = inject(MF_CAROUSEL_LABELS);\r\n protected readonly template = contentChild(TemplateRef<{ $implicit: T; index: number }>);\r\n private readonly track = viewChild.required<ElementRef<HTMLElement>>('track');\r\n\r\n protected readonly hovering = signal(false);\r\n protected readonly focusWithin = signal(false);\r\n protected readonly userPaused = signal(false);\r\n protected readonly playing = computed(\r\n () => this.autoplay() && !this.userPaused() && !this.hovering() && !this.focusWithin(),\r\n );\r\n\r\n protected readonly pages = computed(() => {\r\n const count = Math.max(1, this.items().length - this.perView() + 1);\r\n return Array.from({ length: count }, (_, i) => i);\r\n });\r\n\r\n protected readonly slideBasis = computed(() => {\r\n const n = this.perView();\r\n return `calc((100% - ${(n - 1) * this.gap()}px) / ${n})`;\r\n });\r\n\r\n constructor() {\r\n if (prefersReducedMotion()) this.userPaused.set(true);\r\n let timer: ReturnType<typeof setInterval> | undefined;\r\n effect(() => {\r\n clearInterval(timer);\r\n if (!this.playing()) return;\r\n timer = setInterval(() => this.step(1, true), this.interval());\r\n });\r\n inject(DestroyRef).onDestroy(() => clearInterval(timer));\r\n }\r\n\r\n protected slideLabel(i: number): string {\r\n return this.labels()\r\n .slide.replace('{index}', String(i + 1))\r\n .replace('{total}', String(this.items().length));\r\n }\r\n\r\n goTo(page: number): void {\r\n const el = this.track().nativeElement;\r\n const slide = el.children[page] as HTMLElement | undefined;\r\n if (!slide) return;\r\n this.index.set(page);\r\n const rtl = getComputedStyle(el).direction === 'rtl';\r\n const offset = rtl\r\n ? slide.offsetLeft + slide.offsetWidth - el.clientWidth\r\n : slide.offsetLeft - el.offsetLeft;\r\n el.scrollTo?.({ left: offset, behavior: prefersReducedMotion() ? 'auto' : 'smooth' });\r\n }\r\n\r\n step(delta: number, wrap = this.loop()): void {\r\n const last = this.pages().length - 1;\r\n let next = this.index() + delta;\r\n if (next > last) next = wrap ? 0 : last;\r\n if (next < 0) next = wrap ? last : 0;\r\n this.goTo(next);\r\n }\r\n\r\n protected onArrow(event: Event, delta: number): void {\r\n const target = event.target as HTMLElement;\r\n if (target.closest('input, textarea, [contenteditable]')) return;\r\n event.preventDefault();\r\n const rtl = getComputedStyle(this.track().nativeElement).direction === 'rtl';\r\n this.step(rtl ? -delta : delta);\r\n }\r\n\r\n /** Kullanıcı elle kaydırınca geçerli sayfayı güncelle. */\r\n protected onScroll(): void {\r\n const el = this.track().nativeElement;\r\n const first = el.children[0] as HTMLElement | undefined;\r\n if (!first) return;\r\n const width = first.offsetWidth + this.gap();\r\n const page = Math.round(Math.abs(el.scrollLeft) / width);\r\n if (page !== this.index()) this.index.set(Math.min(page, this.pages().length - 1));\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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"}
@@ -153,10 +153,10 @@ class BarChart {
153
153
  });
154
154
  }, /* @ts-ignore */
155
155
  ...(ngDevMode ? [{ debugName: "bars" }] : /* istanbul ignore next */ []));
156
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: BarChart, deps: [], target: i0.ɵɵFactoryTarget.Component });
157
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: BarChart, isStandalone: true, selector: "mf-bar-chart", inputs: { points: { classPropertyName: "points", publicName: "points", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, valueFormatter: { classPropertyName: "valueFormatter", publicName: "valueFormatter", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: "@if (bars().length > 0) {\r\n <svg\r\n [attr.viewBox]=\"viewBox\"\r\n class=\"h-auto w-full\"\r\n role=\"img\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n preserveAspectRatio=\"xMidYMid meet\"\r\n >\r\n <title>{{ ariaLabel() }}</title>\r\n\r\n <line\r\n x1=\"0\"\r\n [attr.y1]=\"baselineY\"\r\n [attr.x2]=\"300\"\r\n [attr.y2]=\"baselineY\"\r\n class=\"stroke-border\"\r\n stroke-width=\"1\"\r\n />\r\n\r\n @for (bar of bars(); track bar.label) {\r\n <g>\r\n <title>{{ bar.label }}: {{ valueFormatter()(bar.value) }}</title>\r\n <rect\r\n [attr.x]=\"bar.x\"\r\n [attr.y]=\"bar.y\"\r\n [attr.width]=\"bar.width\"\r\n [attr.height]=\"bar.height\"\r\n rx=\"4\"\r\n [class]=\"fillClass\"\r\n />\r\n <rect\r\n [attr.x]=\"bar.x\"\r\n [attr.y]=\"bar.squareFootY\"\r\n [attr.width]=\"bar.width\"\r\n [attr.height]=\"bar.squareFootHeight\"\r\n [class]=\"fillClass\"\r\n />\r\n <text\r\n [attr.x]=\"bar.x + bar.width / 2\"\r\n [attr.y]=\"bar.labelY\"\r\n text-anchor=\"middle\"\r\n class=\"fill-fg-subtle text-[9px] font-mono tabular-nums\"\r\n >\r\n {{ valueFormatter()(bar.value) }}\r\n </text>\r\n <text\r\n [attr.x]=\"bar.x + bar.width / 2\"\r\n y=\"118\"\r\n text-anchor=\"middle\"\r\n class=\"fill-fg-subtle text-[9px]\"\r\n >\r\n {{ bar.label }}\r\n </text>\r\n </g>\r\n }\r\n </svg>\r\n} @else {\r\n <p class=\"text-sm text-fg-subtle\">\u2014</p>\r\n}\r\n" });
156
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: BarChart, deps: [], target: i0.ɵɵFactoryTarget.Component });
157
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: BarChart, isStandalone: true, selector: "mf-bar-chart", inputs: { points: { classPropertyName: "points", publicName: "points", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, valueFormatter: { classPropertyName: "valueFormatter", publicName: "valueFormatter", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: "@if (bars().length > 0) {\r\n <svg\r\n [attr.viewBox]=\"viewBox\"\r\n class=\"h-auto w-full\"\r\n role=\"img\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n preserveAspectRatio=\"xMidYMid meet\"\r\n >\r\n <title>{{ ariaLabel() }}</title>\r\n\r\n <line\r\n x1=\"0\"\r\n [attr.y1]=\"baselineY\"\r\n [attr.x2]=\"300\"\r\n [attr.y2]=\"baselineY\"\r\n class=\"stroke-border\"\r\n stroke-width=\"1\"\r\n />\r\n\r\n @for (bar of bars(); track bar.label) {\r\n <g>\r\n <title>{{ bar.label }}: {{ valueFormatter()(bar.value) }}</title>\r\n <rect\r\n [attr.x]=\"bar.x\"\r\n [attr.y]=\"bar.y\"\r\n [attr.width]=\"bar.width\"\r\n [attr.height]=\"bar.height\"\r\n rx=\"4\"\r\n [class]=\"fillClass\"\r\n />\r\n <rect\r\n [attr.x]=\"bar.x\"\r\n [attr.y]=\"bar.squareFootY\"\r\n [attr.width]=\"bar.width\"\r\n [attr.height]=\"bar.squareFootHeight\"\r\n [class]=\"fillClass\"\r\n />\r\n <text\r\n [attr.x]=\"bar.x + bar.width / 2\"\r\n [attr.y]=\"bar.labelY\"\r\n text-anchor=\"middle\"\r\n class=\"fill-fg-subtle text-[9px] font-mono tabular-nums\"\r\n >\r\n {{ valueFormatter()(bar.value) }}\r\n </text>\r\n <text\r\n [attr.x]=\"bar.x + bar.width / 2\"\r\n y=\"118\"\r\n text-anchor=\"middle\"\r\n class=\"fill-fg-subtle text-[9px]\"\r\n >\r\n {{ bar.label }}\r\n </text>\r\n </g>\r\n }\r\n </svg>\r\n} @else {\r\n <p class=\"text-sm text-fg-subtle\">\u2014</p>\r\n}\r\n" });
158
158
  }
159
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: BarChart, decorators: [{
159
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: BarChart, decorators: [{
160
160
  type: Component,
161
161
  args: [{ selector: 'mf-bar-chart', host: { class: 'block' }, template: "@if (bars().length > 0) {\r\n <svg\r\n [attr.viewBox]=\"viewBox\"\r\n class=\"h-auto w-full\"\r\n role=\"img\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n preserveAspectRatio=\"xMidYMid meet\"\r\n >\r\n <title>{{ ariaLabel() }}</title>\r\n\r\n <line\r\n x1=\"0\"\r\n [attr.y1]=\"baselineY\"\r\n [attr.x2]=\"300\"\r\n [attr.y2]=\"baselineY\"\r\n class=\"stroke-border\"\r\n stroke-width=\"1\"\r\n />\r\n\r\n @for (bar of bars(); track bar.label) {\r\n <g>\r\n <title>{{ bar.label }}: {{ valueFormatter()(bar.value) }}</title>\r\n <rect\r\n [attr.x]=\"bar.x\"\r\n [attr.y]=\"bar.y\"\r\n [attr.width]=\"bar.width\"\r\n [attr.height]=\"bar.height\"\r\n rx=\"4\"\r\n [class]=\"fillClass\"\r\n />\r\n <rect\r\n [attr.x]=\"bar.x\"\r\n [attr.y]=\"bar.squareFootY\"\r\n [attr.width]=\"bar.width\"\r\n [attr.height]=\"bar.squareFootHeight\"\r\n [class]=\"fillClass\"\r\n />\r\n <text\r\n [attr.x]=\"bar.x + bar.width / 2\"\r\n [attr.y]=\"bar.labelY\"\r\n text-anchor=\"middle\"\r\n class=\"fill-fg-subtle text-[9px] font-mono tabular-nums\"\r\n >\r\n {{ valueFormatter()(bar.value) }}\r\n </text>\r\n <text\r\n [attr.x]=\"bar.x + bar.width / 2\"\r\n y=\"118\"\r\n text-anchor=\"middle\"\r\n class=\"fill-fg-subtle text-[9px]\"\r\n >\r\n {{ bar.label }}\r\n </text>\r\n </g>\r\n }\r\n </svg>\r\n} @else {\r\n <p class=\"text-sm text-fg-subtle\">\u2014</p>\r\n}\r\n" }]
162
162
  }], propDecorators: { points: [{ type: i0.Input, args: [{ isSignal: true, alias: "points", required: true }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], valueFormatter: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueFormatter", required: false }] }] } });
@@ -186,8 +186,8 @@ class BarList {
186
186
  }));
187
187
  }, /* @ts-ignore */
188
188
  ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
189
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: BarList, deps: [], target: i0.ɵɵFactoryTarget.Component });
190
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: BarList, isStandalone: true, selector: "mf-bar-list", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, valueFormatter: { classPropertyName: "valueFormatter", publicName: "valueFormatter", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: `
189
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: BarList, deps: [], target: i0.ɵɵFactoryTarget.Component });
190
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: BarList, isStandalone: true, selector: "mf-bar-list", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, valueFormatter: { classPropertyName: "valueFormatter", publicName: "valueFormatter", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: `
191
191
  <ul class="m-0 flex list-none flex-col gap-3 p-0">
192
192
  @for (row of rows(); track row.label) {
193
193
  <li class="flex items-center gap-3">
@@ -209,7 +209,7 @@ class BarList {
209
209
  </ul>
210
210
  `, isInline: true });
211
211
  }
212
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: BarList, decorators: [{
212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: BarList, decorators: [{
213
213
  type: Component,
214
214
  args: [{
215
215
  selector: 'mf-bar-list',
@@ -470,10 +470,10 @@ class LineChart {
470
470
  event.preventDefault();
471
471
  this.activeIndex.set(next[event.key]);
472
472
  }
473
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: LineChart, deps: [], target: i0.ɵɵFactoryTarget.Component });
474
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: LineChart, isStandalone: true, selector: "mf-line-chart", inputs: { labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: true, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: true, transformFunction: null }, area: { classPropertyName: "area", publicName: "area", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, valueFormatter: { classPropertyName: "valueFormatter", publicName: "valueFormatter", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, exportAs: ["mfLineChart"], ngImport: i0, template: "<figure class=\"m-0 flex flex-col gap-3\">\r\n <div class=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-2\">\r\n @if (plotSeries().length > 1) {\r\n <ul class=\"m-0 flex list-none flex-wrap gap-x-4 gap-y-1 p-0\">\r\n @for (s of plotSeries(); track s.name) {\r\n <li class=\"flex items-center gap-1.5 text-xs text-fg-muted\">\r\n <span class=\"h-0.5 w-3 shrink-0 rounded-full\" [class]=\"s.keyClass\"></span>\r\n {{ s.name }}\r\n </li>\r\n }\r\n </ul>\r\n } @else {\r\n <span></span>\r\n }\r\n <button\r\n type=\"button\"\r\n [class]=\"\r\n 'rounded-sm text-xs text-fg-muted underline-offset-2 transition-colors duration-fast ease-emphasis hover:text-fg hover:underline ' +\r\n focusRecipe\r\n \"\r\n (click)=\"toggleTable()\"\r\n >\r\n {{ tableView() ? i18n().showChart : i18n().showTable }}\r\n </button>\r\n </div>\r\n\r\n @if (tableView()) {\r\n <div class=\"overflow-x-auto\">\r\n <table class=\"w-full border-collapse text-sm\">\r\n <caption class=\"sr-only\">\r\n {{\r\n ariaLabel()\r\n }}\r\n </caption>\r\n <thead>\r\n <tr class=\"border-b border-border\">\r\n <th scope=\"col\" class=\"py-2 pe-4 text-start text-eyebrow text-fg-subtle\">\r\n {{ i18n().category }}\r\n </th>\r\n @for (s of series(); track s.name) {\r\n <th scope=\"col\" class=\"py-2 ps-4 text-end text-eyebrow text-fg-subtle\">\r\n {{ s.name }}\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of tableRows(); track $index) {\r\n <tr class=\"border-b border-border-subtle last:border-b-0\">\r\n <th scope=\"row\" class=\"py-2 pe-4 text-start font-normal text-fg-muted\">\r\n {{ row.label }}\r\n </th>\r\n @for (value of row.values; track $index) {\r\n <td class=\"py-2 ps-4 text-end tabular-nums text-fg\">{{ value }}</td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n } @else {\r\n <div\r\n tabindex=\"0\"\r\n role=\"group\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [class]=\"'relative touch-pan-y rounded-sm ' + focusRecipe\"\r\n [style.height.px]=\"height()\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerleave)=\"activeIndex.set(null)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"activeIndex.set(null)\"\r\n (keydown)=\"onKeydown($event)\"\r\n >\r\n <svg\r\n [attr.width]=\"width()\"\r\n [attr.height]=\"height()\"\r\n class=\"block overflow-visible\"\r\n aria-hidden=\"true\"\r\n >\r\n @for (tick of yTicks(); track tick.value) {\r\n <line\r\n [attr.x1]=\"plotLeft\"\r\n [attr.x2]=\"plotRight()\"\r\n [attr.y1]=\"tick.y\"\r\n [attr.y2]=\"tick.y\"\r\n class=\"stroke-border\"\r\n stroke-width=\"1\"\r\n shape-rendering=\"crispEdges\"\r\n />\r\n <text\r\n [attr.x]=\"plotLeft - 8\"\r\n [attr.y]=\"tick.y\"\r\n text-anchor=\"end\"\r\n dominant-baseline=\"middle\"\r\n class=\"fill-fg-subtle text-caption tabular-nums\"\r\n >\r\n {{ tick.label }}\r\n </text>\r\n }\r\n\r\n <line\r\n [attr.x1]=\"plotLeft\"\r\n [attr.x2]=\"plotRight()\"\r\n [attr.y1]=\"baselineY()\"\r\n [attr.y2]=\"baselineY()\"\r\n class=\"stroke-border-strong\"\r\n stroke-width=\"1\"\r\n shape-rendering=\"crispEdges\"\r\n />\r\n\r\n @for (label of xLabels(); track $index) {\r\n <text\r\n [attr.x]=\"label.x\"\r\n [attr.y]=\"plotBottom() + 18\"\r\n [attr.text-anchor]=\"label.anchor\"\r\n class=\"fill-fg-subtle text-caption\"\r\n >\r\n {{ label.text }}\r\n </text>\r\n }\r\n\r\n @if (area()) {\r\n @for (s of plotSeries(); track s.name) {\r\n <path [attr.d]=\"s.areaPath\" [class]=\"s.fillClass\" fill-opacity=\"0.1\" />\r\n }\r\n }\r\n\r\n @for (s of plotSeries(); track s.name) {\r\n <path\r\n [attr.d]=\"s.path\"\r\n fill=\"none\"\r\n [class]=\"s.strokeClass\"\r\n stroke-width=\"2\"\r\n stroke-linejoin=\"round\"\r\n stroke-linecap=\"round\"\r\n />\r\n }\r\n\r\n @if (activeX() !== null) {\r\n <line\r\n [attr.x1]=\"activeX()\"\r\n [attr.x2]=\"activeX()\"\r\n [attr.y1]=\"12\"\r\n [attr.y2]=\"plotBottom()\"\r\n class=\"stroke-border-strong\"\r\n stroke-width=\"1\"\r\n shape-rendering=\"crispEdges\"\r\n />\r\n }\r\n\r\n @for (s of plotSeries(); track s.name) {\r\n @let point = activeIndex() !== null ? s.points[activeIndex()!] : s.points.at(-1);\r\n @if (point) {\r\n <circle\r\n [attr.cx]=\"point.x\"\r\n [attr.cy]=\"point.y\"\r\n r=\"4\"\r\n [class]=\"s.fillClass + ' stroke-surface'\"\r\n stroke-width=\"2\"\r\n />\r\n }\r\n }\r\n\r\n @if (single() && activeIndex() === null) {\r\n @let last = plotSeries()[0].points.at(-1);\r\n @if (last) {\r\n <text\r\n [attr.x]=\"last.x + 10\"\r\n [attr.y]=\"last.y\"\r\n dominant-baseline=\"middle\"\r\n class=\"fill-fg text-caption font-medium tabular-nums\"\r\n >\r\n {{ valueFormatter()(plotSeries()[0].values.at(-1)!) }}\r\n </text>\r\n }\r\n }\r\n </svg>\r\n\r\n @if (readout(); as r) {\r\n <div\r\n aria-hidden=\"true\"\r\n [class]=\"tooltipSurface + ' pointer-events-none absolute top-0 z-10 min-w-32 px-3 py-2'\"\r\n [style.left]=\"tooltipStyle()?.left\"\r\n [style.right]=\"tooltipStyle()?.right\"\r\n >\r\n <p class=\"mb-1.5 text-caption text-fg-subtle\">{{ r.label }}</p>\r\n <ul class=\"m-0 flex list-none flex-col gap-1 p-0\">\r\n @for (row of r.rows; track row.name) {\r\n <li class=\"flex items-center gap-2 text-xs\">\r\n <span class=\"h-0.5 w-3 shrink-0 rounded-full\" [class]=\"row.keyClass\"></span>\r\n <span class=\"font-medium tabular-nums text-fg\">{{ row.value }}</span>\r\n <span class=\"text-fg-muted\">{{ row.name }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n <div class=\"sr-only\" aria-live=\"polite\">{{ liveText() }}</div>\r\n </div>\r\n }\r\n</figure>\r\n" });
473
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: LineChart, deps: [], target: i0.ɵɵFactoryTarget.Component });
474
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: LineChart, isStandalone: true, selector: "mf-line-chart", inputs: { labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: true, transformFunction: null }, series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: true, transformFunction: null }, area: { classPropertyName: "area", publicName: "area", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, valueFormatter: { classPropertyName: "valueFormatter", publicName: "valueFormatter", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, exportAs: ["mfLineChart"], ngImport: i0, template: "<figure class=\"m-0 flex flex-col gap-3\">\r\n <div class=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-2\">\r\n @if (plotSeries().length > 1) {\r\n <ul class=\"m-0 flex list-none flex-wrap gap-x-4 gap-y-1 p-0\">\r\n @for (s of plotSeries(); track s.name) {\r\n <li class=\"flex items-center gap-1.5 text-xs text-fg-muted\">\r\n <span class=\"h-0.5 w-3 shrink-0 rounded-full\" [class]=\"s.keyClass\"></span>\r\n {{ s.name }}\r\n </li>\r\n }\r\n </ul>\r\n } @else {\r\n <span></span>\r\n }\r\n <button\r\n type=\"button\"\r\n [class]=\"\r\n 'rounded-sm text-xs text-fg-muted underline-offset-2 transition-colors duration-fast ease-emphasis hover:text-fg hover:underline ' +\r\n focusRecipe\r\n \"\r\n (click)=\"toggleTable()\"\r\n >\r\n {{ tableView() ? i18n().showChart : i18n().showTable }}\r\n </button>\r\n </div>\r\n\r\n @if (tableView()) {\r\n <div class=\"overflow-x-auto\">\r\n <table class=\"w-full border-collapse text-sm\">\r\n <caption class=\"sr-only\">\r\n {{\r\n ariaLabel()\r\n }}\r\n </caption>\r\n <thead>\r\n <tr class=\"border-b border-border\">\r\n <th scope=\"col\" class=\"py-2 pe-4 text-start text-eyebrow text-fg-subtle\">\r\n {{ i18n().category }}\r\n </th>\r\n @for (s of series(); track s.name) {\r\n <th scope=\"col\" class=\"py-2 ps-4 text-end text-eyebrow text-fg-subtle\">\r\n {{ s.name }}\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of tableRows(); track $index) {\r\n <tr class=\"border-b border-border-subtle last:border-b-0\">\r\n <th scope=\"row\" class=\"py-2 pe-4 text-start font-normal text-fg-muted\">\r\n {{ row.label }}\r\n </th>\r\n @for (value of row.values; track $index) {\r\n <td class=\"py-2 ps-4 text-end tabular-nums text-fg\">{{ value }}</td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n } @else {\r\n <div\r\n tabindex=\"0\"\r\n role=\"group\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [class]=\"'relative touch-pan-y rounded-sm ' + focusRecipe\"\r\n [style.height.px]=\"height()\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerleave)=\"activeIndex.set(null)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"activeIndex.set(null)\"\r\n (keydown)=\"onKeydown($event)\"\r\n >\r\n <svg\r\n [attr.width]=\"width()\"\r\n [attr.height]=\"height()\"\r\n class=\"block overflow-visible\"\r\n aria-hidden=\"true\"\r\n >\r\n @for (tick of yTicks(); track tick.value) {\r\n <line\r\n [attr.x1]=\"plotLeft\"\r\n [attr.x2]=\"plotRight()\"\r\n [attr.y1]=\"tick.y\"\r\n [attr.y2]=\"tick.y\"\r\n class=\"stroke-border\"\r\n stroke-width=\"1\"\r\n shape-rendering=\"crispEdges\"\r\n />\r\n <text\r\n [attr.x]=\"plotLeft - 8\"\r\n [attr.y]=\"tick.y\"\r\n text-anchor=\"end\"\r\n dominant-baseline=\"middle\"\r\n class=\"fill-fg-subtle text-caption tabular-nums\"\r\n >\r\n {{ tick.label }}\r\n </text>\r\n }\r\n\r\n <line\r\n [attr.x1]=\"plotLeft\"\r\n [attr.x2]=\"plotRight()\"\r\n [attr.y1]=\"baselineY()\"\r\n [attr.y2]=\"baselineY()\"\r\n class=\"stroke-border-strong\"\r\n stroke-width=\"1\"\r\n shape-rendering=\"crispEdges\"\r\n />\r\n\r\n @for (label of xLabels(); track $index) {\r\n <text\r\n [attr.x]=\"label.x\"\r\n [attr.y]=\"plotBottom() + 18\"\r\n [attr.text-anchor]=\"label.anchor\"\r\n class=\"fill-fg-subtle text-caption\"\r\n >\r\n {{ label.text }}\r\n </text>\r\n }\r\n\r\n @if (area()) {\r\n @for (s of plotSeries(); track s.name) {\r\n <path [attr.d]=\"s.areaPath\" [class]=\"s.fillClass\" fill-opacity=\"0.1\" />\r\n }\r\n }\r\n\r\n @for (s of plotSeries(); track s.name) {\r\n <path\r\n [attr.d]=\"s.path\"\r\n fill=\"none\"\r\n [class]=\"s.strokeClass\"\r\n stroke-width=\"2\"\r\n stroke-linejoin=\"round\"\r\n stroke-linecap=\"round\"\r\n />\r\n }\r\n\r\n @if (activeX() !== null) {\r\n <line\r\n [attr.x1]=\"activeX()\"\r\n [attr.x2]=\"activeX()\"\r\n [attr.y1]=\"12\"\r\n [attr.y2]=\"plotBottom()\"\r\n class=\"stroke-border-strong\"\r\n stroke-width=\"1\"\r\n shape-rendering=\"crispEdges\"\r\n />\r\n }\r\n\r\n @for (s of plotSeries(); track s.name) {\r\n @let point = activeIndex() !== null ? s.points[activeIndex()!] : s.points.at(-1);\r\n @if (point) {\r\n <circle\r\n [attr.cx]=\"point.x\"\r\n [attr.cy]=\"point.y\"\r\n r=\"4\"\r\n [class]=\"s.fillClass + ' stroke-surface'\"\r\n stroke-width=\"2\"\r\n />\r\n }\r\n }\r\n\r\n @if (single() && activeIndex() === null) {\r\n @let last = plotSeries()[0].points.at(-1);\r\n @if (last) {\r\n <text\r\n [attr.x]=\"last.x + 10\"\r\n [attr.y]=\"last.y\"\r\n dominant-baseline=\"middle\"\r\n class=\"fill-fg text-caption font-medium tabular-nums\"\r\n >\r\n {{ valueFormatter()(plotSeries()[0].values.at(-1)!) }}\r\n </text>\r\n }\r\n }\r\n </svg>\r\n\r\n @if (readout(); as r) {\r\n <div\r\n aria-hidden=\"true\"\r\n [class]=\"tooltipSurface + ' pointer-events-none absolute top-0 z-10 min-w-32 px-3 py-2'\"\r\n [style.left]=\"tooltipStyle()?.left\"\r\n [style.right]=\"tooltipStyle()?.right\"\r\n >\r\n <p class=\"mb-1.5 text-caption text-fg-subtle\">{{ r.label }}</p>\r\n <ul class=\"m-0 flex list-none flex-col gap-1 p-0\">\r\n @for (row of r.rows; track row.name) {\r\n <li class=\"flex items-center gap-2 text-xs\">\r\n <span class=\"h-0.5 w-3 shrink-0 rounded-full\" [class]=\"row.keyClass\"></span>\r\n <span class=\"font-medium tabular-nums text-fg\">{{ row.value }}</span>\r\n <span class=\"text-fg-muted\">{{ row.name }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n <div class=\"sr-only\" aria-live=\"polite\">{{ liveText() }}</div>\r\n </div>\r\n }\r\n</figure>\r\n" });
475
475
  }
476
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: LineChart, decorators: [{
476
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: LineChart, decorators: [{
477
477
  type: Component,
478
478
  args: [{ selector: 'mf-line-chart', exportAs: 'mfLineChart', host: { class: 'block' }, template: "<figure class=\"m-0 flex flex-col gap-3\">\r\n <div class=\"flex flex-wrap items-center justify-between gap-x-4 gap-y-2\">\r\n @if (plotSeries().length > 1) {\r\n <ul class=\"m-0 flex list-none flex-wrap gap-x-4 gap-y-1 p-0\">\r\n @for (s of plotSeries(); track s.name) {\r\n <li class=\"flex items-center gap-1.5 text-xs text-fg-muted\">\r\n <span class=\"h-0.5 w-3 shrink-0 rounded-full\" [class]=\"s.keyClass\"></span>\r\n {{ s.name }}\r\n </li>\r\n }\r\n </ul>\r\n } @else {\r\n <span></span>\r\n }\r\n <button\r\n type=\"button\"\r\n [class]=\"\r\n 'rounded-sm text-xs text-fg-muted underline-offset-2 transition-colors duration-fast ease-emphasis hover:text-fg hover:underline ' +\r\n focusRecipe\r\n \"\r\n (click)=\"toggleTable()\"\r\n >\r\n {{ tableView() ? i18n().showChart : i18n().showTable }}\r\n </button>\r\n </div>\r\n\r\n @if (tableView()) {\r\n <div class=\"overflow-x-auto\">\r\n <table class=\"w-full border-collapse text-sm\">\r\n <caption class=\"sr-only\">\r\n {{\r\n ariaLabel()\r\n }}\r\n </caption>\r\n <thead>\r\n <tr class=\"border-b border-border\">\r\n <th scope=\"col\" class=\"py-2 pe-4 text-start text-eyebrow text-fg-subtle\">\r\n {{ i18n().category }}\r\n </th>\r\n @for (s of series(); track s.name) {\r\n <th scope=\"col\" class=\"py-2 ps-4 text-end text-eyebrow text-fg-subtle\">\r\n {{ s.name }}\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (row of tableRows(); track $index) {\r\n <tr class=\"border-b border-border-subtle last:border-b-0\">\r\n <th scope=\"row\" class=\"py-2 pe-4 text-start font-normal text-fg-muted\">\r\n {{ row.label }}\r\n </th>\r\n @for (value of row.values; track $index) {\r\n <td class=\"py-2 ps-4 text-end tabular-nums text-fg\">{{ value }}</td>\r\n }\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n } @else {\r\n <div\r\n tabindex=\"0\"\r\n role=\"group\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [class]=\"'relative touch-pan-y rounded-sm ' + focusRecipe\"\r\n [style.height.px]=\"height()\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerleave)=\"activeIndex.set(null)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"activeIndex.set(null)\"\r\n (keydown)=\"onKeydown($event)\"\r\n >\r\n <svg\r\n [attr.width]=\"width()\"\r\n [attr.height]=\"height()\"\r\n class=\"block overflow-visible\"\r\n aria-hidden=\"true\"\r\n >\r\n @for (tick of yTicks(); track tick.value) {\r\n <line\r\n [attr.x1]=\"plotLeft\"\r\n [attr.x2]=\"plotRight()\"\r\n [attr.y1]=\"tick.y\"\r\n [attr.y2]=\"tick.y\"\r\n class=\"stroke-border\"\r\n stroke-width=\"1\"\r\n shape-rendering=\"crispEdges\"\r\n />\r\n <text\r\n [attr.x]=\"plotLeft - 8\"\r\n [attr.y]=\"tick.y\"\r\n text-anchor=\"end\"\r\n dominant-baseline=\"middle\"\r\n class=\"fill-fg-subtle text-caption tabular-nums\"\r\n >\r\n {{ tick.label }}\r\n </text>\r\n }\r\n\r\n <line\r\n [attr.x1]=\"plotLeft\"\r\n [attr.x2]=\"plotRight()\"\r\n [attr.y1]=\"baselineY()\"\r\n [attr.y2]=\"baselineY()\"\r\n class=\"stroke-border-strong\"\r\n stroke-width=\"1\"\r\n shape-rendering=\"crispEdges\"\r\n />\r\n\r\n @for (label of xLabels(); track $index) {\r\n <text\r\n [attr.x]=\"label.x\"\r\n [attr.y]=\"plotBottom() + 18\"\r\n [attr.text-anchor]=\"label.anchor\"\r\n class=\"fill-fg-subtle text-caption\"\r\n >\r\n {{ label.text }}\r\n </text>\r\n }\r\n\r\n @if (area()) {\r\n @for (s of plotSeries(); track s.name) {\r\n <path [attr.d]=\"s.areaPath\" [class]=\"s.fillClass\" fill-opacity=\"0.1\" />\r\n }\r\n }\r\n\r\n @for (s of plotSeries(); track s.name) {\r\n <path\r\n [attr.d]=\"s.path\"\r\n fill=\"none\"\r\n [class]=\"s.strokeClass\"\r\n stroke-width=\"2\"\r\n stroke-linejoin=\"round\"\r\n stroke-linecap=\"round\"\r\n />\r\n }\r\n\r\n @if (activeX() !== null) {\r\n <line\r\n [attr.x1]=\"activeX()\"\r\n [attr.x2]=\"activeX()\"\r\n [attr.y1]=\"12\"\r\n [attr.y2]=\"plotBottom()\"\r\n class=\"stroke-border-strong\"\r\n stroke-width=\"1\"\r\n shape-rendering=\"crispEdges\"\r\n />\r\n }\r\n\r\n @for (s of plotSeries(); track s.name) {\r\n @let point = activeIndex() !== null ? s.points[activeIndex()!] : s.points.at(-1);\r\n @if (point) {\r\n <circle\r\n [attr.cx]=\"point.x\"\r\n [attr.cy]=\"point.y\"\r\n r=\"4\"\r\n [class]=\"s.fillClass + ' stroke-surface'\"\r\n stroke-width=\"2\"\r\n />\r\n }\r\n }\r\n\r\n @if (single() && activeIndex() === null) {\r\n @let last = plotSeries()[0].points.at(-1);\r\n @if (last) {\r\n <text\r\n [attr.x]=\"last.x + 10\"\r\n [attr.y]=\"last.y\"\r\n dominant-baseline=\"middle\"\r\n class=\"fill-fg text-caption font-medium tabular-nums\"\r\n >\r\n {{ valueFormatter()(plotSeries()[0].values.at(-1)!) }}\r\n </text>\r\n }\r\n }\r\n </svg>\r\n\r\n @if (readout(); as r) {\r\n <div\r\n aria-hidden=\"true\"\r\n [class]=\"tooltipSurface + ' pointer-events-none absolute top-0 z-10 min-w-32 px-3 py-2'\"\r\n [style.left]=\"tooltipStyle()?.left\"\r\n [style.right]=\"tooltipStyle()?.right\"\r\n >\r\n <p class=\"mb-1.5 text-caption text-fg-subtle\">{{ r.label }}</p>\r\n <ul class=\"m-0 flex list-none flex-col gap-1 p-0\">\r\n @for (row of r.rows; track row.name) {\r\n <li class=\"flex items-center gap-2 text-xs\">\r\n <span class=\"h-0.5 w-3 shrink-0 rounded-full\" [class]=\"row.keyClass\"></span>\r\n <span class=\"font-medium tabular-nums text-fg\">{{ row.value }}</span>\r\n <span class=\"text-fg-muted\">{{ row.name }}</span>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n }\r\n\r\n <div class=\"sr-only\" aria-live=\"polite\">{{ liveText() }}</div>\r\n </div>\r\n }\r\n</figure>\r\n" }]
479
479
  }], ctorParameters: () => [], propDecorators: { labels: [{ type: i0.Input, args: [{ isSignal: true, alias: "labels", required: true }] }], series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: true }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: true }] }], area: [{ type: i0.Input, args: [{ isSignal: true, alias: "area", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], valueFormatter: [{ type: i0.Input, args: [{ isSignal: true, alias: "valueFormatter", required: false }] }] } });
@@ -522,10 +522,10 @@ class Sparkline {
522
522
  return { line, area, end };
523
523
  }, /* @ts-ignore */
524
524
  ...(ngDevMode ? [{ debugName: "geometry" }] : /* istanbul ignore next */ []));
525
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Sparkline, deps: [], target: i0.ɵɵFactoryTarget.Component });
526
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: Sparkline, isStandalone: true, selector: "mf-sparkline", inputs: { values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, area: { classPropertyName: "area", publicName: "area", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "inline-block align-middle leading-none" }, ngImport: i0, template: "<svg\r\n [attr.width]=\"width()\"\r\n [attr.height]=\"height()\"\r\n class=\"block overflow-visible\"\r\n [attr.role]=\"ariaLabel() ? 'img' : null\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-hidden]=\"ariaLabel() ? null : 'true'\"\r\n>\r\n @if (area() && geometry().area) {\r\n <path [attr.d]=\"geometry().area\" class=\"fill-chart-1\" fill-opacity=\"0.1\" />\r\n }\r\n <path\r\n [attr.d]=\"geometry().line\"\r\n fill=\"none\"\r\n class=\"stroke-chart-other\"\r\n stroke-width=\"1.5\"\r\n stroke-linejoin=\"round\"\r\n stroke-linecap=\"round\"\r\n />\r\n @if (geometry().end; as end) {\r\n <circle\r\n [attr.cx]=\"end.x\"\r\n [attr.cy]=\"end.y\"\r\n r=\"3\"\r\n class=\"fill-chart-1 stroke-surface\"\r\n stroke-width=\"1.5\"\r\n />\r\n }\r\n</svg>\r\n" });
525
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Sparkline, deps: [], target: i0.ɵɵFactoryTarget.Component });
526
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: Sparkline, isStandalone: true, selector: "mf-sparkline", inputs: { values: { classPropertyName: "values", publicName: "values", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, area: { classPropertyName: "area", publicName: "area", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "inline-block align-middle leading-none" }, ngImport: i0, template: "<svg\r\n [attr.width]=\"width()\"\r\n [attr.height]=\"height()\"\r\n class=\"block overflow-visible\"\r\n [attr.role]=\"ariaLabel() ? 'img' : null\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-hidden]=\"ariaLabel() ? null : 'true'\"\r\n>\r\n @if (area() && geometry().area) {\r\n <path [attr.d]=\"geometry().area\" class=\"fill-chart-1\" fill-opacity=\"0.1\" />\r\n }\r\n <path\r\n [attr.d]=\"geometry().line\"\r\n fill=\"none\"\r\n class=\"stroke-chart-other\"\r\n stroke-width=\"1.5\"\r\n stroke-linejoin=\"round\"\r\n stroke-linecap=\"round\"\r\n />\r\n @if (geometry().end; as end) {\r\n <circle\r\n [attr.cx]=\"end.x\"\r\n [attr.cy]=\"end.y\"\r\n r=\"3\"\r\n class=\"fill-chart-1 stroke-surface\"\r\n stroke-width=\"1.5\"\r\n />\r\n }\r\n</svg>\r\n" });
527
527
  }
528
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Sparkline, decorators: [{
528
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Sparkline, decorators: [{
529
529
  type: Component,
530
530
  args: [{ selector: 'mf-sparkline', host: { class: 'inline-block align-middle leading-none' }, template: "<svg\r\n [attr.width]=\"width()\"\r\n [attr.height]=\"height()\"\r\n class=\"block overflow-visible\"\r\n [attr.role]=\"ariaLabel() ? 'img' : null\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-hidden]=\"ariaLabel() ? null : 'true'\"\r\n>\r\n @if (area() && geometry().area) {\r\n <path [attr.d]=\"geometry().area\" class=\"fill-chart-1\" fill-opacity=\"0.1\" />\r\n }\r\n <path\r\n [attr.d]=\"geometry().line\"\r\n fill=\"none\"\r\n class=\"stroke-chart-other\"\r\n stroke-width=\"1.5\"\r\n stroke-linejoin=\"round\"\r\n stroke-linecap=\"round\"\r\n />\r\n @if (geometry().end; as end) {\r\n <circle\r\n [attr.cx]=\"end.x\"\r\n [attr.cy]=\"end.y\"\r\n r=\"3\"\r\n class=\"fill-chart-1 stroke-surface\"\r\n stroke-width=\"1.5\"\r\n />\r\n }\r\n</svg>\r\n" }]
531
531
  }], propDecorators: { values: [{ type: i0.Input, args: [{ isSignal: true, alias: "values", required: true }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], area: [{ type: i0.Input, args: [{ isSignal: true, alias: "area", required: false }] }] } });
@@ -1,41 +1,36 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, computed, Directive } from '@angular/core';
3
- import { cn } from '@mesgflow/ui-kit/core';
3
+ import { cn, focusRecipe } from '@mesgflow/ui-kit/core';
4
4
 
5
5
  const SIZE_CLASSES = { sm: 'h-3.5 w-3.5', md: 'h-4 w-4', lg: 'h-5 w-5' };
6
6
  /**
7
- * `<input type="checkbox" mfCheckbox">` — `accent-color` (modern tarayıcı
8
- * desteği) native checkbox'ın kendi tik/kutu görselini renklendiriyor, ayrı
9
- * bir cva şemasına gerek yok (Switch'in aksine burada özel track+thumb
10
- * görseli istemiyoruz, native checkbox görünümü + marka rengi yeterli).
7
+ * `<input type="checkbox" mfCheckbox [indeterminate]="some()">` — native
8
+ * `<input>` kalır (klavye/form/erişilebilirlik ağacı değişmez), görsel katman
9
+ * `mf-check` utility'si (styles/tokens/controls.css): rol token'lı kutu,
10
+ * yay eğrisiyle büyüyen işaret, `indeterminate` çizgisi, hover'da marka
11
+ * kenarlığı, basınca hafif küçülme.
11
12
  */
12
13
  class Checkbox {
13
14
  size = input('md', /* @ts-ignore */
14
15
  ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
15
- classes = computed(() => cn(
16
- // `accent-color` (tik/kutu rengi) BİLEREK Button'daki "büyük dolu blok
17
- // dark modda parlamaz" kuralının DIŞINDA — burada işaretlenmiş bir
18
- // checkbox küçük/ince bir öğe, dark modda 400 basamağına parlaması
19
- // (`Tailwind'in accent-* utility'si "accent-color" CSS property'sini
20
- // besliyor, tek class'ta iki değer alamıyor, o yüzden burada tek yerde
21
- // manuel dark: eşleniği var) okunabilirliği artırıyor. Focus artık
22
- // tüm primitifler genelinde tek mekanizma olan native `outline`
23
- // (bkz. button.variants.ts'teki focus notu) — eski `ring-2 ring-offset-2`
24
- // box-shadow'u kalktı.
25
- SIZE_CLASSES[this.size()], 'shrink-0 rounded-xs border-border accent-primary-600 dark:accent-primary-400 transition-colors duration-fast ease-emphasis ' +
26
- 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +
27
- 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50'), /* @ts-ignore */
16
+ /** "Kısmen seçili" (ör. tablo başlığındaki tümünü-seç) — native `indeterminate` özelliğine yazılır, `aria-checked="mixed"` tarayıcı tarafından anons edilir. */
17
+ indeterminate = input(false, /* @ts-ignore */
18
+ ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
19
+ classes = computed(() => cn('mf-check', SIZE_CLASSES[this.size()], focusRecipe), /* @ts-ignore */
28
20
  ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
29
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Checkbox, deps: [], target: i0.ɵɵFactoryTarget.Directive });
30
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.6", type: Checkbox, isStandalone: true, selector: "input[type=checkbox][mfCheckbox]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()" } }, ngImport: i0 });
21
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Checkbox, deps: [], target: i0.ɵɵFactoryTarget.Directive });
22
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.7", type: Checkbox, isStandalone: true, selector: "input[type=checkbox][mfCheckbox]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "classes()", "indeterminate": "indeterminate()" } }, ngImport: i0 });
31
23
  }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Checkbox, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Checkbox, decorators: [{
33
25
  type: Directive,
34
26
  args: [{
35
27
  selector: 'input[type=checkbox][mfCheckbox]',
36
- host: { '[class]': 'classes()' },
28
+ host: {
29
+ '[class]': 'classes()',
30
+ '[indeterminate]': 'indeterminate()',
31
+ },
37
32
  }]
38
- }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
33
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }] } });
39
34
 
40
35
  /**
41
36
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"mesgflow-ui-kit-checkbox.mjs","sources":["../../../projects/ui-kit/checkbox/checkbox.ts","../../../projects/ui-kit/checkbox/mesgflow-ui-kit-checkbox.ts"],"sourcesContent":["import { Directive, computed, input } from '@angular/core';\r\nimport { cn, type MfSize } from '@mesgflow/ui-kit/core';\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=\"checkbox\" mfCheckbox\">` — `accent-color` (modern tarayıcı\r\n * desteği) native checkbox'ın kendi tik/kutu görselini renklendiriyor, ayrı\r\n * bir cva şemasına gerek yok (Switch'in aksine burada özel track+thumb\r\n * görseli istemiyoruz, native checkbox görünümü + marka rengi yeterli).\r\n */\r\n@Directive({\r\n selector: 'input[type=checkbox][mfCheckbox]',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class Checkbox {\r\n readonly size = input<MfSize>('md');\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n // `accent-color` (tik/kutu rengi) BİLEREK Button'daki \"büyük dolu blok\r\n // dark modda parlamaz\" kuralının DIŞINDA — burada işaretlenmiş bir\r\n // checkbox küçük/ince bir öğe, dark modda 400 basamağına parlaması\r\n // (`Tailwind'in accent-* utility'si \"accent-color\" CSS property'sini\r\n // besliyor, tek class'ta iki değer alamıyor, o yüzden burada tek yerde\r\n // manuel dark: eşleniği var) okunabilirliği artırıyor. Focus artık\r\n // tüm primitifler genelinde tek mekanizma olan native `outline`\r\n // (bkz. button.variants.ts'teki focus notu) — eski `ring-2 ring-offset-2`\r\n // box-shadow'u kalktı.\r\n SIZE_CLASSES[this.size()],\r\n 'shrink-0 rounded-xs 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAGA,MAAM,YAAY,GAA2B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE;AAEhG;;;;;AAKG;MAKU,QAAQ,CAAA;IACV,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;AAEhB,IAAA,OAAO,GAAG,QAAQ,CAAC,MACpC,EAAE;;;;;;;;;;AAUA,IAAA,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EACzB,6HAA6H;QAC3H,gHAAgH;AAChH,QAAA,8EAA8E,CACjF;gFACF;uGAnBU,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,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,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAJpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,IAAI,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE;AACjC,iBAAA;;;ACdD;;AAEG;;"}
1
+ {"version":3,"file":"mesgflow-ui-kit-checkbox.mjs","sources":["../../../projects/ui-kit/checkbox/checkbox.ts","../../../projects/ui-kit/checkbox/mesgflow-ui-kit-checkbox.ts"],"sourcesContent":["import { Directive, computed, input } from '@angular/core';\r\nimport { cn, focusRecipe, type MfSize } from '@mesgflow/ui-kit/core';\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=\"checkbox\" mfCheckbox [indeterminate]=\"some()\">` — native\r\n * `<input>` kalır (klavye/form/erişilebilirlik ağacı değişmez), görsel katman\r\n * `mf-check` utility'si (styles/tokens/controls.css): rol token'lı kutu,\r\n * yay eğrisiyle büyüyen işaret, `indeterminate` çizgisi, hover'da marka\r\n * kenarlığı, basınca hafif küçülme.\r\n */\r\n@Directive({\r\n selector: 'input[type=checkbox][mfCheckbox]',\r\n host: {\r\n '[class]': 'classes()',\r\n '[indeterminate]': 'indeterminate()',\r\n },\r\n})\r\nexport class Checkbox {\r\n readonly size = input<MfSize>('md');\r\n /** \"Kısmen seçili\" (ör. tablo başlığındaki tümünü-seç) — native `indeterminate` özelliğine yazılır, `aria-checked=\"mixed\"` tarayıcı tarafından anons edilir. */\r\n readonly indeterminate = input(false);\r\n\r\n protected readonly classes = computed(() =>\r\n cn('mf-check', SIZE_CLASSES[this.size()], focusRecipe),\r\n );\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAGA,MAAM,YAAY,GAA2B,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE;AAEhG;;;;;;AAMG;MAQU,QAAQ,CAAA;IACV,IAAI,GAAG,KAAK,CAAS,IAAI;6EAAC;;IAE1B,aAAa,GAAG,KAAK,CAAC,KAAK;sFAAC;AAElB,IAAA,OAAO,GAAG,QAAQ,CAAC,MACpC,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,WAAW,CAAC;gFACvD;uGAPU,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAPpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kCAAkC;AAC5C,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,WAAW;AACtB,wBAAA,iBAAiB,EAAE,iBAAiB;AACrC,qBAAA;AACF,iBAAA;;;AClBD;;AAEG;;"}
@@ -75,13 +75,13 @@ class Chip {
75
75
  event.stopPropagation();
76
76
  this.removed.emit();
77
77
  }
78
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Chip, deps: [], target: i0.ɵɵFactoryTarget.Component });
79
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: Chip, isStandalone: true, selector: "mf-chip", inputs: { tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null }, removeLabel: { classPropertyName: "removeLabel", publicName: "removeLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed" }, host: { properties: { "class": "classes()" } }, exportAs: ["mfChip"], ngImport: i0, template: `
78
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Chip, deps: [], target: i0.ɵɵFactoryTarget.Component });
79
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: Chip, isStandalone: true, selector: "mf-chip", inputs: { tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null }, removeLabel: { classPropertyName: "removeLabel", publicName: "removeLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed" }, host: { properties: { "class": "classes()" } }, exportAs: ["mfChip"], ngImport: i0, template: `
80
80
  <ng-content />
81
81
  @if (removable()) {
82
82
  <button
83
83
  type="button"
84
- class="text-fg-subtle hover:text-danger -me-1 shrink-0 appearance-none border-0 bg-transparent p-0.5 transition-colors duration-fast ease-emphasis disabled:pointer-events-none"
84
+ class="inline-flex items-center justify-center text-fg-subtle hover:text-danger -me-1 shrink-0 appearance-none border-0 bg-transparent p-0.5 transition-colors duration-fast ease-emphasis disabled:pointer-events-none"
85
85
  [attr.aria-label]="effectiveRemoveLabel()"
86
86
  [disabled]="disabled()"
87
87
  (click)="onRemoveClick($event)"
@@ -91,7 +91,7 @@ class Chip {
91
91
  }
92
92
  `, isInline: true, dependencies: [{ kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }] });
93
93
  }
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Chip, decorators: [{
94
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Chip, decorators: [{
95
95
  type: Component,
96
96
  args: [{
97
97
  selector: 'mf-chip',
@@ -103,7 +103,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
103
103
  @if (removable()) {
104
104
  <button
105
105
  type="button"
106
- class="text-fg-subtle hover:text-danger -me-1 shrink-0 appearance-none border-0 bg-transparent p-0.5 transition-colors duration-fast ease-emphasis disabled:pointer-events-none"
106
+ class="inline-flex items-center justify-center text-fg-subtle hover:text-danger -me-1 shrink-0 appearance-none border-0 bg-transparent p-0.5 transition-colors duration-fast ease-emphasis disabled:pointer-events-none"
107
107
  [attr.aria-label]="effectiveRemoveLabel()"
108
108
  [disabled]="disabled()"
109
109
  (click)="onRemoveClick($event)"
@@ -1 +1 @@
1
- {"version":3,"file":"mesgflow-ui-kit-chip.mjs","sources":["../../../projects/ui-kit/chip/chip.variants.ts","../../../projects/ui-kit/chip/chip.ts","../../../projects/ui-kit/chip/mesgflow-ui-kit-chip.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Badge (bkz. badge.variants.ts) ile AYNI tonal işaret rol token'ı\r\n * (`bg-X-tint text-X-tint-fg`) — chip Badge'in ETKİLEŞİMLİ (kaldırılabilir/\r\n * seçilebilir) hali, o yüzden aynı görsel aileyi paylaşıyor. `text-eyebrow`'un\r\n * mono/büyük-harf kimliği BİLEREK burada YOK — chip genelde \"Rol: Yönetici\"\r\n * gibi okunabilir, karma büyük/küçük harfli içerik taşıyor (Badge'in kısa\r\n * durum etiketlerinin aksine).\r\n */\r\nexport const chipVariants = cva(\r\n 'inline-flex items-center gap-1 rounded-full text-xs font-medium transition-colors duration-fast ease-emphasis',\r\n {\r\n variants: {\r\n tone: {\r\n neutral: 'bg-surface-alt text-fg-muted',\r\n primary: 'bg-primary-tint text-primary-tint-fg',\r\n success: 'bg-success-tint text-success-tint-fg',\r\n warning: 'bg-warning-tint text-warning-tint-fg',\r\n danger: 'bg-danger-tint text-danger-tint-fg',\r\n info: 'bg-info-tint text-info-tint-fg',\r\n help: 'bg-help-tint text-help-tint-fg',\r\n },\r\n size: {\r\n sm: 'py-1 pe-1.5 ps-2.5',\r\n md: 'py-1.5 pe-2 ps-3',\r\n },\r\n /** Seçili durumdaki bir chip (ör. filtrelenebilir bir etiket listesi) — tona bakmaksızın TEK bir vurgu mekanizması (`ring-current`), her tonun kendi seçili basamağını tanımlamasına gerek kalmadan. */\r\n selected: {\r\n true: 'ring-1 ring-inset ring-current',\r\n false: '',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { tone: 'neutral', size: 'md', selected: false, disabled: false },\r\n },\r\n);\r\n\r\nexport type ChipTone = VariantProps<typeof chipVariants>['tone'];\r\nexport type ChipSize = VariantProps<typeof chipVariants>['size'];\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { cn, MF_CHIP_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { chipVariants, type ChipSize, type ChipTone } from './chip.variants';\r\n\r\n/**\r\n * `<mf-chip removable (removed)=\"onRemove()\">Rol: Yönetici</mf-chip>` — asıl\r\n * içerik `<ng-content />` ile projekte edilir (ör. `TableFilterBar`'ın\r\n * kendi tıklanabilir düzenleme düğmesi, bkz. `table-filter-bar.html`); Chip\r\n * SADECE kabuğu (tonal dolgu + opsiyonel kaldırma düğmesi) sağlar, içeriğin\r\n * kendi tıklama davranışına karışmaz.\r\n */\r\n@Component({\r\n selector: 'mf-chip',\r\n exportAs: 'mfChip',\r\n imports: [Icon],\r\n host: { '[class]': 'classes()' },\r\n template: `\r\n <ng-content />\r\n @if (removable()) {\r\n <button\r\n type=\"button\"\r\n class=\"text-fg-subtle hover:text-danger -me-1 shrink-0 appearance-none border-0 bg-transparent p-0.5 transition-colors duration-fast ease-emphasis disabled:pointer-events-none\"\r\n [attr.aria-label]=\"effectiveRemoveLabel()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onRemoveClick($event)\"\r\n >\r\n <span mfIcon [size]=\"14\">close</span>\r\n </button>\r\n }\r\n `,\r\n})\r\nexport class Chip {\r\n readonly tone = input<ChipTone>('neutral');\r\n readonly size = input<ChipSize>('md');\r\n readonly selected = input(false);\r\n readonly disabled = input(false);\r\n readonly removable = input(false);\r\n readonly removeLabel = input<string>();\r\n\r\n readonly removed = output<void>();\r\n\r\n private readonly chipLabels = inject(MF_CHIP_LABELS);\r\n protected readonly effectiveRemoveLabel = computed(\r\n () => this.removeLabel() ?? this.chipLabels().remove,\r\n );\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n chipVariants({\r\n tone: this.tone(),\r\n size: this.size(),\r\n selected: this.selected(),\r\n disabled: this.disabled(),\r\n }),\r\n ),\r\n );\r\n\r\n protected onRemoveClick(event: Event): void {\r\n event.stopPropagation();\r\n this.removed.emit();\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-chip.mjs","sources":["../../../projects/ui-kit/chip/chip.variants.ts","../../../projects/ui-kit/chip/chip.ts","../../../projects/ui-kit/chip/mesgflow-ui-kit-chip.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Badge (bkz. badge.variants.ts) ile AYNI tonal işaret rol token'ı\r\n * (`bg-X-tint text-X-tint-fg`) — chip Badge'in ETKİLEŞİMLİ (kaldırılabilir/\r\n * seçilebilir) hali, o yüzden aynı görsel aileyi paylaşıyor. `text-eyebrow`'un\r\n * mono/büyük-harf kimliği BİLEREK burada YOK — chip genelde \"Rol: Yönetici\"\r\n * gibi okunabilir, karma büyük/küçük harfli içerik taşıyor (Badge'in kısa\r\n * durum etiketlerinin aksine).\r\n */\r\nexport const chipVariants = cva(\r\n 'inline-flex items-center gap-1 rounded-full text-xs font-medium transition-colors duration-fast ease-emphasis',\r\n {\r\n variants: {\r\n tone: {\r\n neutral: 'bg-surface-alt text-fg-muted',\r\n primary: 'bg-primary-tint text-primary-tint-fg',\r\n success: 'bg-success-tint text-success-tint-fg',\r\n warning: 'bg-warning-tint text-warning-tint-fg',\r\n danger: 'bg-danger-tint text-danger-tint-fg',\r\n info: 'bg-info-tint text-info-tint-fg',\r\n help: 'bg-help-tint text-help-tint-fg',\r\n },\r\n size: {\r\n sm: 'py-1 pe-1.5 ps-2.5',\r\n md: 'py-1.5 pe-2 ps-3',\r\n },\r\n /** Seçili durumdaki bir chip (ör. filtrelenebilir bir etiket listesi) — tona bakmaksızın TEK bir vurgu mekanizması (`ring-current`), her tonun kendi seçili basamağını tanımlamasına gerek kalmadan. */\r\n selected: {\r\n true: 'ring-1 ring-inset ring-current',\r\n false: '',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { tone: 'neutral', size: 'md', selected: false, disabled: false },\r\n },\r\n);\r\n\r\nexport type ChipTone = VariantProps<typeof chipVariants>['tone'];\r\nexport type ChipSize = VariantProps<typeof chipVariants>['size'];\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { cn, MF_CHIP_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { chipVariants, type ChipSize, type ChipTone } from './chip.variants';\r\n\r\n/**\r\n * `<mf-chip removable (removed)=\"onRemove()\">Rol: Yönetici</mf-chip>` — asıl\r\n * içerik `<ng-content />` ile projekte edilir (ör. `TableFilterBar`'ın\r\n * kendi tıklanabilir düzenleme düğmesi, bkz. `table-filter-bar.html`); Chip\r\n * SADECE kabuğu (tonal dolgu + opsiyonel kaldırma düğmesi) sağlar, içeriğin\r\n * kendi tıklama davranışına karışmaz.\r\n */\r\n@Component({\r\n selector: 'mf-chip',\r\n exportAs: 'mfChip',\r\n imports: [Icon],\r\n host: { '[class]': 'classes()' },\r\n template: `\r\n <ng-content />\r\n @if (removable()) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center justify-center text-fg-subtle hover:text-danger -me-1 shrink-0 appearance-none border-0 bg-transparent p-0.5 transition-colors duration-fast ease-emphasis disabled:pointer-events-none\"\r\n [attr.aria-label]=\"effectiveRemoveLabel()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onRemoveClick($event)\"\r\n >\r\n <span mfIcon [size]=\"14\">close</span>\r\n </button>\r\n }\r\n `,\r\n})\r\nexport class Chip {\r\n readonly tone = input<ChipTone>('neutral');\r\n readonly size = input<ChipSize>('md');\r\n readonly selected = input(false);\r\n readonly disabled = input(false);\r\n readonly removable = input(false);\r\n readonly removeLabel = input<string>();\r\n\r\n readonly removed = output<void>();\r\n\r\n private readonly chipLabels = inject(MF_CHIP_LABELS);\r\n protected readonly effectiveRemoveLabel = computed(\r\n () => this.removeLabel() ?? this.chipLabels().remove,\r\n );\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n chipVariants({\r\n tone: this.tone(),\r\n size: this.size(),\r\n selected: this.selected(),\r\n disabled: this.disabled(),\r\n }),\r\n ),\r\n );\r\n\r\n protected onRemoveClick(event: Event): void {\r\n event.stopPropagation();\r\n this.removed.emit();\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,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, input, booleanAttribute, inject, computed, Component } from '@angular/core';
3
- import { MF_COPY_LABELS, cn } from '@mesgflow/ui-kit/core';
2
+ import { InjectionToken, input, booleanAttribute, computed, inject, Component } from '@angular/core';
3
+ import { cn, MF_COPY_LABELS } from '@mesgflow/ui-kit/core';
4
4
  import { CopyButton } from '@mesgflow/ui-kit/copy-button';
5
5
  import { Icon } from '@mesgflow/ui-kit/icon';
6
6
 
@@ -40,6 +40,10 @@ class CodeBlock {
40
40
  /** Kaydırma alanının azami yüksekliği (CSS uzunluğu, ör. `'20rem'`); verilmezse sınırsız. */
41
41
  maxHeight = input(/* @ts-ignore */
42
42
  ...(ngDevMode ? [undefined, { debugName: "maxHeight" }] : /* istanbul ignore next */ []));
43
+ /** `false` — kenarlık/köşe yarıçapı olmadan, bir kartın/panelin İÇİNE gömülü (sekmeli demo panelleri). */
44
+ bordered = input(true, { ...(ngDevMode ? { debugName: "bordered" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
45
+ figureClasses = computed(() => cn('m-0 overflow-hidden bg-surface-sunken', this.bordered() ? 'rounded-lg border border-border' : 'rounded-none border-0'), /* @ts-ignore */
46
+ ...(ngDevMode ? [{ debugName: "figureClasses" }] : /* istanbul ignore next */ []));
43
47
  highlighter = inject(MF_CODE_HIGHLIGHTER);
44
48
  labels = inject(MF_COPY_LABELS);
45
49
  hasHeader = computed(() => !!(this.filename() || this.language()), /* @ts-ignore */
@@ -55,13 +59,13 @@ class CodeBlock {
55
59
  ...(ngDevMode ? [{ debugName: "wraps" }] : /* istanbul ignore next */ []));
56
60
  preClasses = computed(() => cn('m-0 flex-1 py-4 pe-4 font-mono text-sm leading-relaxed text-fg-muted', this.lineNumbers() ? 'ps-2' : 'ps-4', this.wraps() ? 'whitespace-pre-wrap break-words' : 'whitespace-pre', !this.hasHeader() && this.copyable() && 'pe-12'), /* @ts-ignore */
57
61
  ...(ngDevMode ? [{ debugName: "preClasses" }] : /* istanbul ignore next */ []));
58
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component });
59
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: CodeBlock, isStandalone: true, selector: "mf-code-block", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: true, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, lineNumbers: { classPropertyName: "lineNumbers", publicName: "lineNumbers", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null }, copyable: { classPropertyName: "copyable", publicName: "copyable", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, exportAs: ["mfCodeBlock"], ngImport: i0, template: "<figure class=\"m-0 overflow-hidden rounded-lg border border-border bg-surface-sunken\">\r\n @if (hasHeader()) {\r\n <figcaption\r\n class=\"flex min-h-10 items-center gap-2 border-b border-border ps-4 pe-1.5 text-xs text-fg-muted\"\r\n >\r\n @if (filename()) {\r\n <span mfIcon [size]=\"14\" class=\"shrink-0 text-fg-subtle\">description</span>\r\n <span class=\"min-w-0 truncate font-mono\">{{ filename() }}</span>\r\n }\r\n <span class=\"ms-auto flex shrink-0 items-center gap-1\">\r\n @if (language()) {\r\n <span\r\n class=\"rounded-xs bg-surface-alt px-1.5 py-0.5 font-mono text-eyebrow text-fg-subtle uppercase\"\r\n >{{ language() }}</span\r\n >\r\n }\r\n @if (copyable()) {\r\n <mf-copy-button [value]=\"code()\" />\r\n }\r\n </span>\r\n </figcaption>\r\n }\r\n\r\n <div class=\"relative\">\r\n @if (!hasHeader() && copyable()) {\r\n <mf-copy-button class=\"absolute end-2 top-2 z-[2]\" [value]=\"code()\" />\r\n }\r\n <div\r\n tabindex=\"0\"\r\n role=\"group\"\r\n [attr.aria-label]=\"regionLabel()\"\r\n class=\"overflow-auto outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring\"\r\n [style.max-height]=\"maxHeight() ?? null\"\r\n >\r\n <div class=\"flex\" [class.min-w-max]=\"!wraps()\">\r\n @if (lineNumbers()) {\r\n <div\r\n aria-hidden=\"true\"\r\n class=\"sticky start-0 z-[1] shrink-0 bg-surface-sunken py-4 ps-4 pe-2 text-end font-mono text-sm leading-relaxed text-fg-subtle tabular-nums select-none\"\r\n >\r\n @for (line of lines(); track line) {\r\n <div>{{ line }}</div>\r\n }\r\n </div>\r\n }\r\n <!-- \u0130\u00E7erik tek sat\u0131rda: <pre> i\u00E7indeki \u015Fablon bo\u015Fluklar\u0131 koda s\u0131zmas\u0131n. -->\r\n @if (highlighted(); as html) {\r\n <pre [class]=\"preClasses()\"><code [innerHTML]=\"html\"></code></pre>\r\n } @else {\r\n <pre [class]=\"preClasses()\"><code>{{ code() }}</code></pre>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</figure>\r\n", dependencies: [{ kind: "component", type: CopyButton, selector: "mf-copy-button", inputs: ["value", "label"], exportAs: ["mfCopyButton"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }] });
62
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: CodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component });
63
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: CodeBlock, isStandalone: true, selector: "mf-code-block", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: true, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, filename: { classPropertyName: "filename", publicName: "filename", isSignal: true, isRequired: false, transformFunction: null }, lineNumbers: { classPropertyName: "lineNumbers", publicName: "lineNumbers", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null }, copyable: { classPropertyName: "copyable", publicName: "copyable", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, exportAs: ["mfCodeBlock"], ngImport: i0, template: "<figure [class]=\"figureClasses()\">\r\n @if (hasHeader()) {\r\n <figcaption\r\n class=\"flex min-h-10 items-center gap-2 border-b border-border ps-4 pe-1.5 text-xs text-fg-muted\"\r\n >\r\n @if (filename()) {\r\n <span mfIcon [size]=\"14\" class=\"shrink-0 text-fg-subtle\">description</span>\r\n <span class=\"min-w-0 truncate font-mono\">{{ filename() }}</span>\r\n }\r\n <span class=\"ms-auto flex shrink-0 items-center gap-1\">\r\n @if (language()) {\r\n <span\r\n class=\"rounded-xs bg-surface-alt px-1.5 py-0.5 font-mono text-eyebrow text-fg-subtle uppercase\"\r\n >{{ language() }}</span\r\n >\r\n }\r\n @if (copyable()) {\r\n <mf-copy-button [value]=\"code()\" />\r\n }\r\n </span>\r\n </figcaption>\r\n }\r\n\r\n <div class=\"relative\">\r\n @if (!hasHeader() && copyable()) {\r\n <mf-copy-button class=\"absolute end-2 top-2 z-[2]\" [value]=\"code()\" />\r\n }\r\n <div\r\n tabindex=\"0\"\r\n role=\"group\"\r\n [attr.aria-label]=\"regionLabel()\"\r\n class=\"overflow-auto outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring\"\r\n [style.max-height]=\"maxHeight() ?? null\"\r\n >\r\n <div class=\"flex\" [class.min-w-max]=\"!wraps()\">\r\n @if (lineNumbers()) {\r\n <div\r\n aria-hidden=\"true\"\r\n class=\"sticky start-0 z-[1] shrink-0 bg-surface-sunken py-4 ps-4 pe-2 text-end font-mono text-sm leading-relaxed text-fg-subtle tabular-nums select-none\"\r\n >\r\n @for (line of lines(); track line) {\r\n <div>{{ line }}</div>\r\n }\r\n </div>\r\n }\r\n <!-- \u0130\u00E7erik tek sat\u0131rda: <pre> i\u00E7indeki \u015Fablon bo\u015Fluklar\u0131 koda s\u0131zmas\u0131n. -->\r\n @if (highlighted(); as html) {\r\n <pre [class]=\"preClasses()\"><code [innerHTML]=\"html\"></code></pre>\r\n } @else {\r\n <pre [class]=\"preClasses()\"><code>{{ code() }}</code></pre>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</figure>\r\n", dependencies: [{ kind: "component", type: CopyButton, selector: "mf-copy-button", inputs: ["value", "label"], exportAs: ["mfCopyButton"] }, { kind: "directive", type: Icon, selector: "span[mfIcon]", inputs: ["size", "filled"] }] });
60
64
  }
61
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CodeBlock, decorators: [{
65
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: CodeBlock, decorators: [{
62
66
  type: Component,
63
- args: [{ selector: 'mf-code-block', exportAs: 'mfCodeBlock', imports: [CopyButton, Icon], host: { class: 'block' }, template: "<figure class=\"m-0 overflow-hidden rounded-lg border border-border bg-surface-sunken\">\r\n @if (hasHeader()) {\r\n <figcaption\r\n class=\"flex min-h-10 items-center gap-2 border-b border-border ps-4 pe-1.5 text-xs text-fg-muted\"\r\n >\r\n @if (filename()) {\r\n <span mfIcon [size]=\"14\" class=\"shrink-0 text-fg-subtle\">description</span>\r\n <span class=\"min-w-0 truncate font-mono\">{{ filename() }}</span>\r\n }\r\n <span class=\"ms-auto flex shrink-0 items-center gap-1\">\r\n @if (language()) {\r\n <span\r\n class=\"rounded-xs bg-surface-alt px-1.5 py-0.5 font-mono text-eyebrow text-fg-subtle uppercase\"\r\n >{{ language() }}</span\r\n >\r\n }\r\n @if (copyable()) {\r\n <mf-copy-button [value]=\"code()\" />\r\n }\r\n </span>\r\n </figcaption>\r\n }\r\n\r\n <div class=\"relative\">\r\n @if (!hasHeader() && copyable()) {\r\n <mf-copy-button class=\"absolute end-2 top-2 z-[2]\" [value]=\"code()\" />\r\n }\r\n <div\r\n tabindex=\"0\"\r\n role=\"group\"\r\n [attr.aria-label]=\"regionLabel()\"\r\n class=\"overflow-auto outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring\"\r\n [style.max-height]=\"maxHeight() ?? null\"\r\n >\r\n <div class=\"flex\" [class.min-w-max]=\"!wraps()\">\r\n @if (lineNumbers()) {\r\n <div\r\n aria-hidden=\"true\"\r\n class=\"sticky start-0 z-[1] shrink-0 bg-surface-sunken py-4 ps-4 pe-2 text-end font-mono text-sm leading-relaxed text-fg-subtle tabular-nums select-none\"\r\n >\r\n @for (line of lines(); track line) {\r\n <div>{{ line }}</div>\r\n }\r\n </div>\r\n }\r\n <!-- \u0130\u00E7erik tek sat\u0131rda: <pre> i\u00E7indeki \u015Fablon bo\u015Fluklar\u0131 koda s\u0131zmas\u0131n. -->\r\n @if (highlighted(); as html) {\r\n <pre [class]=\"preClasses()\"><code [innerHTML]=\"html\"></code></pre>\r\n } @else {\r\n <pre [class]=\"preClasses()\"><code>{{ code() }}</code></pre>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</figure>\r\n" }]
64
- }], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: true }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], filename: [{ type: i0.Input, args: [{ isSignal: true, alias: "filename", required: false }] }], lineNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "lineNumbers", required: false }] }], wrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrap", required: false }] }], copyable: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyable", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }] } });
67
+ args: [{ selector: 'mf-code-block', exportAs: 'mfCodeBlock', imports: [CopyButton, Icon], host: { class: 'block' }, template: "<figure [class]=\"figureClasses()\">\r\n @if (hasHeader()) {\r\n <figcaption\r\n class=\"flex min-h-10 items-center gap-2 border-b border-border ps-4 pe-1.5 text-xs text-fg-muted\"\r\n >\r\n @if (filename()) {\r\n <span mfIcon [size]=\"14\" class=\"shrink-0 text-fg-subtle\">description</span>\r\n <span class=\"min-w-0 truncate font-mono\">{{ filename() }}</span>\r\n }\r\n <span class=\"ms-auto flex shrink-0 items-center gap-1\">\r\n @if (language()) {\r\n <span\r\n class=\"rounded-xs bg-surface-alt px-1.5 py-0.5 font-mono text-eyebrow text-fg-subtle uppercase\"\r\n >{{ language() }}</span\r\n >\r\n }\r\n @if (copyable()) {\r\n <mf-copy-button [value]=\"code()\" />\r\n }\r\n </span>\r\n </figcaption>\r\n }\r\n\r\n <div class=\"relative\">\r\n @if (!hasHeader() && copyable()) {\r\n <mf-copy-button class=\"absolute end-2 top-2 z-[2]\" [value]=\"code()\" />\r\n }\r\n <div\r\n tabindex=\"0\"\r\n role=\"group\"\r\n [attr.aria-label]=\"regionLabel()\"\r\n class=\"overflow-auto outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring\"\r\n [style.max-height]=\"maxHeight() ?? null\"\r\n >\r\n <div class=\"flex\" [class.min-w-max]=\"!wraps()\">\r\n @if (lineNumbers()) {\r\n <div\r\n aria-hidden=\"true\"\r\n class=\"sticky start-0 z-[1] shrink-0 bg-surface-sunken py-4 ps-4 pe-2 text-end font-mono text-sm leading-relaxed text-fg-subtle tabular-nums select-none\"\r\n >\r\n @for (line of lines(); track line) {\r\n <div>{{ line }}</div>\r\n }\r\n </div>\r\n }\r\n <!-- \u0130\u00E7erik tek sat\u0131rda: <pre> i\u00E7indeki \u015Fablon bo\u015Fluklar\u0131 koda s\u0131zmas\u0131n. -->\r\n @if (highlighted(); as html) {\r\n <pre [class]=\"preClasses()\"><code [innerHTML]=\"html\"></code></pre>\r\n } @else {\r\n <pre [class]=\"preClasses()\"><code>{{ code() }}</code></pre>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</figure>\r\n" }]
68
+ }], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: true }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], filename: [{ type: i0.Input, args: [{ isSignal: true, alias: "filename", required: false }] }], lineNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "lineNumbers", required: false }] }], wrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrap", required: false }] }], copyable: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyable", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }] } });
65
69
 
66
70
  /**
67
71
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"mesgflow-ui-kit-code-block.mjs","sources":["../../../projects/ui-kit/code-block/code-highlighter.ts","../../../projects/ui-kit/code-block/code-block.ts","../../../projects/ui-kit/code-block/code-block.html","../../../projects/ui-kit/code-block/mesgflow-ui-kit-code-block.ts"],"sourcesContent":["import { InjectionToken, type Provider } from '@angular/core';\r\n\r\n/**\r\n * Kod → vurgulanmış HTML. Dönüş `[innerHTML]` ile basılır: düz `string` Angular'ın sanitizer'ından\r\n * geçer (sınıflar kalır, satır içi `style` atılır — highlight.js/Prism gibi SINIF tabanlı\r\n * vurgulayıcılar olduğu gibi çalışır). Satır içi renk kullanan bir çıktıya (ör. varsayılan shiki)\r\n * güveniyorsanız `DomSanitizer.bypassSecurityTrustHtml` çıktısını döndürün — sorumluluk sizde.\r\n * (Tip `object`: kit `@angular/platform-browser`'a peer bağımlılık eklemesin diye `SafeHtml` yerine.)\r\n */\r\nexport type MfCodeHighlighter = (code: string, language: string | undefined) => string | object;\r\n\r\n/** Varsayılan `null` — kit vurgulama kütüphanesi GÖMMEZ (bağımlılık politikası); düz metin. */\r\nexport const MF_CODE_HIGHLIGHTER = new InjectionToken<MfCodeHighlighter | null>(\r\n 'mesgflow.code-highlighter',\r\n { factory: () => null },\r\n);\r\n\r\n/** `providers: [provideCodeHighlighter((code, lang) => hljs.highlight(code, { language: lang ?? 'plaintext' }).value)]` */\r\nexport function provideCodeHighlighter(highlighter: MfCodeHighlighter): Provider {\r\n return { provide: MF_CODE_HIGHLIGHTER, useValue: highlighter };\r\n}\r\n","import { Component, booleanAttribute, computed, inject, input } from '@angular/core';\r\nimport { MF_COPY_LABELS, cn } from '@mesgflow/ui-kit/core';\r\nimport { CopyButton } from '@mesgflow/ui-kit/copy-button';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { MF_CODE_HIGHLIGHTER } from './code-highlighter';\r\n\r\n/**\r\n * `<mf-code-block [code]=\"snippet\" filename=\"app.config.ts\" language=\"ts\" lineNumbers />`\r\n *\r\n * Başlık şeridi (dosya adı · dil rozeti · kopyala) yalnızca `filename`/`language` verilince\r\n * çizilir; yoksa kopyala düğmesi sağ üst köşede yüzer. Kaydırma alanı odaklanabilir ve adlı bir\r\n * `role=\"group\"` (klavyeyle kaydırılabilsin — axe `scrollable-region-focusable`). `region`\r\n * DEĞİL: region bir landmark; bir sayfadaki onlarca \"Kod\" bölgesi landmark listesini kirletip\r\n * axe `landmark-unique` ihlali veriyordu (showcase rota taramasında yakalandı).\r\n *\r\n * Satır numaraları kaydırma alanının İÇİNDE, yatayda yapışkan (`sticky start-0`) bir oluk —\r\n * dikey kaydırmada satırlarla hizalı kalır, yatayda yerinde durur; seçimle kopyalanmaz.\r\n * `wrap` satır kaydırır ama numaralarla birlikte kullanılamaz (kaydırılan satır numara\r\n * hizasını bozar) — ikisi birden verilirse `lineNumbers` kazanır.\r\n *\r\n * Vurgulama isteğe bağlı: `provideCodeHighlighter()` (bkz. `code-highlighter.ts`).\r\n */\r\n@Component({\r\n selector: 'mf-code-block',\r\n exportAs: 'mfCodeBlock',\r\n imports: [CopyButton, Icon],\r\n host: { class: 'block' },\r\n templateUrl: './code-block.html',\r\n})\r\nexport class CodeBlock {\r\n readonly code = input.required<string>();\r\n readonly language = input<string>();\r\n readonly filename = input<string>();\r\n readonly lineNumbers = input(false, { transform: booleanAttribute });\r\n readonly wrap = input(false, { transform: booleanAttribute });\r\n readonly copyable = input(true, { transform: booleanAttribute });\r\n /** Kaydırma alanının azami yüksekliği (CSS uzunluğu, ör. `'20rem'`); verilmezse sınırsız. */\r\n readonly maxHeight = input<string>();\r\n\r\n private readonly highlighter = inject(MF_CODE_HIGHLIGHTER);\r\n private readonly labels = inject(MF_COPY_LABELS);\r\n\r\n protected readonly hasHeader = computed(() => !!(this.filename() || this.language()));\r\n protected readonly regionLabel = computed(() => this.filename() || this.labels().code);\r\n protected readonly highlighted = computed(() =>\r\n this.highlighter ? this.highlighter(this.code(), this.language()) : null,\r\n );\r\n /** Sondaki satır sonu boş bir satır numarası üretmesin. */\r\n protected readonly lines = computed(() =>\r\n Array.from({ length: this.code().replace(/\\n$/, '').split('\\n').length }, (_, i) => i + 1),\r\n );\r\n protected readonly wraps = computed(() => this.wrap() && !this.lineNumbers());\r\n\r\n protected readonly preClasses = computed(() =>\r\n cn(\r\n 'm-0 flex-1 py-4 pe-4 font-mono text-sm leading-relaxed text-fg-muted',\r\n this.lineNumbers() ? 'ps-2' : 'ps-4',\r\n this.wraps() ? 'whitespace-pre-wrap break-words' : 'whitespace-pre',\r\n !this.hasHeader() && this.copyable() && 'pe-12',\r\n ),\r\n );\r\n}\r\n","<figure class=\"m-0 overflow-hidden rounded-lg border border-border bg-surface-sunken\">\r\n @if (hasHeader()) {\r\n <figcaption\r\n class=\"flex min-h-10 items-center gap-2 border-b border-border ps-4 pe-1.5 text-xs text-fg-muted\"\r\n >\r\n @if (filename()) {\r\n <span mfIcon [size]=\"14\" class=\"shrink-0 text-fg-subtle\">description</span>\r\n <span class=\"min-w-0 truncate font-mono\">{{ filename() }}</span>\r\n }\r\n <span class=\"ms-auto flex shrink-0 items-center gap-1\">\r\n @if (language()) {\r\n <span\r\n class=\"rounded-xs bg-surface-alt px-1.5 py-0.5 font-mono text-eyebrow text-fg-subtle uppercase\"\r\n >{{ language() }}</span\r\n >\r\n }\r\n @if (copyable()) {\r\n <mf-copy-button [value]=\"code()\" />\r\n }\r\n </span>\r\n </figcaption>\r\n }\r\n\r\n <div class=\"relative\">\r\n @if (!hasHeader() && copyable()) {\r\n <mf-copy-button class=\"absolute end-2 top-2 z-[2]\" [value]=\"code()\" />\r\n }\r\n <div\r\n tabindex=\"0\"\r\n role=\"group\"\r\n [attr.aria-label]=\"regionLabel()\"\r\n class=\"overflow-auto outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring\"\r\n [style.max-height]=\"maxHeight() ?? null\"\r\n >\r\n <div class=\"flex\" [class.min-w-max]=\"!wraps()\">\r\n @if (lineNumbers()) {\r\n <div\r\n aria-hidden=\"true\"\r\n class=\"sticky start-0 z-[1] shrink-0 bg-surface-sunken py-4 ps-4 pe-2 text-end font-mono text-sm leading-relaxed text-fg-subtle tabular-nums select-none\"\r\n >\r\n @for (line of lines(); track line) {\r\n <div>{{ line }}</div>\r\n }\r\n </div>\r\n }\r\n <!-- İçerik tek satırda: <pre> içindeki şablon boşlukları koda sızmasın. -->\r\n @if (highlighted(); as html) {\r\n <pre [class]=\"preClasses()\"><code [innerHTML]=\"html\"></code></pre>\r\n } @else {\r\n <pre [class]=\"preClasses()\"><code>{{ code() }}</code></pre>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</figure>\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-code-block.mjs","sources":["../../../projects/ui-kit/code-block/code-highlighter.ts","../../../projects/ui-kit/code-block/code-block.ts","../../../projects/ui-kit/code-block/code-block.html","../../../projects/ui-kit/code-block/mesgflow-ui-kit-code-block.ts"],"sourcesContent":["import { InjectionToken, type Provider } from '@angular/core';\r\n\r\n/**\r\n * Kod → vurgulanmış HTML. Dönüş `[innerHTML]` ile basılır: düz `string` Angular'ın sanitizer'ından\r\n * geçer (sınıflar kalır, satır içi `style` atılır — highlight.js/Prism gibi SINIF tabanlı\r\n * vurgulayıcılar olduğu gibi çalışır). Satır içi renk kullanan bir çıktıya (ör. varsayılan shiki)\r\n * güveniyorsanız `DomSanitizer.bypassSecurityTrustHtml` çıktısını döndürün — sorumluluk sizde.\r\n * (Tip `object`: kit `@angular/platform-browser`'a peer bağımlılık eklemesin diye `SafeHtml` yerine.)\r\n */\r\nexport type MfCodeHighlighter = (code: string, language: string | undefined) => string | object;\r\n\r\n/** Varsayılan `null` — kit vurgulama kütüphanesi GÖMMEZ (bağımlılık politikası); düz metin. */\r\nexport const MF_CODE_HIGHLIGHTER = new InjectionToken<MfCodeHighlighter | null>(\r\n 'mesgflow.code-highlighter',\r\n { factory: () => null },\r\n);\r\n\r\n/** `providers: [provideCodeHighlighter((code, lang) => hljs.highlight(code, { language: lang ?? 'plaintext' }).value)]` */\r\nexport function provideCodeHighlighter(highlighter: MfCodeHighlighter): Provider {\r\n return { provide: MF_CODE_HIGHLIGHTER, useValue: highlighter };\r\n}\r\n","import { Component, booleanAttribute, computed, inject, input } from '@angular/core';\r\nimport { MF_COPY_LABELS, cn } from '@mesgflow/ui-kit/core';\r\nimport { CopyButton } from '@mesgflow/ui-kit/copy-button';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { MF_CODE_HIGHLIGHTER } from './code-highlighter';\r\n\r\n/**\r\n * `<mf-code-block [code]=\"snippet\" filename=\"app.config.ts\" language=\"ts\" lineNumbers />`\r\n *\r\n * Başlık şeridi (dosya adı · dil rozeti · kopyala) yalnızca `filename`/`language` verilince\r\n * çizilir; yoksa kopyala düğmesi sağ üst köşede yüzer. Kaydırma alanı odaklanabilir ve adlı bir\r\n * `role=\"group\"` (klavyeyle kaydırılabilsin — axe `scrollable-region-focusable`). `region`\r\n * DEĞİL: region bir landmark; bir sayfadaki onlarca \"Kod\" bölgesi landmark listesini kirletip\r\n * axe `landmark-unique` ihlali veriyordu (showcase rota taramasında yakalandı).\r\n *\r\n * Satır numaraları kaydırma alanının İÇİNDE, yatayda yapışkan (`sticky start-0`) bir oluk —\r\n * dikey kaydırmada satırlarla hizalı kalır, yatayda yerinde durur; seçimle kopyalanmaz.\r\n * `wrap` satır kaydırır ama numaralarla birlikte kullanılamaz (kaydırılan satır numara\r\n * hizasını bozar) — ikisi birden verilirse `lineNumbers` kazanır.\r\n *\r\n * Vurgulama isteğe bağlı: `provideCodeHighlighter()` (bkz. `code-highlighter.ts`).\r\n */\r\n@Component({\r\n selector: 'mf-code-block',\r\n exportAs: 'mfCodeBlock',\r\n imports: [CopyButton, Icon],\r\n host: { class: 'block' },\r\n templateUrl: './code-block.html',\r\n})\r\nexport class CodeBlock {\r\n readonly code = input.required<string>();\r\n readonly language = input<string>();\r\n readonly filename = input<string>();\r\n readonly lineNumbers = input(false, { transform: booleanAttribute });\r\n readonly wrap = input(false, { transform: booleanAttribute });\r\n readonly copyable = input(true, { transform: booleanAttribute });\r\n /** Kaydırma alanının azami yüksekliği (CSS uzunluğu, ör. `'20rem'`); verilmezse sınırsız. */\r\n readonly maxHeight = input<string>();\r\n /** `false` — kenarlık/köşe yarıçapı olmadan, bir kartın/panelin İÇİNE gömülü (sekmeli demo panelleri). */\r\n readonly bordered = input(true, { transform: booleanAttribute });\r\n\r\n protected readonly figureClasses = computed(() =>\r\n cn(\r\n 'm-0 overflow-hidden bg-surface-sunken',\r\n this.bordered() ? 'rounded-lg border border-border' : 'rounded-none border-0',\r\n ),\r\n );\r\n\r\n private readonly highlighter = inject(MF_CODE_HIGHLIGHTER);\r\n private readonly labels = inject(MF_COPY_LABELS);\r\n\r\n protected readonly hasHeader = computed(() => !!(this.filename() || this.language()));\r\n protected readonly regionLabel = computed(() => this.filename() || this.labels().code);\r\n protected readonly highlighted = computed(() =>\r\n this.highlighter ? this.highlighter(this.code(), this.language()) : null,\r\n );\r\n /** Sondaki satır sonu boş bir satır numarası üretmesin. */\r\n protected readonly lines = computed(() =>\r\n Array.from({ length: this.code().replace(/\\n$/, '').split('\\n').length }, (_, i) => i + 1),\r\n );\r\n protected readonly wraps = computed(() => this.wrap() && !this.lineNumbers());\r\n\r\n protected readonly preClasses = computed(() =>\r\n cn(\r\n 'm-0 flex-1 py-4 pe-4 font-mono text-sm leading-relaxed text-fg-muted',\r\n this.lineNumbers() ? 'ps-2' : 'ps-4',\r\n this.wraps() ? 'whitespace-pre-wrap break-words' : 'whitespace-pre',\r\n !this.hasHeader() && this.copyable() && 'pe-12',\r\n ),\r\n );\r\n}\r\n","<figure [class]=\"figureClasses()\">\r\n @if (hasHeader()) {\r\n <figcaption\r\n class=\"flex min-h-10 items-center gap-2 border-b border-border ps-4 pe-1.5 text-xs text-fg-muted\"\r\n >\r\n @if (filename()) {\r\n <span mfIcon [size]=\"14\" class=\"shrink-0 text-fg-subtle\">description</span>\r\n <span class=\"min-w-0 truncate font-mono\">{{ filename() }}</span>\r\n }\r\n <span class=\"ms-auto flex shrink-0 items-center gap-1\">\r\n @if (language()) {\r\n <span\r\n class=\"rounded-xs bg-surface-alt px-1.5 py-0.5 font-mono text-eyebrow text-fg-subtle uppercase\"\r\n >{{ language() }}</span\r\n >\r\n }\r\n @if (copyable()) {\r\n <mf-copy-button [value]=\"code()\" />\r\n }\r\n </span>\r\n </figcaption>\r\n }\r\n\r\n <div class=\"relative\">\r\n @if (!hasHeader() && copyable()) {\r\n <mf-copy-button class=\"absolute end-2 top-2 z-[2]\" [value]=\"code()\" />\r\n }\r\n <div\r\n tabindex=\"0\"\r\n role=\"group\"\r\n [attr.aria-label]=\"regionLabel()\"\r\n class=\"overflow-auto outline-none focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring\"\r\n [style.max-height]=\"maxHeight() ?? null\"\r\n >\r\n <div class=\"flex\" [class.min-w-max]=\"!wraps()\">\r\n @if (lineNumbers()) {\r\n <div\r\n aria-hidden=\"true\"\r\n class=\"sticky start-0 z-[1] shrink-0 bg-surface-sunken py-4 ps-4 pe-2 text-end font-mono text-sm leading-relaxed text-fg-subtle tabular-nums select-none\"\r\n >\r\n @for (line of lines(); track line) {\r\n <div>{{ line }}</div>\r\n }\r\n </div>\r\n }\r\n <!-- İçerik tek satırda: <pre> içindeki şablon boşlukları koda sızmasın. -->\r\n @if (highlighted(); as html) {\r\n <pre [class]=\"preClasses()\"><code [innerHTML]=\"html\"></code></pre>\r\n } @else {\r\n <pre [class]=\"preClasses()\"><code>{{ code() }}</code></pre>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n</figure>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -20,10 +20,10 @@ class Collapsible {
20
20
  if (!this.disabled())
21
21
  this.open.update((open) => !open);
22
22
  }
23
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Collapsible, deps: [], target: i0.ɵɵFactoryTarget.Component });
24
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: Collapsible, isStandalone: true, selector: "mf-collapsible", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { properties: { "attr.data-state": "open() ? 'open' : 'closed'" }, classAttribute: "block" }, exportAs: ["mfCollapsible"], ngImport: i0, template: '<ng-content />', isInline: true });
23
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Collapsible, deps: [], target: i0.ɵɵFactoryTarget.Component });
24
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: Collapsible, isStandalone: true, selector: "mf-collapsible", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange" }, host: { properties: { "attr.data-state": "open() ? 'open' : 'closed'" }, classAttribute: "block" }, exportAs: ["mfCollapsible"], ngImport: i0, template: '<ng-content />', isInline: true });
25
25
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: Collapsible, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Collapsible, decorators: [{
27
27
  type: Component,
28
28
  args: [{
29
29
  selector: 'mf-collapsible',
@@ -35,10 +35,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
35
35
  /** `button[mfCollapsibleTrigger]` — `aria-expanded`/`aria-controls` bağlı; bkz. `Collapsible`. */
36
36
  class CollapsibleTrigger {
37
37
  collapsible = inject(Collapsible);
38
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CollapsibleTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
39
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: CollapsibleTrigger, isStandalone: true, selector: "button[mfCollapsibleTrigger]", host: { listeners: { "click": "collapsible.toggle()" }, properties: { "attr.aria-expanded": "collapsible.open()", "attr.aria-controls": "collapsible.contentId", "attr.data-state": "collapsible.open() ? 'open' : 'closed'", "disabled": "collapsible.disabled()" } }, exportAs: ["mfCollapsibleTrigger"], ngImport: i0 });
38
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: CollapsibleTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive });
39
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.7", type: CollapsibleTrigger, isStandalone: true, selector: "button[mfCollapsibleTrigger]", host: { listeners: { "click": "collapsible.toggle()" }, properties: { "attr.aria-expanded": "collapsible.open()", "attr.aria-controls": "collapsible.contentId", "attr.data-state": "collapsible.open() ? 'open' : 'closed'", "disabled": "collapsible.disabled()" } }, exportAs: ["mfCollapsibleTrigger"], ngImport: i0 });
40
40
  }
41
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CollapsibleTrigger, decorators: [{
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: CollapsibleTrigger, decorators: [{
42
42
  type: Directive,
43
43
  args: [{
44
44
  selector: 'button[mfCollapsibleTrigger]',
@@ -63,10 +63,10 @@ class CollapsibleContent {
63
63
  classes = computed(() => 'grid transition-[grid-template-rows,opacity] duration-base ease-emphasis ' +
64
64
  (this.collapsible.open() ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'), /* @ts-ignore */
65
65
  ...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
66
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CollapsibleContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
67
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.6", type: CollapsibleContent, isStandalone: true, selector: "mf-collapsible-content", host: { properties: { "id": "collapsible.contentId", "attr.inert": "collapsible.open() ? null : \"\"", "attr.data-state": "collapsible.open() ? 'open' : 'closed'", "class": "classes()" } }, exportAs: ["mfCollapsibleContent"], ngImport: i0, template: '<div class="min-h-0 overflow-hidden"><ng-content /></div>', isInline: true });
66
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: CollapsibleContent, deps: [], target: i0.ɵɵFactoryTarget.Component });
67
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.7", type: CollapsibleContent, isStandalone: true, selector: "mf-collapsible-content", host: { properties: { "id": "collapsible.contentId", "attr.inert": "collapsible.open() ? null : \"\"", "attr.data-state": "collapsible.open() ? 'open' : 'closed'", "class": "classes()" } }, exportAs: ["mfCollapsibleContent"], ngImport: i0, template: '<div class="min-h-0 overflow-hidden"><ng-content /></div>', isInline: true });
68
68
  }
69
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: CollapsibleContent, decorators: [{
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: CollapsibleContent, decorators: [{
70
70
  type: Component,
71
71
  args: [{
72
72
  selector: 'mf-collapsible-content',