@mesgflow/ui-kit 0.6.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.
- package/LICENSE +21 -0
- package/README.md +200 -0
- package/fesm2022/mesgflow-ui-kit-accordion.mjs +75 -0
- package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-alert.mjs +165 -0
- package/fesm2022/mesgflow-ui-kit-alert.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +88 -0
- package/fesm2022/mesgflow-ui-kit-avatar-group.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-avatar.mjs +123 -0
- package/fesm2022/mesgflow-ui-kit-avatar.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-badge.mjs +68 -0
- package/fesm2022/mesgflow-ui-kit-badge.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-banner.mjs +111 -0
- package/fesm2022/mesgflow-ui-kit-banner.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-box-input.mjs +78 -0
- package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-brand.mjs +120 -0
- package/fesm2022/mesgflow-ui-kit-brand.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +84 -0
- package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-button-group.mjs +37 -0
- package/fesm2022/mesgflow-ui-kit-button-group.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-button.mjs +359 -0
- package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-card.mjs +128 -0
- package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-chart.mjs +538 -0
- package/fesm2022/mesgflow-ui-kit-chart.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs +45 -0
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-chip.mjs +123 -0
- package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-code-block.mjs +71 -0
- package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-collapsible.mjs +89 -0
- package/fesm2022/mesgflow-ui-kit-collapsible.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs +210 -0
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-combobox.mjs +181 -0
- package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-command.mjs +491 -0
- package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs +92 -0
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-copy-button.mjs +167 -0
- package/fesm2022/mesgflow-ui-kit-copy-button.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-core.mjs +624 -0
- package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs +643 -0
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-description-list.mjs +76 -0
- package/fesm2022/mesgflow-ui-kit-description-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-dialog.mjs +700 -0
- package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-divider.mjs +62 -0
- package/fesm2022/mesgflow-ui-kit-divider.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs +126 -0
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-empty-state.mjs +70 -0
- package/fesm2022/mesgflow-ui-kit-empty-state.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-field.mjs +42 -0
- package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-hover-card.mjs +171 -0
- package/fesm2022/mesgflow-ui-kit-hover-card.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +258 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-icon.mjs +174 -0
- package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-input.mjs +448 -0
- package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-kbd.mjs +24 -0
- package/fesm2022/mesgflow-ui-kit-kbd.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-link.mjs +48 -0
- package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-menu.mjs +105 -0
- package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-number-input.mjs +153 -0
- package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-otp-input.mjs +164 -0
- package/fesm2022/mesgflow-ui-kit-otp-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-page-header.mjs +83 -0
- package/fesm2022/mesgflow-ui-kit-page-header.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-pagination.mjs +99 -0
- package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-password-input.mjs +120 -0
- package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-popover.mjs +213 -0
- package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-progress.mjs +82 -0
- package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-radio.mjs +123 -0
- package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-rating.mjs +116 -0
- package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +84 -0
- package/fesm2022/mesgflow-ui-kit-scroll-area.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-search-input.mjs +154 -0
- package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +95 -0
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-select.mjs +227 -0
- package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs +449 -0
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs +74 -0
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-slider.mjs +179 -0
- package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-spinner.mjs +67 -0
- package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-splitter.mjs +97 -0
- package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +98 -0
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-stepper.mjs +133 -0
- package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-switch.mjs +73 -0
- package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-table.mjs +1783 -0
- package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tabs.mjs +569 -0
- package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs +138 -0
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +53 -0
- package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-theming.mjs +1016 -0
- package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs +138 -0
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-timeline.mjs +91 -0
- package/fesm2022/mesgflow-ui-kit-timeline.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-toast.mjs +202 -0
- package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-toggle.mjs +243 -0
- package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs +99 -0
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs +160 -0
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tour.mjs +272 -0
- package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tree-select.mjs +177 -0
- package/fesm2022/mesgflow-ui-kit-tree-select.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tree.mjs +82 -0
- package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit.mjs +12851 -0
- package/fesm2022/mesgflow-ui-kit.mjs.map +1 -0
- package/package.json +374 -0
- package/preset.css +20 -0
- package/tokens/color.css +693 -0
- package/tokens/contrast.css +68 -0
- package/tokens/elevation.css +68 -0
- package/tokens/motion.css +277 -0
- package/tokens/radius.css +69 -0
- package/tokens/typography.css +127 -0
- package/tokens.css +41 -0
- package/types/mesgflow-ui-kit-accordion.d.ts +42 -0
- package/types/mesgflow-ui-kit-alert.d.ts +60 -0
- package/types/mesgflow-ui-kit-avatar-group.d.ts +28 -0
- package/types/mesgflow-ui-kit-avatar.d.ts +23 -0
- package/types/mesgflow-ui-kit-badge.d.ts +39 -0
- package/types/mesgflow-ui-kit-banner.d.ts +42 -0
- package/types/mesgflow-ui-kit-box-input.d.ts +45 -0
- package/types/mesgflow-ui-kit-brand.d.ts +48 -0
- package/types/mesgflow-ui-kit-breadcrumb.d.ts +26 -0
- package/types/mesgflow-ui-kit-button-group.d.ts +17 -0
- package/types/mesgflow-ui-kit-button.d.ts +75 -0
- package/types/mesgflow-ui-kit-card.d.ts +71 -0
- package/types/mesgflow-ui-kit-chart.d.ts +242 -0
- package/types/mesgflow-ui-kit-checkbox.d.ts +17 -0
- package/types/mesgflow-ui-kit-chip.d.ts +46 -0
- package/types/mesgflow-ui-kit-code-block.d.ts +56 -0
- package/types/mesgflow-ui-kit-collapsible.d.ts +39 -0
- package/types/mesgflow-ui-kit-color-picker.d.ts +78 -0
- package/types/mesgflow-ui-kit-combobox.d.ts +74 -0
- package/types/mesgflow-ui-kit-command.d.ts +185 -0
- package/types/mesgflow-ui-kit-context-menu.d.ts +40 -0
- package/types/mesgflow-ui-kit-copy-button.d.ts +47 -0
- package/types/mesgflow-ui-kit-core.d.ts +508 -0
- package/types/mesgflow-ui-kit-date-picker.d.ts +215 -0
- package/types/mesgflow-ui-kit-description-list.d.ts +23 -0
- package/types/mesgflow-ui-kit-dialog.d.ts +342 -0
- package/types/mesgflow-ui-kit-divider.d.ts +23 -0
- package/types/mesgflow-ui-kit-dropzone.d.ts +47 -0
- package/types/mesgflow-ui-kit-empty-state.d.ts +18 -0
- package/types/mesgflow-ui-kit-field.d.ts +26 -0
- package/types/mesgflow-ui-kit-hover-card.d.ts +52 -0
- package/types/mesgflow-ui-kit-i18n-tr.d.ts +14 -0
- package/types/mesgflow-ui-kit-icon.d.ts +76 -0
- package/types/mesgflow-ui-kit-input.d.ts +186 -0
- package/types/mesgflow-ui-kit-kbd.d.ts +9 -0
- package/types/mesgflow-ui-kit-link.d.ts +20 -0
- package/types/mesgflow-ui-kit-menu.d.ts +53 -0
- package/types/mesgflow-ui-kit-number-input.d.ts +55 -0
- package/types/mesgflow-ui-kit-otp-input.d.ts +44 -0
- package/types/mesgflow-ui-kit-page-header.d.ts +31 -0
- package/types/mesgflow-ui-kit-pagination.d.ts +50 -0
- package/types/mesgflow-ui-kit-password-input.d.ts +33 -0
- package/types/mesgflow-ui-kit-popover.d.ts +62 -0
- package/types/mesgflow-ui-kit-progress.d.ts +32 -0
- package/types/mesgflow-ui-kit-radio.d.ts +59 -0
- package/types/mesgflow-ui-kit-rating.d.ts +56 -0
- package/types/mesgflow-ui-kit-scroll-area.d.ts +27 -0
- package/types/mesgflow-ui-kit-search-input.d.ts +72 -0
- package/types/mesgflow-ui-kit-segmented-control.d.ts +54 -0
- package/types/mesgflow-ui-kit-select.d.ts +89 -0
- package/types/mesgflow-ui-kit-sidebar.d.ts +224 -0
- package/types/mesgflow-ui-kit-skeleton.d.ts +29 -0
- package/types/mesgflow-ui-kit-slider.d.ts +40 -0
- package/types/mesgflow-ui-kit-spinner.d.ts +31 -0
- package/types/mesgflow-ui-kit-splitter.d.ts +40 -0
- package/types/mesgflow-ui-kit-stat-tile.d.ts +54 -0
- package/types/mesgflow-ui-kit-stepper.d.ts +48 -0
- package/types/mesgflow-ui-kit-switch.d.ts +34 -0
- package/types/mesgflow-ui-kit-table.d.ts +805 -0
- package/types/mesgflow-ui-kit-tabs.d.ts +269 -0
- package/types/mesgflow-ui-kit-tag-input.d.ts +33 -0
- package/types/mesgflow-ui-kit-theme-switcher.d.ts +27 -0
- package/types/mesgflow-ui-kit-theming.d.ts +745 -0
- package/types/mesgflow-ui-kit-time-picker.d.ts +54 -0
- package/types/mesgflow-ui-kit-timeline.d.ts +27 -0
- package/types/mesgflow-ui-kit-toast.d.ts +94 -0
- package/types/mesgflow-ui-kit-toggle.d.ts +110 -0
- package/types/mesgflow-ui-kit-toolbar.d.ts +52 -0
- package/types/mesgflow-ui-kit-tooltip.d.ts +55 -0
- package/types/mesgflow-ui-kit-tour.d.ts +66 -0
- package/types/mesgflow-ui-kit-tree-select.d.ts +65 -0
- package/types/mesgflow-ui-kit-tree.d.ts +44 -0
- package/types/mesgflow-ui-kit.d.ts +5444 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit.mjs","sources":["../../../projects/ui-kit/core/cn.ts","../../../projects/ui-kit/core/direction.ts","../../../projects/ui-kit/core/recipes.ts","../../../projects/ui-kit/core/a11y/ids.ts","../../../projects/ui-kit/core/forms/value-accessor.ts","../../../projects/ui-kit/core/overlay/placements.ts","../../../projects/ui-kit/core/i18n/labels.ts","../../../projects/ui-kit/core/i18n/labels.en.ts","../../../projects/ui-kit/core/i18n/tokens.ts","../../../projects/ui-kit/core/i18n/provide.ts","../../../projects/ui-kit/accordion/accordion.ts","../../../projects/ui-kit/accordion/accordion.variants.ts","../../../projects/ui-kit/accordion/accordion-item.ts","../../../projects/ui-kit/accordion/accordion-item.html","../../../projects/ui-kit/alert/alert.variants.ts","../../../projects/ui-kit/alert/alert.ts","../../../projects/ui-kit/avatar/avatar.ts","../../../projects/ui-kit/avatar-group/avatar-group.ts","../../../projects/ui-kit/badge/badge.variants.ts","../../../projects/ui-kit/badge/badge.ts","../../../projects/ui-kit/banner/banner.ts","../../../projects/ui-kit/banner/banner.html","../../../projects/ui-kit/box-input/box-input.ts","../../../projects/ui-kit/box-input/box-input.html","../../../projects/ui-kit/brand/brand.ts","../../../projects/ui-kit/breadcrumb/breadcrumb.ts","../../../projects/ui-kit/button/button.variants.ts","../../../projects/ui-kit/button/button.ts","../../../projects/ui-kit/button-group/button-group.ts","../../../projects/ui-kit/card/card.variants.ts","../../../projects/ui-kit/card/card.ts","../../../projects/ui-kit/card/card-body.ts","../../../projects/ui-kit/card/card-footer.ts","../../../projects/ui-kit/card/card-header.ts","../../../projects/ui-kit/chart/chart-colors.ts","../../../projects/ui-kit/chart/chart-scale.ts","../../../projects/ui-kit/chart/bar-chart.ts","../../../projects/ui-kit/chart/bar-chart.html","../../../projects/ui-kit/chart/bar-list.ts","../../../projects/ui-kit/chart/line-chart.ts","../../../projects/ui-kit/chart/line-chart.html","../../../projects/ui-kit/chart/sparkline.ts","../../../projects/ui-kit/chart/sparkline.html","../../../projects/ui-kit/checkbox/checkbox.ts","../../../projects/ui-kit/chip/chip.variants.ts","../../../projects/ui-kit/chip/chip.ts","../../../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/collapsible/collapsible.ts","../../../projects/ui-kit/color-picker/color.ts","../../../projects/ui-kit/color-picker/color-picker.ts","../../../projects/ui-kit/color-picker/color-picker.html","../../../projects/ui-kit/combobox/combobox.variants.ts","../../../projects/ui-kit/combobox/combobox.ts","../../../projects/ui-kit/combobox/combobox.html","../../../projects/ui-kit/command/command-search.ts","../../../projects/ui-kit/command/command.ts","../../../projects/ui-kit/command/command.html","../../../projects/ui-kit/command/command-palette.ts","../../../projects/ui-kit/command/command-palette.service.ts","../../../projects/ui-kit/command/command-palette-trigger.ts","../../../projects/ui-kit/context-menu/context-menu.ts","../../../projects/ui-kit/copy-button/copy.ts","../../../projects/ui-kit/copy-button/copy-button.ts","../../../projects/ui-kit/date-picker/date-picker.model.ts","../../../projects/ui-kit/date-picker/calendar.ts","../../../projects/ui-kit/date-picker/calendar.html","../../../projects/ui-kit/date-picker/date-picker.ts","../../../projects/ui-kit/date-picker/date-picker.html","../../../projects/ui-kit/date-picker/date-range-picker.ts","../../../projects/ui-kit/date-picker/date-range-picker.html","../../../projects/ui-kit/description-list/description-list.ts","../../../projects/ui-kit/dialog/dialog.surface.ts","../../../projects/ui-kit/dialog/dialog-resize-handle.ts","../../../projects/ui-kit/dialog/dialog.variants.ts","../../../projects/ui-kit/dialog/dialog.ts","../../../projects/ui-kit/dialog/dialog.html","../../../projects/ui-kit/dialog/confirm-dialog.ts","../../../projects/ui-kit/dialog/confirm-dialog.html","../../../projects/ui-kit/dialog/dialog.service.ts","../../../projects/ui-kit/dialog/index.ts","../../../projects/ui-kit/divider/divider.ts","../../../projects/ui-kit/dropzone/dropzone.variants.ts","../../../projects/ui-kit/dropzone/dropzone.ts","../../../projects/ui-kit/dropzone/dropzone.html","../../../projects/ui-kit/empty-state/empty-state.ts","../../../projects/ui-kit/field/field.ts","../../../projects/ui-kit/field/field.html","../../../projects/ui-kit/hover-card/hover-card.ts","../../../projects/ui-kit/icon/icon-registry.ts","../../../projects/ui-kit/icon/icon.ts","../../../projects/ui-kit/input/character-count.ts","../../../projects/ui-kit/input/input.variants.ts","../../../projects/ui-kit/input/input.ts","../../../projects/ui-kit/input/input-group.ts","../../../projects/ui-kit/input/input-prefix.ts","../../../projects/ui-kit/input/input-suffix.ts","../../../projects/ui-kit/kbd/kbd.ts","../../../projects/ui-kit/link/link.ts","../../../projects/ui-kit/menu/menu.ts","../../../projects/ui-kit/menu/menu.variants.ts","../../../projects/ui-kit/menu/menu-item.ts","../../../projects/ui-kit/menu/menu-trigger.ts","../../../projects/ui-kit/number-input/number-input.ts","../../../projects/ui-kit/number-input/number-input.html","../../../projects/ui-kit/otp-input/otp-input.ts","../../../projects/ui-kit/page-header/page-header.ts","../../../projects/ui-kit/page-header/page-header-actions.ts","../../../projects/ui-kit/pagination/pagination-range.ts","../../../projects/ui-kit/pagination/pagination.ts","../../../projects/ui-kit/pagination/pagination.html","../../../projects/ui-kit/password-input/password-input.ts","../../../projects/ui-kit/popover/popover.variants.ts","../../../projects/ui-kit/popover/popover.ts","../../../projects/ui-kit/progress/progress.variants.ts","../../../projects/ui-kit/progress/progress.ts","../../../projects/ui-kit/radio/radio-group.ts","../../../projects/ui-kit/radio/radio.ts","../../../projects/ui-kit/rating/rating.ts","../../../projects/ui-kit/rating/rating.html","../../../projects/ui-kit/scroll-area/scroll-area.ts","../../../projects/ui-kit/search-input/search-input.ts","../../../projects/ui-kit/search-input/search-input.html","../../../projects/ui-kit/segmented-control/segmented-control.variants.ts","../../../projects/ui-kit/segmented-control/segmented-control.ts","../../../projects/ui-kit/segmented-control/segmented-control.html","../../../projects/ui-kit/select/select.variants.ts","../../../projects/ui-kit/select/select.ts","../../../projects/ui-kit/select/select.html","../../../projects/ui-kit/sidebar/sidebar.variants.ts","../../../projects/ui-kit/sidebar/sidebar-nav-item.ts","../../../projects/ui-kit/sidebar/sidebar-nav-item.html","../../../projects/ui-kit/sidebar/sidebar-tenant-switcher.ts","../../../projects/ui-kit/sidebar/sidebar-tenant-switcher.html","../../../projects/ui-kit/sidebar/sidebar-user-menu.ts","../../../projects/ui-kit/sidebar/sidebar-user-menu.html","../../../projects/ui-kit/sidebar/sidebar.ts","../../../projects/ui-kit/sidebar/sidebar.html","../../../projects/ui-kit/skeleton/skeleton.ts","../../../projects/ui-kit/slider/slider.variants.ts","../../../projects/ui-kit/slider/slider.ts","../../../projects/ui-kit/spinner/spinner.ts","../../../projects/ui-kit/splitter/splitter.ts","../../../projects/ui-kit/splitter/splitter.html","../../../projects/ui-kit/stat-tile/stat-tile.variants.ts","../../../projects/ui-kit/stat-tile/stat-tile.ts","../../../projects/ui-kit/stat-tile/stat-tile.html","../../../projects/ui-kit/stepper/stepper.ts","../../../projects/ui-kit/stepper/step.ts","../../../projects/ui-kit/switch/switch.ts","../../../projects/ui-kit/switch/switch.html","../../../projects/ui-kit/table/query-contract.model.ts","../../../projects/ui-kit/table/table-client-query.ts","../../../projects/ui-kit/table/table-column-resize.ts","../../../projects/ui-kit/table/table-columns-menu.ts","../../../projects/ui-kit/table/table-columns-menu.html","../../../projects/ui-kit/table/table-filter-labels.ts","../../../projects/ui-kit/table/table-filter.model.ts","../../../projects/ui-kit/table/table-filter-menu.ts","../../../projects/ui-kit/table/table-filter-menu.html","../../../projects/ui-kit/table/table-filter-bar.ts","../../../projects/ui-kit/table/table-filter-bar.html","../../../projects/ui-kit/table/table-page-jump.ts","../../../projects/ui-kit/table/table-page-jump.html","../../../projects/ui-kit/table/table-pagination.ts","../../../projects/ui-kit/table/table-pagination.html","../../../projects/ui-kit/table/table-virtual.ts","../../../projects/ui-kit/table/table.ts","../../../projects/ui-kit/table/table.html","../../../projects/ui-kit/tabs/tab-scroller.ts","../../../projects/ui-kit/tabs/tabs.variants.ts","../../../projects/ui-kit/tabs/tab-list.ts","../../../projects/ui-kit/tabs/tab-list.html","../../../projects/ui-kit/tabs/tab.ts","../../../projects/ui-kit/tabs/tab-panel.ts","../../../projects/ui-kit/tabs/tab-strip.ts","../../../projects/ui-kit/tabs/tab-strip.html","../../../projects/ui-kit/tabs/tabs.ts","../../../projects/ui-kit/tag-input/tag-input.ts","../../../projects/ui-kit/time-picker/time-picker.model.ts","../../../projects/ui-kit/time-picker/time-picker.ts","../../../projects/ui-kit/time-picker/time-picker.html","../../../projects/ui-kit/theme-switcher/theme-switcher.ts","../../../projects/ui-kit/theme-switcher/theme-switcher.html","../../../projects/ui-kit/timeline/timeline.ts","../../../projects/ui-kit/toggle/toggle.variants.ts","../../../projects/ui-kit/toggle/toggle.ts","../../../projects/ui-kit/toggle/toggle-group.ts","../../../projects/ui-kit/toast/toast.service.ts","../../../projects/ui-kit/toast/toast-host.ts","../../../projects/ui-kit/toast/toast-host.html","../../../projects/ui-kit/toolbar/toolbar.ts","../../../projects/ui-kit/toolbar/toolbar.variants.ts","../../../projects/ui-kit/toolbar/toolbar-button.ts","../../../projects/ui-kit/toolbar/toolbar-separator.ts","../../../projects/ui-kit/tooltip/tooltip.ts","../../../projects/ui-kit/tour/tour.model.ts","../../../projects/ui-kit/tour/tour-card.ts","../../../projects/ui-kit/tour/tour-card.html","../../../projects/ui-kit/tour/tour-spotlight.ts","../../../projects/ui-kit/tour/tour.service.ts","../../../projects/ui-kit/tree/tree.variants.ts","../../../projects/ui-kit/tree/tree.ts","../../../projects/ui-kit/tree/tree.html","../../../projects/ui-kit/tree-select/tree-filter.ts","../../../projects/ui-kit/tree-select/tree-select.ts","../../../projects/ui-kit/tree-select/tree-select.html","../../../projects/ui-kit/index.ts","../../../projects/ui-kit/mesgflow-ui-kit.ts"],"sourcesContent":["import { type ClassValue, clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\n/** clsx ile koşullu class'ları birleştirir, tailwind-merge ile çakışan utility'leri (ör. iki farklı `bg-*`) sonuncusu kazanacak şekilde çözer. */\r\nexport function cn(...inputs: ClassValue[]): string {\r\n return twMerge(clsx(inputs));\r\n}\r\n","/**\r\n * Yazı yönü yardımcıları — `dir=\"rtl\"` (öğede ya da bir atada) ya da CSS `direction` kalıtımı.\r\n * Hesaplanan stil okunur: yön bir atadan gelse de doğru sonuç verir. SSR'de (stil yok) LTR.\r\n */\r\nexport function isRtl(el: Element): boolean {\r\n return typeof getComputedStyle !== 'undefined' && getComputedStyle(el).direction === 'rtl';\r\n}\r\n\r\n/** İşaretçinin satır başından (LTR'de sol, RTL'de sağ kenar) oranı, 0–1 aralığına kırpılmış. */\r\nexport function inlineStartRatio(clientX: number, rect: DOMRect, rtl: boolean): number {\r\n if (rect.width === 0) return 0;\r\n const fromLeft = (clientX - rect.left) / rect.width;\r\n return Math.min(1, Math.max(0, rtl ? 1 - fromLeft : fromLeft));\r\n}\r\n\r\n/**\r\n * Yatay kaydırmanın başlangıçtan uzaklığı. Modern tarayıcılarda RTL'de `scrollLeft` 0'dan\r\n * NEGATİFE gider (başlangıç = 0, son = −max); mutlak değer iki yönde de \"başlangıçtan uzaklık\".\r\n */\r\nexport function scrollFromInlineStart(el: Element): number {\r\n return Math.abs(el.scrollLeft);\r\n}\r\n","import type { MfSize } from './types';\r\n\r\n/**\r\n * Paylaşılan class reçeteleri — kontrol/overlay/kapsayıcı bileşenlerinin\r\n * TEKRAR TEKRAR yazdığı focus/disabled/boyut/yüzey kalıplarının TEK kaynağı\r\n * (bkz. plan Faz 1a/1b). Öncesinde 5 farklı disabled reçetesi, 4 farklı\r\n * focus-offset kombinasyonu ve 9 elle yazılmış `h-8`/`h-9`/`h-10` sabiti\r\n * vardı — her biri kendi kopyasını sürüklüyordu (gerçek bulgu). Bileşenler\r\n * bunları `cn()` ile kendi özel class'larıyla birleştirir (`cn()` twMerge\r\n * kullandığı için çakışan Tailwind utility'leri güvenle çözülür).\r\n */\r\n\r\n/** `outline`+`outline-offset` tabanlı TEK focus mekanizması — bkz. `button.variants.ts`'in \"Focus — tek mekanizma\" notu. Box-shadow/ring KULLANMA. */\r\nexport const focusRecipe =\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring';\r\n\r\n/** Native `disabled` VE `aria-disabled` (ör. `@angular/aria` desenlerinin kullandığı) ikisini de kapsar — bkz. plan \"Disabled 5 farklı reçete\" bulgusu. */\r\nexport const disabledRecipe =\r\n 'disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none aria-disabled:pointer-events-none aria-disabled:opacity-50';\r\n\r\n/** Input/Select/Combobox/NumberInput/... — tüm form kontrollerinin ortak kabuğu. `shadow-control` (bkz. elevation.css) — `shadow-1` DEĞİL, kontroller kapsayıcılarla AYNI yükselti basamağını paylaşmaz. */\r\nexport const controlSurface =\r\n 'rounded-md border border-border bg-surface text-fg shadow-control transition-colors duration-fast ease-emphasis hover:border-border-strong focus-within:border-accent';\r\n\r\n/** `size: MfSize` eksenindeki TÜM kontrollerin ortak yükseklik/dolgu/font eşlemesi — bkz. `radius.css`'teki `--control-h-*` token'ları. */\r\nexport const controlSize: Record<MfSize, string> = {\r\n sm: 'h-control-sm px-2.5 text-sm',\r\n md: 'h-control-md px-3 text-sm',\r\n lg: 'h-control-lg px-3.5 text-base',\r\n};\r\n\r\n/**\r\n * Popover/Menu/Select/Combobox/... overlay panellerinin ortak kabuğu — BORDER-\r\n * FIRST (2026-09 Deep Emerald geçişi, kullanıcı kararıyla eski \"light modda\r\n * kenarlıksız, sadece gölge\" ilkesinin YERİNE geçti): iki modda da\r\n * `border-hairline` (color.css — %8-12 opak marka-tonlu 1px çizgi) + `shadow-2`.\r\n * Ağır/bulanık gölge yerine ince çizgi \"premium\" hissi artık BÖYLE veriliyor.\r\n */\r\nexport const overlaySurface = 'rounded-lg border border-hairline bg-overlay shadow-2';\r\n\r\n/** Card/Table/StatTile gibi statik kapsayıcıların ortak kabuğu — BORDER-FIRST: iki modda da gölgesiz, sadece `border-hairline` (bkz. `overlaySurface`'in aynı gerekçesi). */\r\nexport const containerSurface = 'rounded-lg border border-hairline bg-surface';\r\n\r\n/**\r\n * Mikro glassmorphism — Dialog/Sheet/Drawer paneli ve Toast öğeleri (bkz.\r\n * `dialog.variants.ts`, `toast-host.ts`) bunu kullanır. `supports-[…]` ile\r\n * `backdrop-filter` desteklenmediğinde düz `bg-surface`'e düşer (eski\r\n * tarayıcı/headless test ortamı); `reduced-transparency:` (color.css'te\r\n * tanımlı custom variant, `prefers-reduced-transparency: reduce` medya\r\n * sorgusu) kullanıcı saydamlığı azalt istediğinde camı KAPATIR — WCAG 1.4.11\r\n * \"Non-text Contrast\" ve hareket/saydamlık duyarlılığı için. Tüketici kendi\r\n * `border`/`rounded-*` genişliğini üstüne ekler.\r\n */\r\nexport const glassSurface =\r\n 'border-hairline bg-surface supports-[backdrop-filter]:bg-glass supports-[backdrop-filter]:backdrop-blur-md reduced-transparency:bg-surface reduced-transparency:backdrop-blur-none';\r\n\r\n/** `hasError`/`aria-invalid` durumundaki form kontrolleri için — `controlSurface` İLE BİRLİKTE, üstüne eklenir. */\r\nexport const errorRecipe = 'border-danger focus-within:border-danger focus-visible:outline-danger';\r\n\r\n/**\r\n * Renk/gölge geçişlerinin TEK hareket dili — `ease-emphasis` kitin kendi eğrisi\r\n * (bkz. `motion.css`), tarayıcı varsayılanı `ease` DEĞİL. Öncesinde ~35 yerde\r\n * `transition-colors duration-fast` easing'siz kullanılıyordu (gerçek bulgu,\r\n * bkz. plan Faz 1c).\r\n */\r\nexport const transitionRecipe = 'transition-colors duration-fast ease-emphasis';\r\n\r\n/** Basılı-hissi — `active:scale` ekseninde TEK reçete, disabled'da sıfırlanır. */\r\nexport const pressRecipe = 'active:scale-[0.99] disabled:active:scale-100';\r\n","let seq = 0;\r\n\r\n/**\r\n * Bileşen örneği başına kararlı, benzersiz bir DOM id'si üretir —\r\n * `aria-controls`/`aria-describedby`/`aria-activedescendant` gibi bağların\r\n * her component klasöründe kendi elle sayaçlarını (bkz. `combobox.ts`'teki\r\n * `comboboxIdSeq` — bu modül kullanıma girince oraya taşınacak) tekrar\r\n * yazmasına gerek kalmasın diye. SSR'da hydration uyuşmazlığı YARATMAZ —\r\n * her platformda modül yüklendiğinde sıfırdan başlar, sayaç deterministik.\r\n */\r\nexport function nextId(prefix: string): string {\r\n return `${prefix}-${++seq}`;\r\n}\r\n","/**\r\n * `registerOnChange`/`registerOnTouched`'ın HER `ControlValueAccessor`\r\n * implementasyonunda BİREBİR aynı kalan gövdesini tek kaynağa indirger\r\n * (bkz. Select/NumberInput/Combobox/ColorPicker'ın öncesi — 4+ kopya, plan\r\n * Faz 2 \"CVA tamamlama\" notu). Alt sınıf SADECE `writeValue`'yu (kendi\r\n * `model`/`signal`'ına yazan) tanımlar VE kendi `NG_VALUE_ACCESSOR`\r\n * provider'ını `@Component`'ında bildirir — `forwardRef(() => AltSınıf)`\r\n * somut sınıfa ihtiyaç duyduğu için provider MİRAS ALINAMAZ.\r\n *\r\n * Düz bir soyut sınıf (Angular `@Directive()` DEĞİL) — `inject()` ya da\r\n * yaşam döngüsü kancası kullanmıyor, sadece alan/metot mirası; `@Directive()`\r\n * sarmalamak gereksiz karmaşıklık olurdu.\r\n */\r\nexport abstract class ValueAccessorBase<T> {\r\n protected onChange: (value: T) => void = () => {};\r\n protected onTouched: () => void = () => {};\r\n\r\n registerOnChange(fn: (value: T) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n}\r\n","import type { ConnectedPosition } from '@angular/cdk/overlay';\r\nimport type { MfPlacement } from '../types';\r\n\r\n/**\r\n * `Popover`'ın (`PLACEMENTS`) ve `Tooltip`'in (`POSITIONS`) kendi dosyalarında\r\n * ayrı ayrı tuttuğu CDK `ConnectedPosition[]` çiftlerinin ORTAK geometri\r\n * üretici hâli — 8 yerleşimin (4 köşe + 4 kenar) hepsini tek bir fonksiyonla\r\n * üretir, `offset` çağıranın KENDİ mevcut değerini (Popover 4px, Tooltip 8px,\r\n * diğer overlay'ler 4-8px arası değişen) korumasını sağlar.\r\n *\r\n * Bu modül BİLEREK henüz hiçbir bileşene BAĞLANMADI (Faz 0c) — `Popover`,\r\n * `Tooltip` ve 10 kopya `ConnectedPosition[]` içeren diğer bileşenlerin buna\r\n * geçişi Faz 1c'nin (\"Overlay birleştirme\") kapsamı: her biri kendi klavye/\r\n * vurgu mantığını koruyarak taşınmalı ve tarayıcıda tek tek doğrulanmalı —\r\n * bu fazın (yapısal taşıma) riskiyle karıştırılmamalı.\r\n */\r\nexport function overlayPositions(placement: MfPlacement, offset = 4): ConnectedPosition[] {\r\n switch (placement) {\r\n case 'bottom-start':\r\n return [\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: offset,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n offsetY: -offset,\r\n },\r\n ];\r\n case 'bottom-end':\r\n return [\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\r\n ];\r\n case 'top-start':\r\n return [\r\n {\r\n originX: 'start',\r\n originY: 'top',\r\n overlayX: 'start',\r\n overlayY: 'bottom',\r\n offsetY: -offset,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'bottom',\r\n overlayX: 'start',\r\n overlayY: 'top',\r\n offsetY: offset,\r\n },\r\n ];\r\n case 'top-end':\r\n return [\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },\r\n ];\r\n case 'top':\r\n return [\r\n {\r\n originX: 'center',\r\n originY: 'top',\r\n overlayX: 'center',\r\n overlayY: 'bottom',\r\n offsetY: -offset,\r\n },\r\n {\r\n originX: 'center',\r\n originY: 'bottom',\r\n overlayX: 'center',\r\n overlayY: 'top',\r\n offsetY: offset,\r\n },\r\n ];\r\n case 'bottom':\r\n return [\r\n {\r\n originX: 'center',\r\n originY: 'bottom',\r\n overlayX: 'center',\r\n overlayY: 'top',\r\n offsetY: offset,\r\n },\r\n {\r\n originX: 'center',\r\n originY: 'top',\r\n overlayX: 'center',\r\n overlayY: 'bottom',\r\n offsetY: -offset,\r\n },\r\n ];\r\n case 'left':\r\n return [\r\n {\r\n originX: 'start',\r\n originY: 'center',\r\n overlayX: 'end',\r\n overlayY: 'center',\r\n offsetX: -offset,\r\n },\r\n {\r\n originX: 'end',\r\n originY: 'center',\r\n overlayX: 'start',\r\n overlayY: 'center',\r\n offsetX: offset,\r\n },\r\n ];\r\n case 'right':\r\n return [\r\n {\r\n originX: 'end',\r\n originY: 'center',\r\n overlayX: 'start',\r\n overlayY: 'center',\r\n offsetX: offset,\r\n },\r\n {\r\n originX: 'start',\r\n originY: 'center',\r\n overlayX: 'end',\r\n overlayY: 'center',\r\n offsetX: -offset,\r\n },\r\n ];\r\n }\r\n}\r\n","/**\r\n * Kitin TÜM metinlerinin TEK şekli — `MF_LABELS` injection token'ının taşıdığı\r\n * tip (bkz. `tokens.ts`). Her alt-nesne bir bileşen ailesinin metinlerini\r\n * gruplar (Dialog'un önceki `MfDialogLabels`'ı ve DatePicker/Table'ın \"grup\r\n * input\" çantalarıyla AYNI emsal — tek fark artık HEPSİ tek bir kökten\r\n * `provideMesgflowUi()` ile sağlanıyor, bkz. `provide.ts`).\r\n */\r\nexport interface MfCommonLabels {\r\n loading: string;\r\n clear: string;\r\n remove: string;\r\n}\r\n\r\nexport interface MfDialogLabels {\r\n close: string;\r\n resize: string;\r\n fullscreenEnter: string;\r\n fullscreenExit: string;\r\n confirmOk: string;\r\n confirmCancel: string;\r\n confirmConfirm: string;\r\n confirmDelete: string;\r\n errorGeneric: string;\r\n discard: {\r\n title: string;\r\n content: string;\r\n confirm: string;\r\n cancel: string;\r\n };\r\n}\r\n\r\nexport interface MfDatePickerLabels {\r\n today: string;\r\n clear: string;\r\n apply: string;\r\n previousMonth: string;\r\n nextMonth: string;\r\n previousYear: string;\r\n nextYear: string;\r\n chooseMonth: string;\r\n chooseYear: string;\r\n startDate: string;\r\n endDate: string;\r\n placeholder: string;\r\n presetToday: string;\r\n presetLast7: string;\r\n presetLast30: string;\r\n presetThisMonth: string;\r\n}\r\n\r\nexport interface MfTimePickerLabels {\r\n placeholder: string;\r\n clear: string;\r\n}\r\n\r\nexport interface MfTableFilterOperatorLabels {\r\n equal: string;\r\n notEqual: string;\r\n greaterThan: string;\r\n greaterOrEqual: string;\r\n lessThan: string;\r\n lessOrEqual: string;\r\n contains: string;\r\n startsWith: string;\r\n endsWith: string;\r\n in: string;\r\n isNull: string;\r\n isNotNull: string;\r\n between: string;\r\n}\r\n\r\nexport interface MfTableFilterLabels {\r\n addFilter: string;\r\n searchField: string;\r\n noField: string;\r\n operator: string;\r\n value: string;\r\n apply: string;\r\n enterHint: string;\r\n clearAll: string;\r\n and: string;\r\n or: string;\r\n remove: string;\r\n back: string;\r\n dateToday: string;\r\n dateLast7: string;\r\n dateLast30: string;\r\n dateThisMonth: string;\r\n dateCustom: string;\r\n dateFrom: string;\r\n dateTo: string;\r\n operators: MfTableFilterOperatorLabels;\r\n}\r\n\r\nexport interface MfTablePaginationLabels {\r\n records: string;\r\n perPage: string;\r\n page: string;\r\n previous: string;\r\n next: string;\r\n first: string;\r\n last: string;\r\n pageSizeAriaLabel: string;\r\n navAriaLabel: string;\r\n jumpToPage: string;\r\n go: string;\r\n}\r\n\r\nexport interface MfTableLabels {\r\n searchPlaceholder: string;\r\n selectedCount: string;\r\n edit: string;\r\n delete: string;\r\n clearSelection: string;\r\n emptyTitle: string;\r\n emptyDescription: string;\r\n noResultsTitle: string;\r\n noResultsDescription: string;\r\n clearFilters: string;\r\n filterCount: string;\r\n selectAllAriaLabel: string;\r\n selectRowAriaLabel: string;\r\n actionsColumnLabel: string;\r\n columns: string;\r\n density: string;\r\n densityComfortable: string;\r\n densityCompact: string;\r\n resizeColumn: string;\r\n expandRow: string;\r\n collapseRow: string;\r\n filter: MfTableFilterLabels;\r\n pagination: MfTablePaginationLabels;\r\n}\r\n\r\nexport interface MfSidebarLabels {\r\n collapse: string;\r\n expand: string;\r\n switchTenant: string;\r\n noTenants: string;\r\n noUser: string;\r\n nav: string;\r\n}\r\n\r\nexport interface MfTabsLabels {\r\n scrollStart: string;\r\n scrollEnd: string;\r\n close: string;\r\n}\r\n\r\nexport interface MfDropzoneLabels {\r\n label: string;\r\n}\r\n\r\nexport interface MfColorPickerLabels {\r\n ariaLabel: string;\r\n hexAriaLabel: string;\r\n pickFromScreenAriaLabel: string;\r\n}\r\n\r\nexport interface MfBoxInputLabels {\r\n top: string;\r\n right: string;\r\n bottom: string;\r\n left: string;\r\n linkSides: string;\r\n unlinkSides: string;\r\n}\r\n\r\nexport interface MfComboboxLabels {\r\n placeholder: string;\r\n noResults: string;\r\n}\r\n\r\nexport interface MfSelectLabels {\r\n placeholder: string;\r\n}\r\n\r\nexport interface MfSearchInputLabels {\r\n placeholder: string;\r\n ariaLabel: string;\r\n clearAriaLabel: string;\r\n}\r\n\r\nexport interface MfToastLabels {\r\n dismiss: string;\r\n}\r\n\r\nexport interface MfOtpInputLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfStepperLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfProgressLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfPasswordInputLabels {\r\n show: string;\r\n hide: string;\r\n}\r\n\r\nexport interface MfChipLabels {\r\n remove: string;\r\n}\r\n\r\nexport interface MfAlertLabels {\r\n dismiss: string;\r\n}\r\n\r\nexport interface MfBreadcrumbLabels {\r\n ariaLabel: string;\r\n}\r\n\r\nexport interface MfAvatarGroupLabels {\r\n /** \"+N\" göstergesinin aria-label'ı — `overflowCount() + ' ' + overflowAriaLabel`. */\r\n overflowAriaLabel: string;\r\n}\r\n\r\n/** Grafik ailesi (LineChart/Sparkline) — tablo görünümü anahtarı (grafiğin erişilebilir ikizi) ve tablonun ilk sütun başlığı. */\r\n/** Ağaçtan seçim (`mf-tree-select`). */\r\nexport interface MfTreeSelectLabels {\r\n placeholder: string;\r\n searchPlaceholder: string;\r\n noResults: string;\r\n}\r\n\r\n/** Açık/koyu/sistem değiştirici (`mf-theme-switcher`). */\r\nexport interface MfThemeSwitcherLabels {\r\n ariaLabel: string;\r\n light: string;\r\n dark: string;\r\n system: string;\r\n}\r\n\r\n/** Puanlama — `outOf` iki sayının ARASINA yazılır (\"3 out of 5\"). */\r\nexport interface MfRatingLabels {\r\n ariaLabel: string;\r\n outOf: string;\r\n}\r\n\r\n/** Ürün turu — `stepOf` iki sayının ARASINA yazılır (\"2 of 5\"). */\r\nexport interface MfTourLabels {\r\n next: string;\r\n back: string;\r\n skip: string;\r\n done: string;\r\n stepOf: string;\r\n}\r\n\r\n/** Bağımsız sayfalama (`mf-pagination`) — `page` sayının ÖNÜNE yazılır (\"Page 3\"). */\r\nexport interface MfPaginationLabels {\r\n navAriaLabel: string;\r\n previous: string;\r\n next: string;\r\n first: string;\r\n last: string;\r\n page: string;\r\n}\r\n\r\n/** Kopyala düğmesi + kod bloğu (`code` = kaydırılabilir kod bölgesinin erişilebilir adı). */\r\nexport interface MfCopyLabels {\r\n copy: string;\r\n copied: string;\r\n failed: string;\r\n code: string;\r\n}\r\n\r\n/** Karakter sayacı — sayıların ARDINA yazılır (\"12 characters remaining\"). */\r\nexport interface MfCharacterCountLabels {\r\n remaining: string;\r\n overLimit: string;\r\n characters: string;\r\n}\r\n\r\n/** Komut paleti (`mf-command`) — `resultsCount` sayının ARDINA yazılır (\"8 results\"). */\r\nexport interface MfCommandLabels {\r\n placeholder: string;\r\n ariaLabel: string;\r\n empty: string;\r\n resultsCount: string;\r\n navigate: string;\r\n select: string;\r\n close: string;\r\n}\r\n\r\nexport interface MfChartLabels {\r\n showTable: string;\r\n showChart: string;\r\n category: string;\r\n}\r\n\r\nexport interface MfLabels {\r\n common: MfCommonLabels;\r\n dialog: MfDialogLabels;\r\n datePicker: MfDatePickerLabels;\r\n timePicker: MfTimePickerLabels;\r\n table: MfTableLabels;\r\n sidebar: MfSidebarLabels;\r\n tabs: MfTabsLabels;\r\n dropzone: MfDropzoneLabels;\r\n colorPicker: MfColorPickerLabels;\r\n boxInput: MfBoxInputLabels;\r\n combobox: MfComboboxLabels;\r\n select: MfSelectLabels;\r\n searchInput: MfSearchInputLabels;\r\n toast: MfToastLabels;\r\n otpInput: MfOtpInputLabels;\r\n stepper: MfStepperLabels;\r\n progress: MfProgressLabels;\r\n passwordInput: MfPasswordInputLabels;\r\n chip: MfChipLabels;\r\n alert: MfAlertLabels;\r\n breadcrumb: MfBreadcrumbLabels;\r\n avatarGroup: MfAvatarGroupLabels;\r\n chart: MfChartLabels;\r\n command: MfCommandLabels;\r\n characterCount: MfCharacterCountLabels;\r\n copy: MfCopyLabels;\r\n pagination: MfPaginationLabels;\r\n tour: MfTourLabels;\r\n rating: MfRatingLabels;\r\n themeSwitcher: MfThemeSwitcherLabels;\r\n treeSelect: MfTreeSelectLabels;\r\n}\r\n\r\n/** `provideMesgflowUi({ labels })`'ın kabul ettiği şekil — her alt-alan opsiyonel, verilmeyen her yaprak `mfLabelsEn`'den gelir. */\r\nexport type DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;\r\n\r\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value);\r\n}\r\n\r\n/** `base`'i `override`'daki tanımlı yapraklarla değiştirir — dizi yok, her düğüm ya iç içe nesne ya string, sığ `Object.assign` yerine gerçek derin birleştirme gerekiyor (bkz. `provide.ts`). Generic'i `Record<string, unknown>`'a KISITLAMIYOR BİLEREK — `MfLabels` gibi index-signature'ı olmayan named interface'ler o kısıtla uyuşmuyor (bkz. TS2345), bunun yerine iç kısımda cast ediliyor. */\r\nexport function mergeLabels<T>(base: T, override: DeepPartial<T> | undefined): T {\r\n if (!override) return base;\r\n if (!isPlainObject(base) || !isPlainObject(override)) return override as T;\r\n const baseObj = base as Record<string, unknown>;\r\n const overrideObj = override as Record<string, unknown>;\r\n const result: Record<string, unknown> = { ...baseObj };\r\n for (const key of Object.keys(overrideObj)) {\r\n const overrideValue = overrideObj[key];\r\n if (overrideValue === undefined) continue;\r\n result[key] = mergeLabels(baseObj[key], overrideValue as DeepPartial<unknown>);\r\n }\r\n return result as T;\r\n}\r\n","import type { MfLabels } from './labels';\r\n\r\n/**\r\n * `MF_LABELS`'ın varsayılan değeri — hiçbir `provideMesgflowUi()` çağrısı\r\n * olmayan bir tüketici uygulamada bileşenler bu İngilizce metinlerle çalışır\r\n * (bkz. CLAUDE.md/plan kararı: \"bileşen varsayılan metinleri İngilizce\").\r\n * Türkçe çeviri kümesi için bkz. `@mesgflow/ui-kit/i18n/tr`'nin `mfLabelsTr`'si —\r\n * bu iki dosya AYNI şekli (bkz. `labels.ts`), farklı değerleri taşır.\r\n */\r\nexport const mfLabelsEn: MfLabels = {\r\n common: {\r\n loading: 'Loading',\r\n clear: 'Clear',\r\n remove: 'Remove',\r\n },\r\n dialog: {\r\n close: 'Close',\r\n resize: 'Resize',\r\n fullscreenEnter: 'Enter fullscreen',\r\n fullscreenExit: 'Exit fullscreen',\r\n confirmOk: 'OK',\r\n confirmCancel: 'Cancel',\r\n confirmConfirm: 'Confirm',\r\n confirmDelete: 'Delete',\r\n errorGeneric: 'Something went wrong. Please try again.',\r\n discard: {\r\n title: 'Unsaved changes',\r\n content: 'Closing this panel will discard what you entered.',\r\n confirm: 'Discard and close',\r\n cancel: 'Keep editing',\r\n },\r\n },\r\n datePicker: {\r\n today: 'Today',\r\n clear: 'Clear',\r\n apply: 'Apply',\r\n previousMonth: 'Previous month',\r\n nextMonth: 'Next month',\r\n previousYear: 'Previous year',\r\n nextYear: 'Next year',\r\n chooseMonth: 'Choose month',\r\n chooseYear: 'Choose year',\r\n startDate: 'Start',\r\n endDate: 'End',\r\n placeholder: 'mm/dd/yyyy',\r\n presetToday: 'Today',\r\n presetLast7: 'Last 7 days',\r\n presetLast30: 'Last 30 days',\r\n presetThisMonth: 'This month',\r\n },\r\n timePicker: {\r\n placeholder: 'hh:mm',\r\n clear: 'Clear',\r\n },\r\n table: {\r\n searchPlaceholder: 'Search...',\r\n selectedCount: 'selected',\r\n edit: 'Edit',\r\n delete: 'Delete',\r\n clearSelection: 'Clear selection',\r\n emptyTitle: 'No records',\r\n emptyDescription: '',\r\n noResultsTitle: 'No results found',\r\n noResultsDescription: 'Try a different search or filter.',\r\n clearFilters: 'Clear filters',\r\n filterCount: 'filters',\r\n selectAllAriaLabel: 'Select all',\r\n selectRowAriaLabel: 'Select row',\r\n actionsColumnLabel: 'Actions',\r\n columns: 'Columns',\r\n density: 'Density',\r\n densityComfortable: 'Comfortable',\r\n densityCompact: 'Compact',\r\n resizeColumn: 'Resize column',\r\n expandRow: 'Expand row',\r\n collapseRow: 'Collapse row',\r\n filter: {\r\n addFilter: 'Filter',\r\n searchField: 'Search field...',\r\n noField: 'No field found',\r\n operator: 'Operator',\r\n value: 'Value',\r\n apply: 'Apply',\r\n enterHint: 'Enter',\r\n clearAll: 'Clear',\r\n and: 'AND',\r\n or: 'OR',\r\n remove: 'Remove',\r\n back: 'Back',\r\n dateToday: 'Today',\r\n dateLast7: 'Last 7 days',\r\n dateLast30: 'Last 30 days',\r\n dateThisMonth: 'This month',\r\n dateCustom: 'Custom range',\r\n dateFrom: 'Start',\r\n dateTo: 'End',\r\n operators: {\r\n equal: 'equals',\r\n notEqual: 'not equal to',\r\n greaterThan: 'greater than',\r\n greaterOrEqual: 'greater than or equal to',\r\n lessThan: 'less than',\r\n lessOrEqual: 'less than or equal to',\r\n contains: 'contains',\r\n startsWith: 'starts with',\r\n endsWith: 'ends with',\r\n in: 'is one of',\r\n isNull: 'is empty',\r\n isNotNull: 'is not empty',\r\n between: 'is between',\r\n },\r\n },\r\n pagination: {\r\n records: 'records',\r\n perPage: 'per page',\r\n page: 'Page',\r\n previous: 'Previous',\r\n next: 'Next',\r\n first: 'First page',\r\n last: 'Last page',\r\n pageSizeAriaLabel: 'Page size',\r\n navAriaLabel: 'Pagination',\r\n jumpToPage: 'Jump to page',\r\n go: 'Go',\r\n },\r\n },\r\n sidebar: {\r\n collapse: 'Collapse menu',\r\n expand: 'Expand menu',\r\n switchTenant: 'Switch tenant',\r\n noTenants: 'No tenants found',\r\n noUser: 'Not signed in',\r\n nav: 'Main navigation',\r\n },\r\n tabs: {\r\n scrollStart: 'Scroll back',\r\n scrollEnd: 'Scroll forward',\r\n close: 'Close',\r\n },\r\n dropzone: {\r\n label: 'Drag files here or click to browse',\r\n },\r\n colorPicker: {\r\n ariaLabel: 'Pick color',\r\n hexAriaLabel: 'Hex color code',\r\n pickFromScreenAriaLabel: 'Pick color from screen',\r\n },\r\n boxInput: {\r\n top: 'Top',\r\n right: 'Right',\r\n bottom: 'Bottom',\r\n left: 'Left',\r\n linkSides: 'Link sides',\r\n unlinkSides: 'Unlink sides',\r\n },\r\n combobox: {\r\n placeholder: 'Search...',\r\n noResults: 'No results',\r\n },\r\n select: {\r\n placeholder: 'Select',\r\n },\r\n searchInput: {\r\n placeholder: 'Search...',\r\n ariaLabel: 'Search',\r\n clearAriaLabel: 'Clear',\r\n },\r\n toast: {\r\n dismiss: 'Dismiss',\r\n },\r\n otpInput: {\r\n ariaLabel: 'One-time code',\r\n },\r\n stepper: {\r\n ariaLabel: 'Steps',\r\n },\r\n progress: {\r\n ariaLabel: 'Progress',\r\n },\r\n passwordInput: {\r\n show: 'Show',\r\n hide: 'Hide',\r\n },\r\n chip: {\r\n remove: 'Remove',\r\n },\r\n alert: {\r\n dismiss: 'Dismiss',\r\n },\r\n breadcrumb: {\r\n ariaLabel: 'Breadcrumb',\r\n },\r\n avatarGroup: {\r\n overflowAriaLabel: 'more',\r\n },\r\n chart: {\r\n showTable: 'Show as table',\r\n showChart: 'Show as chart',\r\n category: 'Category',\r\n },\r\n command: {\r\n placeholder: 'Type a command or search…',\r\n ariaLabel: 'Command palette',\r\n empty: 'No results found.',\r\n resultsCount: 'results',\r\n navigate: 'to navigate',\r\n select: 'to select',\r\n close: 'to close',\r\n },\r\n characterCount: {\r\n remaining: 'characters remaining',\r\n overLimit: 'characters over the limit',\r\n characters: 'characters',\r\n },\r\n copy: {\r\n copy: 'Copy',\r\n copied: 'Copied',\r\n failed: 'Copy failed',\r\n code: 'Code',\r\n },\r\n pagination: {\r\n navAriaLabel: 'Pagination',\r\n previous: 'Previous page',\r\n next: 'Next page',\r\n first: 'First page',\r\n last: 'Last page',\r\n page: 'Page',\r\n },\r\n tour: {\r\n next: 'Next',\r\n back: 'Back',\r\n skip: 'Skip tour',\r\n done: 'Done',\r\n stepOf: 'of',\r\n },\r\n rating: {\r\n ariaLabel: 'Rating',\r\n outOf: 'out of',\r\n },\r\n themeSwitcher: {\r\n ariaLabel: 'Color theme',\r\n light: 'Light',\r\n dark: 'Dark',\r\n system: 'System',\r\n },\r\n treeSelect: {\r\n placeholder: 'Select',\r\n searchPlaceholder: 'Search…',\r\n noResults: 'No results',\r\n },\r\n};\r\n","import { computed, inject, InjectionToken, type Signal, signal } from '@angular/core';\r\nimport { enUS, type Locale } from 'date-fns/locale';\r\nimport type { MfLabels } from './labels';\r\nimport { mfLabelsEn } from './labels.en';\r\n\r\n/**\r\n * Kitin TEK metin kaynağı — `provideMesgflowUi()` (bkz. `provide.ts`)\r\n * `provide` etmezse tüketici İngilizce varsayılanlarla çalışır (ng-zorro'nun\r\n * `NZ_I18N`'i / PrimeNG'nin `providePrimeNG` config'iyle aynı desen — bu kit\r\n * daha önce sadece Dialog için uyguluyordu, `MF_DIALOG_LABELS` artık bu\r\n * token'dan türeyen bir \"seçici\" — bkz. aşağıdaki `labelToken`).\r\n */\r\nexport const MF_LABELS = new InjectionToken<Signal<MfLabels>>('mesgflow.labels', {\r\n factory: () => signal(mfLabelsEn),\r\n});\r\n\r\n/** Calendar/DatePicker'ın ay/gün adları için — varsayılan `enUS`, `provideMesgflowUi({ dateLocale })` ile değiştirilir. */\r\nexport const MF_DATE_LOCALE = new InjectionToken<Signal<Locale>>('mesgflow.date-locale', {\r\n factory: () => signal(enUS),\r\n});\r\n\r\n/**\r\n * `MF_LABELS`'ın bir alt-alanına daralan, reaktif bir \"seçici\" token üretir\r\n * — her bileşen ailesi umbrella nesnenin TAMAMINI değil sadece kendi\r\n * alanını inject eder. `computed()` içindeki `labels` referansı DIŞARIDA\r\n * (factory'nin senkron gövdesinde) `inject()` edildiği için geçerli bir DI\r\n * bağlamında çözülüyor; `computed`'ın kendi callback'i içinde `inject()`\r\n * çağırmak ÇALIŞMAZ (lazy değerlendirme DI bağlamının dışında kalır).\r\n */\r\nfunction labelToken<K extends keyof MfLabels>(key: K, name: string) {\r\n return new InjectionToken<Signal<MfLabels[K]>>(`mesgflow.${name}-labels`, {\r\n factory: () => {\r\n const labels = inject(MF_LABELS);\r\n return computed(() => labels()[key]);\r\n },\r\n });\r\n}\r\n\r\nexport const MF_COMMON_LABELS = labelToken('common', 'common');\r\nexport const MF_DIALOG_LABELS = labelToken('dialog', 'dialog');\r\nexport const MF_DATE_PICKER_LABELS = labelToken('datePicker', 'date-picker');\r\nexport const MF_TIME_PICKER_LABELS = labelToken('timePicker', 'time-picker');\r\nexport const MF_TABLE_LABELS = labelToken('table', 'table');\r\nexport const MF_SIDEBAR_LABELS = labelToken('sidebar', 'sidebar');\r\nexport const MF_TABS_LABELS = labelToken('tabs', 'tabs');\r\nexport const MF_DROPZONE_LABELS = labelToken('dropzone', 'dropzone');\r\nexport const MF_COLOR_PICKER_LABELS = labelToken('colorPicker', 'color-picker');\r\nexport const MF_BOX_INPUT_LABELS = labelToken('boxInput', 'box-input');\r\nexport const MF_COMBOBOX_LABELS = labelToken('combobox', 'combobox');\r\nexport const MF_SELECT_LABELS = labelToken('select', 'select');\r\nexport const MF_SEARCH_INPUT_LABELS = labelToken('searchInput', 'search-input');\r\nexport const MF_TOAST_LABELS = labelToken('toast', 'toast');\r\nexport const MF_OTP_INPUT_LABELS = labelToken('otpInput', 'otp-input');\r\nexport const MF_STEPPER_LABELS = labelToken('stepper', 'stepper');\r\nexport const MF_PROGRESS_LABELS = labelToken('progress', 'progress');\r\nexport const MF_PASSWORD_INPUT_LABELS = labelToken('passwordInput', 'password-input');\r\nexport const MF_CHIP_LABELS = labelToken('chip', 'chip');\r\nexport const MF_ALERT_LABELS = labelToken('alert', 'alert');\r\nexport const MF_BREADCRUMB_LABELS = labelToken('breadcrumb', 'breadcrumb');\r\nexport const MF_AVATAR_GROUP_LABELS = labelToken('avatarGroup', 'avatar-group');\r\nexport const MF_CHART_LABELS = labelToken('chart', 'chart');\r\nexport const MF_COMMAND_LABELS = labelToken('command', 'command');\r\nexport const MF_CHARACTER_COUNT_LABELS = labelToken('characterCount', 'character-count');\r\nexport const MF_COPY_LABELS = labelToken('copy', 'copy');\r\nexport const MF_PAGINATION_LABELS = labelToken('pagination', 'pagination');\r\nexport const MF_TOUR_LABELS = labelToken('tour', 'tour');\r\nexport const MF_RATING_LABELS = labelToken('rating', 'rating');\r\nexport const MF_THEME_SWITCHER_LABELS = labelToken('themeSwitcher', 'theme-switcher');\r\nexport const MF_TREE_SELECT_LABELS = labelToken('treeSelect', 'tree-select');\r\n","import {\r\n computed,\r\n type EnvironmentProviders,\r\n isSignal,\r\n makeEnvironmentProviders,\r\n type Provider,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport type { Locale } from 'date-fns/locale';\r\nimport { type DeepPartial, mergeLabels, type MfLabels } from './labels';\r\nimport { mfLabelsEn } from './labels.en';\r\nimport { MF_DATE_LOCALE, MF_LABELS } from './tokens';\r\n\r\nexport interface ProvideMesgflowUiOptions {\r\n /**\r\n * `mfLabelsEn`'in üstüne yazılacak alanlar — ya sabit bir `DeepPartial<MfLabels>`\r\n * (ör. `mfLabelsTr`, bkz. `@mesgflow/ui-kit/i18n/tr`) ya da tüketicinin kendi\r\n * i18n sistemine bağlı, dil değişince CANLI güncellenen bir `Signal`. Her\r\n * iki durumda da verilmeyen her yaprak `mfLabelsEn`'den gelir — TAM bir\r\n * `MfLabels` nesnesi sağlamak ZORUNLU değil.\r\n */\r\n labels?: DeepPartial<MfLabels> | Signal<DeepPartial<MfLabels>>;\r\n /** Calendar/DatePicker ay/gün adları — varsayılan `date-fns/locale`'in `enUS`'u. */\r\n dateLocale?: Locale;\r\n}\r\n\r\n/**\r\n * `app.config.ts`'in `providers` dizisine eklenir — `MF_LABELS`/`MF_DATE_LOCALE`'ı\r\n * (ve bunlardan türeyen `MF_DIALOG_LABELS`/`MF_TABLE_LABELS`/… seçici\r\n * token'larını, bkz. `tokens.ts`) tüketicinin verdiği değerlerle sağlar.\r\n * Hiç çağrılmazsa kit İngilizce varsayılanlarla (`mfLabelsEn`, `enUS`) çalışır.\r\n *\r\n * ```ts\r\n * import { provideMesgflowUi } from '@mesgflow/ui-kit';\r\n * import { mfLabelsTr } from '@mesgflow/ui-kit/i18n/tr';\r\n * import { tr } from 'date-fns/locale';\r\n *\r\n * providers: [provideMesgflowUi({ labels: mfLabelsTr, dateLocale: tr })]\r\n * ```\r\n */\r\nexport function provideMesgflowUi(options: ProvideMesgflowUiOptions = {}): EnvironmentProviders {\r\n const providers: Provider[] = [];\r\n\r\n if (options.labels !== undefined) {\r\n const labelsOption = options.labels;\r\n providers.push({\r\n provide: MF_LABELS,\r\n useFactory: () =>\r\n isSignal(labelsOption)\r\n ? computed(() => mergeLabels(mfLabelsEn, labelsOption()))\r\n : signal(mergeLabels(mfLabelsEn, labelsOption)),\r\n });\r\n }\r\n\r\n if (options.dateLocale) {\r\n const dateLocale = options.dateLocale;\r\n providers.push({ provide: MF_DATE_LOCALE, useFactory: () => signal(dateLocale) });\r\n }\r\n\r\n return makeEnvironmentProviders(providers);\r\n}\r\n","import { AccordionGroup as AriaAccordionGroup } from '@angular/aria/accordion';\r\nimport { Component } from '@angular/core';\r\n\r\n/**\r\n * `<mf-accordion multiExpandable><mf-accordion-item summary=\"...\">...</mf-accordion-item></mf-accordion>`\r\n *\r\n * Salt bir kapsayıcı — ARIA/klavye/genişletme-modu mantığı `@angular/aria/accordion`'ın\r\n * `AccordionGroup` pattern'inden `hostDirectives` ile ödünç alınıyor (bkz.\r\n * `tabs.ts`'teki AYNI desen). `multiExpandable`/`disabled` girdileri\r\n * `hostDirectives`'in `inputs` listesiyle dışarı açıldı.\r\n */\r\n@Component({\r\n selector: 'mf-accordion',\r\n exportAs: 'mfAccordion',\r\n hostDirectives: [{ directive: AriaAccordionGroup, inputs: ['multiExpandable', 'disabled'] }],\r\n host: { class: 'block divide-y divide-border overflow-hidden rounded-lg border border-border' },\r\n template: '<ng-content />',\r\n})\r\nexport class Accordion {}\r\n","import { cva } from 'class-variance-authority';\r\n\r\nexport const accordionTriggerVariants = cva(\r\n 'flex w-full items-center justify-between gap-2 px-3 py-2.5 text-start text-sm font-medium text-fg transition-colors duration-fast ease-emphasis ' +\r\n 'hover:bg-surface-alt focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring',\r\n {\r\n variants: {\r\n disabled: {\r\n true: 'pointer-events-none opacity-50',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { disabled: false },\r\n },\r\n);\r\n","import {\r\n AccordionContent,\r\n AccordionPanel as AriaAccordionPanel,\r\n AccordionTrigger as AriaAccordionTrigger,\r\n} from '@angular/aria/accordion';\r\nimport { Component, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { accordionTriggerVariants } from './accordion.variants';\r\n\r\n/**\r\n * `<mf-accordion-item summary=\"Genel\">İçerik…</mf-accordion-item>` —\r\n * `mf-accordion` içine konur. `ngAccordionTrigger`/`ngAccordionPanel`/\r\n * `ngAccordionContent` (`@angular/aria/accordion`) doğrudan bu component'in\r\n * KENDİ template'inde kullanılıyor (`hostDirectives` DEĞİL — `Tab`'ın aksine\r\n * trigger butonu ve panel div'i İKİ AYRI DOM elemanı, tek host'a sığmıyor;\r\n * bkz. `Select`'in `cdkOverlayOrigin`/`cdkConnectedOverlay`'i kendi\r\n * template'inde birleştirme deseniyle AYNI gerekçe).\r\n *\r\n * İçerik `ngAccordionContent` sayesinde LAZY — panel ilk açılana kadar hiç\r\n * oluşturulmaz.\r\n */\r\n@Component({\r\n selector: 'mf-accordion-item',\r\n imports: [AriaAccordionTrigger, AriaAccordionPanel, AccordionContent, Icon],\r\n host: { class: 'block' },\r\n templateUrl: './accordion-item.html',\r\n})\r\nexport class AccordionItem {\r\n readonly summary = input.required<string>();\r\n readonly disabled = input(false);\r\n\r\n protected readonly triggerClasses = computed(() =>\r\n cn(accordionTriggerVariants({ disabled: this.disabled() })),\r\n );\r\n}\r\n","<h3 class=\"contents\">\r\n <button\r\n type=\"button\"\r\n ngAccordionTrigger\r\n #trigger=\"ngAccordionTrigger\"\r\n [panel]=\"panel\"\r\n [disabled]=\"disabled()\"\r\n [class]=\"triggerClasses()\"\r\n >\r\n <span class=\"truncate\">{{ summary() }}</span>\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"shrink-0 text-fg-subtle transition-transform duration-fast\"\r\n [class.rotate-180]=\"trigger.expanded()\"\r\n >expand_more</span\r\n >\r\n </button>\r\n</h3>\r\n<!--\r\n `preserveContent` — içerik ilk açılıştan SONRA DOM'da kalıcı olur (bkz.\r\n `@angular/aria`'nın `DeferredContentAware`/`DeferredContent` çifti, panel\r\n varsayılanı: her kapanışta view `destroy()` edilir). Grid-rows geçişinin\r\n (aşağıda) animasyonu bir şeyi KISALTMASI için içeriğin hâlâ orada olması\r\n gerekiyor — hiç açılmamış bir panel yine de hiç render EDİLMEZ (lazy\r\n davranış korunuyor), sadece \"en az bir kez açılmış\" panel artık kapanışta\r\n yok edilmiyor.\r\n-->\r\n<div\r\n ngAccordionPanel\r\n #panel=\"ngAccordionPanel\"\r\n [preserveContent]=\"true\"\r\n class=\"grid transition-[grid-template-rows] duration-base ease-emphasis\"\r\n [style.grid-template-rows]=\"trigger.expanded() ? '1fr' : '0fr'\"\r\n>\r\n <div class=\"min-h-0 overflow-hidden\">\r\n <ng-template ngAccordionContent>\r\n <div class=\"px-3 pb-3 text-sm text-fg-subtle\">\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Badge/Chip/Avatar/StatTile ile AYNI \"tonal işaret\" dili (bkz.\r\n * badge.variants.ts'teki gerekçe) — rol token'ı `bg-X-tint text-X-tint-fg`\r\n * (`color-mix()` ile rampanın kendi basamağının %12 alfası; light çapa 600,\r\n * dark çapa 400 — \"Deep Emerald & Slate v2\" spec'inin \"Soft Tinting\"\r\n * tekniği). Alert her türlü zeminin üstüne (kart, sayfa, panel) oturabiliyor\r\n * — `color-mix` sayesinde her zeminde AYRI ayrı doğru karışıyor, eski \"düz\r\n * basamak çifti\" (`bg-X-50 dark:bg-X-900`) döneminde zeminden bağımsız\r\n * garantili kontrast İÇİN gerekliydi, artık `check:contrast` dört yüzeyde\r\n * (surface/canvas/overlay/surface-alt) `color-mix` sonucunu doğruluyor.\r\n *\r\n * Kenarlık `border-X/30` — Button'ın `outlined` görünümüyle AYNI dil (renkli-\r\n * şeffaf çizgi, düz gri DEĞİL); primary `border-accent/30` kullanır (kendi\r\n * `X-tint` token'ı yok, `accent`/`primary-tint` çifti aynı işi görür). Geniş\r\n * bir banner için sadece dolgu yetersiz kalıyordu (kenar tanımı olmadan\r\n * sayfa zeminiyle karışıyordu, `Badge`'in küçük pilinde bu sorun yoktu).\r\n */\r\nexport const alertVariants = cva('flex items-start gap-3 rounded-lg border p-4 text-sm', {\r\n variants: {\r\n tone: {\r\n neutral: 'border-border bg-surface-alt text-fg',\r\n primary: 'border-accent/30 bg-primary-tint text-primary-tint-fg',\r\n success: 'border-success/30 bg-success-tint text-success-tint-fg',\r\n warning: 'border-warning/30 bg-warning-tint text-warning-tint-fg',\r\n danger: 'border-danger/30 bg-danger-tint text-danger-tint-fg',\r\n info: 'border-info/30 bg-info-tint text-info-tint-fg',\r\n help: 'border-help/30 bg-help-tint text-help-tint-fg',\r\n },\r\n },\r\n defaultVariants: { tone: 'neutral' },\r\n});\r\n\r\nexport type AlertTone = VariantProps<typeof alertVariants>['tone'];\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { cn, MF_ALERT_LABELS, type MfTone } from '@mesgflow/ui-kit/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { alertVariants } from './alert.variants';\r\n\r\nconst DEFAULT_ICON: Record<MfTone, string> = {\r\n neutral: 'info',\r\n primary: 'info',\r\n success: 'check_circle',\r\n warning: 'warning',\r\n danger: 'error',\r\n info: 'info',\r\n help: 'help',\r\n};\r\n\r\n/**\r\n * `<mf-alert tone=\"danger\" title=\"Kayıt başarısız\">Ağ bağlantısı koptu.</mf-alert>`\r\n *\r\n * İçerik (gövde metni) `<ng-content />` ile projekte edilir. İkon ayrı bir\r\n * content-projection SLOT'u DEĞİL — `icon` girdisi (bkz. `ConfirmDialog`'un\r\n * aynı deseni, `dialog/confirm-dialog.ts`): tone'a göre makul bir varsayılanı\r\n * var, tüketici farklı bir Material Symbol adı geçebilir ya da `icon=\"\"` ile\r\n * tamamen kapatabilir. Gerçek content-slot algılaması (`@ContentChild` +\r\n * \"sağlandı mı\" kontrolü) bu basit vakada gereksiz karmaşıklık.\r\n *\r\n * `role`: `danger`/`warning` kullanıcının DİKKATİNİ kesmesi gereken durumlar\r\n * — `role=\"alert\"` (assertive, ekran okuyucu anında keser). Diğer tonlar\r\n * `role=\"status\"` (polite, mevcut anonsu beklemeden araya girmez).\r\n */\r\n@Component({\r\n selector: 'mf-alert',\r\n exportAs: 'mfAlert',\r\n imports: [Button, Icon],\r\n host: { class: 'block' },\r\n template: `\r\n <div [class]=\"containerClasses()\" [attr.role]=\"role()\">\r\n @if (iconName()) {\r\n <span mfIcon [size]=\"20\" class=\"mt-0.5 shrink-0\">{{ iconName() }}</span>\r\n }\r\n <div class=\"min-w-0 flex-1\">\r\n @if (title()) {\r\n <p class=\"font-semibold\">{{ title() }}</p>\r\n }\r\n <div [class.mt-0.5]=\"title()\">\r\n <ng-content />\r\n </div>\r\n </div>\r\n @if (dismissible()) {\r\n <button\r\n mfButton\r\n appearance=\"text\"\r\n tone=\"neutral\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n class=\"-mt-1 -me-1 shrink-0\"\r\n [attr.aria-label]=\"effectiveDismissLabel()\"\r\n (click)=\"dismissed.emit()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n </div>\r\n `,\r\n})\r\nexport class Alert {\r\n readonly tone = input<MfTone>('neutral');\r\n readonly title = input('');\r\n /** `null` (varsayılan) → `tone`'a göre otomatik ikon. Boş string (`''`) → ikon YOK. Başka bir Material Symbol adı → onu kullan. */\r\n readonly icon = input<string | null>(null);\r\n readonly dismissible = input(false);\r\n readonly dismissLabel = input<string>();\r\n\r\n readonly dismissed = output<void>();\r\n\r\n private readonly injectedLabels = inject(MF_ALERT_LABELS);\r\n protected readonly effectiveDismissLabel = computed(\r\n () => this.dismissLabel() ?? this.injectedLabels().dismiss,\r\n );\r\n protected readonly containerClasses = computed(() => cn(alertVariants({ tone: this.tone() })));\r\n protected readonly role = computed(() => {\r\n const t = this.tone();\r\n return t === 'danger' || t === 'warning' ? 'alert' : 'status';\r\n });\r\n protected readonly iconName = computed(() => this.icon() ?? DEFAULT_ICON[this.tone()]);\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\nimport type { MfTone } from '@mesgflow/ui-kit/core';\r\n\r\nexport type AvatarTone = MfTone;\r\n\r\n/**\r\n * Sadece semantic token'lar, keyfi renk yok — `tone` (sabit) veya `colorful`\r\n * (isme göre) ile seçiliyor. Badge'teki gibi tonal işaret rol token'ı\r\n * (`bg-X-tint text-X-tint-fg`, `color-mix()` tabanlı) — bkz.\r\n * badge.variants.ts'teki gerekçe. `neutral` — marka rengiyle (primary)\r\n * İLİŞKİSİZ bir kişi/varlık için (ör. \"Sistem\", \"Silinmiş kullanıcı\") —\r\n * `MfTone`'un geri kalanıyla tutarlı, kit genelinde her `tone` ekseni\r\n * `neutral`den başlar.\r\n */\r\nconst COLOR_CLASSES: Record<AvatarTone, string> = {\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/**\r\n * `colorful` hash havuzu BİLEREK `help` HARİÇ eski 6 tonda sabit kalır —\r\n * help yeni bir tondur, havuza eklenirse `hash % length` kayar ve önceden\r\n * `colorful` ile atanmış isimlerin rengi DEĞİŞİR (bkz. plan \"Deep Emerald &\r\n * Slate v2\" madde B — kırılma istenmiyor).\r\n */\r\nconst COLOR_PALETTE = (\r\n ['neutral', 'primary', 'success', 'warning', 'danger', 'info'] as const satisfies AvatarTone[]\r\n).map((tone) => COLOR_CLASSES[tone]);\r\n\r\nfunction hashString(value: string): number {\r\n let hash = 0;\r\n for (let i = 0; i < value.length; i++)\r\n hash = (Math.imul(hash, 16777619) + value.charCodeAt(i)) >>> 0;\r\n return hash;\r\n}\r\n\r\n@Component({\r\n selector: 'mf-avatar',\r\n host: { class: 'inline-flex' },\r\n template: `\r\n @if (src(); as url) {\r\n <img [src]=\"url\" [alt]=\"name()\" [class]=\"shapeClasses() + ' object-cover ' + sizeClasses()\" />\r\n } @else {\r\n <span\r\n [class]=\"\r\n 'inline-flex items-center justify-center ' +\r\n shapeClasses() +\r\n ' font-medium ' +\r\n colorClasses() +\r\n ' ' +\r\n sizeClasses()\r\n \"\r\n >\r\n {{ initials() }}\r\n </span>\r\n }\r\n `,\r\n})\r\nexport class Avatar {\r\n readonly name = input.required<string>();\r\n readonly src = input<string | null>(null);\r\n readonly size = input<'sm' | 'md' | 'lg'>('md');\r\n readonly shape = input<'round' | 'square'>('round');\r\n /** Her isim için sabit, farklı bir renk (ör. tenant switcher listesi) — `tone` verilmişse yoksayılır. */\r\n readonly colorful = input(false);\r\n /** İsimden bağımsız, hep AYNI sabit renk (ör. tek bir kullanıcının kendi profili) — `colorful`'dan öncelikli. */\r\n readonly tone = input<AvatarTone | null>(null);\r\n\r\n protected readonly shapeClasses = computed(() =>\r\n this.shape() === 'square' ? 'rounded-md' : 'rounded-full',\r\n );\r\n\r\n protected readonly colorClasses = computed(() => {\r\n const tone = this.tone();\r\n if (tone) return COLOR_CLASSES[tone];\r\n return this.colorful()\r\n ? COLOR_PALETTE[hashString(this.name()) % COLOR_PALETTE.length]\r\n : COLOR_CLASSES.primary;\r\n });\r\n\r\n protected readonly initials = computed(() => {\r\n const parts = this.name().trim().split(/\\s+/).filter(Boolean);\r\n if (parts.length === 0) return '';\r\n if (parts.length === 1) return parts[0]!.slice(0, 2).toUpperCase();\r\n return (parts[0]![0] + parts[parts.length - 1]![0]).toUpperCase();\r\n });\r\n\r\n protected readonly sizeClasses = computed(\r\n () =>\r\n ({ sm: 'h-7 w-7 text-xs', md: 'h-9 w-9 text-sm', lg: 'h-12 w-12 text-base' })[this.size()],\r\n );\r\n}\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { cn, MF_AVATAR_GROUP_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Avatar } from '@mesgflow/ui-kit/avatar';\r\n\r\nexport interface AvatarGroupItem {\r\n name: string;\r\n src?: string | null;\r\n}\r\n\r\n/** Avatar'ın KENDİ üç boyutuyla (bkz. avatar.ts `sizeClasses`) birebir eşleşir — \"+N\" göstergesi görsel olarak bir avatar GİBİ görünmeli. */\r\nconst SIZE_CLASSES: Record<'sm' | 'md' | 'lg', string> = {\r\n sm: 'h-7 w-7 text-xs',\r\n md: 'h-9 w-9 text-sm',\r\n lg: 'h-12 w-12 text-base',\r\n};\r\n\r\n/**\r\n * `<mf-avatar-group [items]=\"teamMembers\" [max]=\"5\" />` — üst üste binen\r\n * (`-space-x-2` + `ring-2 ring-surface` her avatarı komşusundan ayırır)\r\n * bir avatar yığını. `max`'ı aşan üyeler tek bir \"+N\" göstergesine\r\n * TOPLANIR (tıklanabilir değil — sadece özet; tam listeyi göstermek\r\n * çağıranın kendi tooltip/popover'ına bırakılır).\r\n */\r\n@Component({\r\n selector: 'mf-avatar-group',\r\n exportAs: 'mfAvatarGroup',\r\n imports: [Avatar],\r\n host: { class: 'flex items-center -space-x-2' },\r\n template: `\r\n @for (item of visible(); track item.name) {\r\n <mf-avatar\r\n [name]=\"item.name\"\r\n [src]=\"item.src ?? null\"\r\n [size]=\"size()\"\r\n class=\"ring-2 ring-surface\"\r\n />\r\n }\r\n @if (overflowCount() > 0) {\r\n <span\r\n [class]=\"overflowClasses()\"\r\n [attr.aria-label]=\"overflowCount() + ' ' + effectiveOverflowLabel()\"\r\n >\r\n +{{ overflowCount() }}\r\n </span>\r\n }\r\n `,\r\n})\r\nexport class AvatarGroup {\r\n readonly items = input.required<AvatarGroupItem[]>();\r\n readonly max = input(5);\r\n readonly size = input<'sm' | 'md' | 'lg'>('md');\r\n\r\n private readonly avatarGroupLabels = inject(MF_AVATAR_GROUP_LABELS);\r\n protected readonly effectiveOverflowLabel = computed(\r\n () => this.avatarGroupLabels().overflowAriaLabel,\r\n );\r\n\r\n protected readonly visible = computed(() => this.items().slice(0, this.max()));\r\n protected readonly overflowCount = computed(() => Math.max(0, this.items().length - this.max()));\r\n\r\n protected readonly overflowClasses = computed(() =>\r\n cn(\r\n 'inline-flex items-center justify-center rounded-full bg-surface-alt font-medium text-fg-muted ring-2 ring-surface',\r\n SIZE_CLASSES[this.size()],\r\n ),\r\n );\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Kullanıcının beğendiği bir Artifact'teki `.pill` deseni birebir uyarlandı:\r\n * mono + büyük harf + geniş harf aralığı + `currentColor` nokta göstergesi\r\n * (`before:`). Bu bileşenin kendisi bu tazelemenin imza motiflerinden biri\r\n * (\"mono mikro-etiket\") — `text-eyebrow` token'ı (tokens/typography.css)\r\n * TAM OLARAK bu dili konuşmak için var (kalın ağırlık + geniş tracking bir\r\n * arada); font-weight/letter-spacing'i elle tekrar YAZMAK yerine doğrudan\r\n * o token kullanılıyor (bkz. plan Faz 1d — sm/md artık FONT BOYUTUNDA değil,\r\n * sadece dolguda ayrışıyor, ikisi de aynı mikro-etiket ölçeğini paylaşıyor).\r\n *\r\n * Renkli tonlar rol token'ı `bg-X-tint text-X-tint-fg` kullanır — spec'in\r\n * \"Soft Tinting\" tekniği: `color-mix()` ile rampanın kendi basamağının %12\r\n * alfası (light çapa 600, dark çapa 400), metin rampanın 800/400 basamağı.\r\n * Rozet her türlü zeminin (kart, tablo satırı, toolbar) üstüne oturabiliyor —\r\n * `color-mix` her zeminde AYRI karışıp `check:contrast`'ta dört yüzeyde de\r\n * doğrulanıyor (bkz. projects/ui-kit/README.md \"Token mimarisi\").\r\n */\r\nexport const badgeVariants = cva(\r\n 'inline-flex items-center gap-1.5 rounded-full font-mono text-eyebrow uppercase ' +\r\n \"before:block before:h-1.5 before:w-1.5 before:shrink-0 before:rounded-full before:bg-current before:content-['']\",\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 /** `md` öncekiyle (tek boyutlu dönem) BİREBİR aynı dolgu — `sm` tablo hücresi/chip gibi sık dizilen bağlamlar için. */\r\n size: {\r\n sm: 'py-0.5 pe-2 ps-1.5',\r\n md: 'py-1 pe-2.5 ps-2',\r\n },\r\n },\r\n defaultVariants: { tone: 'neutral', size: 'md' },\r\n },\r\n);\r\n\r\nexport type BadgeTone = VariantProps<typeof badgeVariants>['tone'];\r\nexport type BadgeSize = VariantProps<typeof badgeVariants>['size'];\r\n","import { Directive, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { badgeVariants, type BadgeSize, type BadgeTone } from './badge.variants';\r\n\r\n/** `<span mfBadge tone=\"success\">Aktif</span>` */\r\n@Directive({\r\n selector: 'span[mfBadge]',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class Badge {\r\n readonly tone = input<BadgeTone>('neutral');\r\n readonly size = input<BadgeSize>('md');\r\n protected readonly classes = computed(() =>\r\n cn(badgeVariants({ tone: this.tone(), size: this.size() })),\r\n );\r\n}\r\n","import {\r\n Component,\r\n afterNextRender,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n} from '@angular/core';\r\nimport { MF_ALERT_LABELS, cn, type MfTone } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\n\r\nexport type BannerAppearance = 'tint' | 'fill';\r\n\r\nconst TINT: Record<MfTone, string> = {\r\n neutral: 'border-border bg-surface-alt text-fg',\r\n primary: 'border-accent/30 bg-primary-tint text-primary-tint-fg',\r\n success: 'border-success/30 bg-success-tint text-success-tint-fg',\r\n warning: 'border-warning/30 bg-warning-tint text-warning-tint-fg',\r\n danger: 'border-danger/30 bg-danger-tint text-danger-tint-fg',\r\n info: 'border-info/30 bg-info-tint text-info-tint-fg',\r\n help: 'border-help/30 bg-help-tint text-help-tint-fg',\r\n};\r\n\r\n/** Dolu zemin/ön plan çiftleri `check:contrast`'ta doğrulanır (fill + fill-fg). */\r\nconst FILL: Record<MfTone, string> = {\r\n neutral: 'border-transparent bg-neutral-fill text-neutral-fill-fg',\r\n primary: 'border-transparent bg-accent-fill text-fg-on-accent',\r\n success: 'border-transparent bg-success-fill text-success-fill-fg',\r\n warning: 'border-transparent bg-warning-fill text-warning-fill-fg',\r\n danger: 'border-transparent bg-danger-fill text-danger-fill-fg',\r\n info: 'border-transparent bg-info-fill text-info-fill-fg',\r\n help: 'border-transparent bg-help-fill text-help-fill-fg',\r\n};\r\n\r\nconst STORAGE_PREFIX = 'mf-banner-dismissed:';\r\n\r\n/**\r\n * `<mf-banner tone=\"primary\" appearance=\"fill\" icon=\"campaign\" dismissible dismissKey=\"v0.5\">\r\n * Yeni sürüm yayında. <a href=\"/changelog\">Neler değişti?</a>\r\n * <button mfButton size=\"sm\" action>Güncelle</button>\r\n * </mf-banner>`\r\n *\r\n * Sayfanın/bölümün üst kenarında tam genişlik duyuru şeridi — `Alert`'ten farkı: kart değil\r\n * kenardan kenara şerit, alt kenarlık; `fill` görünümü marka/durum rengiyle dolu. İçerideki\r\n * bağlantılar metin rengini devralır ve altı çizilir (dolu zeminde `mfLink`'in marka rengi\r\n * kontrastı bozardı). Eylem düğmesi `[action]` slotuna.\r\n *\r\n * `dismissKey` verilirse kapatma bu tarayıcıda hatırlanır (`localStorage`) — duyuru bir daha\r\n * gösterilmez; depolama erişilemezse (gizli pencere) sessizce yalnızca oturumluk kapanır.\r\n * Varsayılan olarak `role` YOK (statik duyuru); sonradan beliren, duyurulması gereken bir\r\n * şerit için `announce` → `role=\"status\"`.\r\n */\r\n@Component({\r\n selector: 'mf-banner',\r\n exportAs: 'mfBanner',\r\n imports: [Icon],\r\n host: {\r\n '[class]': 'hostClasses()',\r\n '[attr.role]': \"announce() ? 'status' : null\",\r\n },\r\n templateUrl: './banner.html',\r\n})\r\nexport class Banner {\r\n readonly tone = input<MfTone>('primary');\r\n readonly appearance = input<BannerAppearance>('tint');\r\n readonly icon = input<string | null>(null);\r\n readonly align = input<'start' | 'center'>('start');\r\n readonly dismissible = input(false, { transform: booleanAttribute });\r\n /** Kalıcı kapatma anahtarı — değiştirmek (ör. sürüm) duyuruyu yeniden gösterir. */\r\n readonly dismissKey = input<string>();\r\n readonly announce = input(false, { transform: booleanAttribute });\r\n readonly open = model(true);\r\n\r\n readonly dismissed = output<void>();\r\n\r\n protected readonly labels = inject(MF_ALERT_LABELS);\r\n\r\n protected readonly hostClasses = computed(() =>\r\n cn(\r\n 'block border-b text-sm [&_a]:font-medium [&_a]:text-current [&_a]:underline [&_a]:underline-offset-2',\r\n this.appearance() === 'fill' ? FILL[this.tone()] : TINT[this.tone()],\r\n // [hidden] değil: `block` sınıfı UA'nın display:none'unu ezerdi.\r\n !this.open() && 'hidden',\r\n ),\r\n );\r\n\r\n constructor() {\r\n // Tarayıcıda, ilk çizimden sonra — SSR'de depolama yok.\r\n afterNextRender(() => {\r\n const key = this.dismissKey();\r\n if (key && readDismissed(key)) this.open.set(false);\r\n });\r\n }\r\n\r\n protected dismiss(): void {\r\n const key = this.dismissKey();\r\n if (key) writeDismissed(key);\r\n this.open.set(false);\r\n this.dismissed.emit();\r\n }\r\n}\r\n\r\nfunction readDismissed(key: string): boolean {\r\n try {\r\n return localStorage.getItem(STORAGE_PREFIX + key) === '1';\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nfunction writeDismissed(key: string): void {\r\n try {\r\n localStorage.setItem(STORAGE_PREFIX + key, '1');\r\n } catch {\r\n // Gizli pencere / engellenmiş depolama — yalnızca bu oturumda kapanır.\r\n }\r\n}\r\n","<div\r\n class=\"mx-auto flex min-h-11 flex-wrap items-center gap-x-3 gap-y-2 px-4 py-2\"\r\n [class.justify-center]=\"align() === 'center'\"\r\n>\r\n @if (icon()) {\r\n <span mfIcon [size]=\"18\" class=\"shrink-0\">{{ icon() }}</span>\r\n }\r\n <div\r\n class=\"min-w-0\"\r\n [class.flex-1]=\"align() === 'start'\"\r\n [class.text-center]=\"align() === 'center'\"\r\n >\r\n <ng-content />\r\n </div>\r\n <ng-content select=\"[action]\" />\r\n @if (dismissible()) {\r\n <button\r\n type=\"button\"\r\n class=\"-me-2 inline-flex size-8 shrink-0 cursor-pointer appearance-none items-center justify-center rounded-md border-0 bg-transparent text-current transition-colors duration-fast ease-emphasis hover:bg-current/10 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-current\"\r\n [attr.aria-label]=\"labels().dismiss\"\r\n (click)=\"dismiss()\"\r\n >\r\n <span mfIcon [size]=\"18\">close</span>\r\n </button>\r\n }\r\n</div>\r\n","import { Component, computed, forwardRef, inject, input, model, signal } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { MF_BOX_INPUT_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { NumberInput } from '@mesgflow/ui-kit/number-input';\r\n\r\nexport interface BoxValue {\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n left: number;\r\n}\r\n\r\nconst SIDES: (keyof BoxValue)[] = ['top', 'right', 'bottom', 'left'];\r\n\r\n/**\r\n * `<mf-box-input [(value)]=\"padding\" unit=\"px\" />` — 4 kenar (padding/\r\n * margin/border) kutu-model girdisi. Bağlantılı mod (varsayılan AÇIK): tek\r\n * input değiştirmek dördünü BİRDEN değiştirir — zincir ikonuna tıklayınca\r\n * kenarlar bağımsızlaşır (kenarı ayırırken mevcut `top` değeri dördüne\r\n * BASILMAZ — sadece tekrar bağlarken senkronlanır). `NumberInput` üstüne\r\n * kompoze edilmiş bir COMPONENT (gerçek iç yapı — bkz. README \"Directive mi,\r\n * component mi?\").\r\n */\r\n@Component({\r\n selector: 'mf-box-input',\r\n imports: [NumberInput, Icon],\r\n host: { class: 'block' },\r\n templateUrl: './box-input.html',\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BoxInput), multi: true }],\r\n})\r\nexport class BoxInput extends ValueAccessorBase<BoxValue> implements ControlValueAccessor {\r\n readonly value = model<BoxValue>({ top: 0, right: 0, bottom: 0, left: 0 });\r\n readonly unit = input('px');\r\n readonly min = input(0);\r\n readonly max = input<number | null>(null);\r\n readonly disabled = input(false);\r\n\r\n protected readonly linked = signal(true);\r\n protected readonly sides = SIDES;\r\n\r\n private readonly boxInputLabels = inject(MF_BOX_INPUT_LABELS);\r\n protected readonly sideLabels = computed(() => {\r\n const labels = this.boxInputLabels();\r\n return { top: labels.top, right: labels.right, bottom: labels.bottom, left: labels.left };\r\n });\r\n protected readonly linkToggleTitle = computed(() =>\r\n this.linked() ? this.boxInputLabels().unlinkSides : this.boxInputLabels().linkSides,\r\n );\r\n\r\n writeValue(value: BoxValue): void {\r\n this.value.set(value);\r\n }\r\n\r\n protected sideValue(side: keyof BoxValue): number {\r\n return this.value()[side];\r\n }\r\n\r\n protected setSide(side: keyof BoxValue, next: number | null): void {\r\n const n = next ?? 0;\r\n if (this.linked()) {\r\n this.value.set({ top: n, right: n, bottom: n, left: n });\r\n } else {\r\n this.value.update((v) => ({ ...v, [side]: n }));\r\n }\r\n this.onChange(this.value());\r\n this.onTouched();\r\n }\r\n\r\n protected toggleLinked(): void {\r\n this.linked.update((v) => !v);\r\n if (this.linked()) {\r\n const t = this.value().top;\r\n this.value.set({ top: t, right: t, bottom: t, left: t });\r\n this.onChange(this.value());\r\n }\r\n }\r\n}\r\n","<div class=\"inline-flex items-end gap-1.5\">\r\n @for (side of sides; track side) {\r\n <div class=\"flex flex-col items-center gap-1\">\r\n <span class=\"text-xs text-fg-subtle\">{{ sideLabels()[side] }}</span>\r\n <mf-number-input\r\n class=\"w-20\"\r\n [value]=\"sideValue(side)\"\r\n (valueChange)=\"setSide(side, $event)\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [unit]=\"unit()\"\r\n [ariaLabel]=\"sideLabels()[side]\"\r\n [disabled]=\"disabled()\"\r\n />\r\n </div>\r\n }\r\n <button\r\n type=\"button\"\r\n class=\"mb-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-md border border-border bg-surface text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-surface-alt focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring disabled:pointer-events-none disabled:opacity-50\"\r\n [class.text-accent]=\"linked()\"\r\n [class.border-accent]=\"linked()\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"toggleLinked()\"\r\n [attr.aria-pressed]=\"linked()\"\r\n [attr.title]=\"linkToggleTitle()\"\r\n >\r\n <span mfIcon [size]=\"16\">{{ linked() ? 'link' : 'link_off' }}</span>\r\n </button>\r\n</div>\r\n","import { Component, computed, input } from '@angular/core';\r\n\r\n/**\r\n * `<mf-brand [name]=\"i18n().auth.layout.brandName\" />`\r\n *\r\n * Marka işareti TEK kaynağa indirildi — daha önce üç ayrı yerde üç farklı\r\n * şey vardı: auth masaüstü panelinde sabit kodlu \"MF\", mobil auth bloğunda\r\n * ve layout sidebar'ında sabit kodlu \"N\", sidebar'da ayrıca `bg-teal-600`\r\n * (eski marka rengi, köşeli/`rounded-*` olmayan bir kare). İşaret artık\r\n * `name()`'in İLK HARFİNDEN türetiliyor — `brandName` çevirisi değişse bile\r\n * bir daha asenkron/bayat kalamaz.\r\n *\r\n * `labelTone=\"auto\"` (varsayılan) isim metnini moda-duyarlı `text-fg` ile\r\n * boyar — ama auth-layout'un sol paneli gibi TEMADAN BAĞIMSIZ hep koyu kalan\r\n * zeminlerde bu YANLIŞ: light modda `text-fg` koyu metne döner, koyu panel\r\n * üstünde görünmez olur (gerçek bug, tarayıcıda yakalandı). O bağlamlarda\r\n * `labelTone=\"light\"` ver — sabit beyaz metin, moddan bağımsız. Simetrik\r\n * olarak `labelTone=\"dark\"` — sabit koyu (`primary-900`) metin, TEMADAN\r\n * BAĞIMSIZ hep AÇIK kalan zeminler için (`appearance=\"brand-light\"` sidebar\r\n * gibi): `auto` orada da YANLIŞ olurdu — dark site modunda `text-fg` açık\r\n * renge döner, ki zemin (primary-100) hep açık kaldığından metin kaybolurdu.\r\n *\r\n * İşaret zemini `bg-accent-fill` — Sidebar `appearance=\"brand\"` içine\r\n * (`[brand]` slotu ile) projelendiğinde bu artık primary-900'e (kök\r\n * sidebar'la AYNI zemin) denk düşer, işaret kaybolurdu. `group-data-\r\n * [appearance=brand]/sidebar:` varyantı (özgüllük 0,2,0, `bg-accent-fill`in\r\n * 0,1,0'ını İKİ MODDA da yener) o bağlamda primary-400 (`#10b981`) + ink\r\n * (`primary-950`, ≈6.9:1) zeminine geçer — Sidebar'ın kendi `data-appearance`\r\n * attribute'una bağlı, `Brand`'e yeni bir input EKLENMEDEN.\r\n *\r\n * `appearance=\"brand-light\"` (kök primary-100, İKİ modda da AYNI) için AYRI\r\n * bir override GEREKİR — DARK site modunda `bg-accent-fill` primary-400'e\r\n * kayıyor, primary-100 zemine karşı sadece 2.15:1 (AA altı, neredeyse\r\n * kaybolur). Sabit koyu blok + beyaz metin (`primary-900`/`white`) — bu,\r\n * LIGHT site modunda zaten `bg-accent-fill`in verdiği sonuçla (primary-900)\r\n * ÖRTÜŞÜYOR, sadece dark site modundaki tutarsızlığı gideriyor.\r\n */\r\n@Component({\r\n selector: 'mf-brand',\r\n template: `\r\n <span class=\"inline-flex items-center gap-2\">\r\n <span\r\n [class]=\"\r\n 'flex shrink-0 items-center justify-center rounded-md bg-accent-fill font-display font-bold text-fg-on-accent ' +\r\n 'group-data-[appearance=brand]/sidebar:bg-primary-400 group-data-[appearance=brand]/sidebar:text-primary-950 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:bg-primary-900 group-data-[appearance=brand-light]/sidebar:text-white ' +\r\n (size() === 'sm' ? 'h-8 w-8 text-sm' : 'h-9 w-9 text-sm')\r\n \"\r\n aria-hidden=\"true\"\r\n >\r\n {{ mark() }}\r\n </span>\r\n @if (showLabel()) {\r\n <span\r\n [class]=\"\r\n 'truncate text-title font-semibold ' +\r\n (labelTone() === 'light'\r\n ? 'text-white'\r\n : labelTone() === 'dark'\r\n ? 'text-primary-900'\r\n : 'text-fg')\r\n \"\r\n >{{ name() }}</span\r\n >\r\n }\r\n </span>\r\n `,\r\n})\r\nexport class Brand {\r\n readonly name = input.required<string>();\r\n readonly size = input<'sm' | 'md'>('md');\r\n readonly showLabel = input(true);\r\n readonly labelTone = input<'auto' | 'light' | 'dark'>('auto');\r\n\r\n protected readonly mark = computed(() => this.name().trim().slice(0, 1).toUpperCase() || '?');\r\n}\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { MF_BREADCRUMB_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Link } from '@mesgflow/ui-kit/link';\r\n\r\nexport interface BreadcrumbItem {\r\n label: string;\r\n href?: string;\r\n}\r\n\r\n/**\r\n * `<mf-breadcrumb [items]=\"[{label: 'Ayarlar', href: '/ayarlar'}, {label: 'Ekip'}]\" />`\r\n *\r\n * SON öğe (mevcut sayfa) `href` verilse BİLE bağlantı OLARAK render\r\n * EDİLMEZ — WAI-ARIA breadcrumb deseninin önerdiği gibi düz metin +\r\n * `aria-current=\"page\"`. Host `role=\"navigation\"` taşır (`nav` etiketi\r\n * DEĞİL — `mf-breadcrumb` özel bir eleman, ama landmark semantiği aynı\r\n * şekilde çalışır).\r\n */\r\n@Component({\r\n selector: 'mf-breadcrumb',\r\n exportAs: 'mfBreadcrumb',\r\n imports: [Icon, Link],\r\n host: {\r\n role: 'navigation',\r\n '[attr.aria-label]': 'effectiveAriaLabel()',\r\n },\r\n template: `\r\n <ol class=\"flex flex-wrap items-center gap-1.5 text-sm text-fg-muted\">\r\n @for (item of items(); track item.label; let last = $last) {\r\n <li class=\"flex items-center gap-1.5\">\r\n @if (!last && item.href) {\r\n <a mfLink [href]=\"item.href\" underline=\"hover\">{{ item.label }}</a>\r\n } @else {\r\n <span [attr.aria-current]=\"last ? 'page' : null\" [class.text-fg]=\"last\">{{\r\n item.label\r\n }}</span>\r\n }\r\n @if (!last) {\r\n <span mfIcon [size]=\"14\" class=\"text-fg-subtle rtl:-scale-x-100\" aria-hidden=\"true\"\r\n >chevron_right</span\r\n >\r\n }\r\n </li>\r\n }\r\n </ol>\r\n `,\r\n})\r\nexport class Breadcrumb {\r\n readonly items = input.required<BreadcrumbItem[]>();\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly injectedLabels = inject(MF_BREADCRUMB_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.injectedLabels().ariaLabel,\r\n );\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * İki bağımsız eksen: `tone` (anlamsal renk, bkz. `MfTone`) × `appearance`\r\n * (dolu/kenarlıklı/düz-metin). Her kombinasyon\r\n * `compoundVariants`'ta açık — okunabilirlik netlik demek, kısayola kaçma.\r\n *\r\n * Gloss/iç-highlight YOK — 2 kez reddedildi.\r\n * `outlined` kenarlığı bilinçli olarak jenerik gri DEĞİL, rengin kendisinin\r\n * düşük opaklıklı hali (`border-accent/30` gibi) — düz gri çizgi \"90'lar\r\n * form elemanı\" hissi veriyordu, renkli-şeffaf kenarlık modern/kasıtlı durur.\r\n * Bu opaklık artık TEK bir class'ta iki modu birden doğru veriyor: `accent`/\r\n * `success`/`warning`/`danger`/`info` çıplak isimleri `styles.css`'te\r\n * moda göre takas olan rol token'ları (600 basamağı light, 400 basamağı\r\n * dark) — `dark:` ikizi yazmaya gerek YOK.\r\n */\r\nexport const buttonVariants = cva(\r\n /*\r\n * `appearance-none border border-transparent`: Tailwind'in TAM `preflight.css`'i\r\n * (bkz. styles.css) native <button>'ın tarayıcı varsayılan görünümünü zaten\r\n * sıfırlıyor; `border-transparent` burada BİLEREK KALICI — `border` width'i\r\n * TEK KAYNAKTAN (buradan) gelsin diye netlik amaçlı bırakıldı. Outlined\r\n * compound variant'ları sadece border-RENGİNİ değiştiriyor (`cn()`/twMerge\r\n * ile çakışma güvenli çözülüyor, bkz. button.ts) — ayrıca bir yerde\r\n * `border-0`/`border` çifti YAZMA.\r\n */\r\n /*\r\n * Focus: box-shadow tabanlı `ring`+`ring-offset` YERİNE native `outline`+\r\n * `outline-offset` kullanılıyor (bkz. projects/ui-kit/README.md \"Focus — tek\r\n * mekanizma\") — Windows Yüksek Kontrast modunda box-shadow tamamen\r\n * kayboluyor ama outline korunuyor, outline `overflow:hidden` içinde\r\n * kırpılmıyor, ve modern tarayıcılar outline'ı elementin kendi\r\n * border-radius'una göre otomatik yuvarlıyor. Renk artık TÜM primitifler\r\n * genelinde TEK bir kaynak: `outline-focus-ring` (styles.css'te tanımlı,\r\n * moda göre 600/400 basamağı arasında takas olur) — eskiden her tone\r\n * kendi `focus-visible:outline-X/50`'sini taşıyordu (input'ta `ring-4`,\r\n * checkbox'ta `ring-2 ring-offset-2` gibi üç farklı mekanizma da vardı),\r\n * artık tüm primitifler bu tek mekanizmaya bağlı.\r\n */\r\n 'inline-flex appearance-none items-center justify-center gap-2 border border-transparent font-medium tracking-label transition-colors duration-fast ease-emphasis ' +\r\n 'active:scale-[0.99] ' +\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:opacity-50 disabled:shadow-none disabled:active:scale-100',\r\n {\r\n variants: {\r\n tone: {\r\n primary: '',\r\n neutral: '',\r\n success: '',\r\n warning: '',\r\n danger: '',\r\n info: '',\r\n help: '',\r\n },\r\n appearance: {\r\n filled: '',\r\n outlined: 'bg-transparent',\r\n text: 'bg-transparent',\r\n },\r\n /*\r\n * Yoğunluk sıkılaştırıldı: md 40px→36px (kurumsal panellerde 40px iri\r\n * duruyordu, Linear/Vercel/GitHub yoğunluğuna çekildi). Radius\r\n * `rounded-lg`(eski 8px) → `rounded-md`(yeni 8px) — görünüş AYNI,\r\n * sadece isim değişti (bkz. radius.css'teki \"nested radius\" notu:\r\n * kart/panel gibi KAPSAYICILAR artık `rounded-lg`de kalıp otomatik\r\n * 12px'e büyüyor, kontroller bu satırda `rounded-md`ye taşınarak eski\r\n * görünümü koruyor).\r\n *\r\n * `h-control-*` (bkz. radius.css) — TEK kontrol-yükseklik kaynağı,\r\n * Input/Select/NumberInput/... ile PAYLAŞILAN aynı üç basamak (bkz.\r\n * `core/recipes.ts` `controlSize`). `lg` bu geçişte 44px→40px'e indi\r\n * (BREAKING — CHANGELOG'a bkz.): 44px sm/md'ye göre orantısız iriydi,\r\n * yeni üçlü tutarlı bir 32/36/40 merdiveni.\r\n */\r\n size: {\r\n sm: 'h-control-sm px-3 text-sm rounded-md',\r\n md: 'h-control-md px-4 text-sm rounded-md',\r\n lg: 'h-control-lg px-5 text-base rounded-md',\r\n /*\r\n * `text-xs font-semibold`: icon boyutu SADECE ikon değil metin de\r\n * taşıyabiliyor (ör. language-switcher'ın \"EN\"/\"TR\" etiketi) — boyut\r\n * tanımlanmadığında metin varsayılan (büyük) font'ta basılıyor,\r\n * yanındaki 18px ikonla görsel ağırlığı uyuşmuyordu.\r\n *\r\n * Şekil (yuvarlak/köşeli) ve dolayısıyla focus mekanizması artık\r\n * `shape` eksenine taşındı (aşağıda) — bu satır sadece boyut/tipografi\r\n * taşıyor, `rounded-*` YOK. Yükseklik `md` ile aynı (36px).\r\n */\r\n icon: 'relative aspect-square h-control-md shrink-0 text-xs font-semibold',\r\n },\r\n /**\r\n * `size=\"icon\"` için şekil ekseni — diğer boyutlarda (sm/md/lg) etkisiz\r\n * (boş string). Kullanıcı geri bildirimi: yuvarlak ikon-buton hover'ı\r\n * \"her yerde aynı\" duruyordu, GitHub/Linear tarzı köşeli (rounded-md)\r\n * bir hover/şekil de istendi — toolbar aksiyonları (Filtreler, satır\r\n * düzenle/sil vb.) `square`, avatar-yanı ikonlar (tema/dil değiştirici)\r\n * `round` (varsayılan) kullanıyor.\r\n */\r\n shape: {\r\n round: '',\r\n square: '',\r\n },\r\n },\r\n compoundVariants: [\r\n /*\r\n * round: native `outline` `rounded-full`'u izlediği için (modern\r\n * tarayıcılar outline'ı border-radius'a göre otomatik yuvarlıyor)\r\n * doğrudan buton üzerinde bırakılsaydı focus göstergesi daire-içinde-\r\n * daire (\"bullseye\"/ripple'ı andıran) görünürdü. Bunun yerine kendi\r\n * `rounded-md` (köşeli) radius'una sahip bağımsız bir `::after` pseudo-\r\n * element kare/köşeli bir çerçeve çiziyor, rengi de artık tek kaynaklı\r\n * `outline-focus-ring` — eskiden \"ink/paper\" sabit zıtlığı (light:\r\n * dark-canvas, dark: slate-100) kullanılıyordu çünkü `outline-current`\r\n * filled+beyaz-metin butonlarda beyaz zeminde beyaza karışıyordu; yeni\r\n * `focus-ring` token'ı zaten primary-600/400 (arkaplandan bağımsız\r\n * yüksek kontrastlı bir marka rengi) olduğu için aynı sorunu yaşamıyor.\r\n *\r\n * square: buton zaten `rounded-md` olduğundan native `outline` fazladan\r\n * bir teknik gerektirmeden doğru köşeli çerçeveyi otomatik veriyor —\r\n * base class'taki `focus-visible:outline` mekanizması yeterli, ek bir\r\n * şey eklemeye GEREK YOK.\r\n */\r\n {\r\n size: 'icon',\r\n shape: 'round',\r\n class:\r\n \"rounded-full focus-visible:outline-none after:pointer-events-none after:absolute after:-inset-1 after:rounded-md after:opacity-0 after:outline after:outline-2 after:outline-focus-ring after:transition-opacity after:duration-fast after:content-[''] focus-visible:after:opacity-100\",\r\n },\r\n {\r\n size: 'icon',\r\n shape: 'square',\r\n class: 'rounded-md',\r\n },\r\n // ---- filled ----\r\n // NOT: primary'nin dolu bloğu `bg-accent-fill`/`hover:bg-accent-fill-hover`\r\n // (color.css'te tanımlı rol token'ları) KULLANIR, ham basamak DEĞİL —\r\n // LIGHT'ta primary-900 (`#062c22`, spec'in \"Forest Emerald\" CTA'sı),\r\n // DARK'ta primary-400 (`#10b981`, spec'in canlı zümrüt CTA'sı) + DARK'ta\r\n // mürekkep metin (`--mf-fg-on-accent`, beyaz `#10B981` üstünde 2.54:1\r\n // AA altı olduğundan). Diğer dört semantik ton (success/warning/danger/\r\n // info/help) da AYNI beşli rol desenini paylaşır: `bg-X-fill\r\n // text-X-fill-fg shadow-filled hover:bg-X-fill-hover` — light'ta\r\n // danger/help/info beyaz metin taşır, success/warning HER ZAMAN\r\n // mürekkep (spec'in beş rengi de dark modda beyazla AA'yı geçmiyor,\r\n // bu yüzden dark'ta hepsi mürekkep). `shadow-filled` (elevation.css) —\r\n // `shadow-1` kapsayıcı gölgesidir, kontrol ödünç almaz; nötr filled\r\n // (spec'in \"Secondary\"si, `neutral-fill` rol token'ı) gölgesiz kalır.\r\n {\r\n tone: 'primary',\r\n appearance: 'filled',\r\n class: 'bg-accent-fill text-fg-on-accent shadow-glow hover:bg-accent-fill-hover',\r\n },\r\n {\r\n tone: 'neutral',\r\n appearance: 'filled',\r\n class: 'bg-neutral-fill text-neutral-fill-fg hover:bg-neutral-fill-hover',\r\n },\r\n {\r\n tone: 'danger',\r\n appearance: 'filled',\r\n class: 'bg-danger-fill text-danger-fill-fg shadow-filled hover:bg-danger-fill-hover',\r\n },\r\n {\r\n tone: 'info',\r\n appearance: 'filled',\r\n class: 'bg-info-fill text-info-fill-fg shadow-filled hover:bg-info-fill-hover',\r\n },\r\n {\r\n tone: 'success',\r\n appearance: 'filled',\r\n class: 'bg-success-fill text-success-fill-fg shadow-filled hover:bg-success-fill-hover',\r\n },\r\n {\r\n tone: 'warning',\r\n appearance: 'filled',\r\n class: 'bg-warning-fill text-warning-fill-fg shadow-filled hover:bg-warning-fill-hover',\r\n },\r\n {\r\n tone: 'help',\r\n appearance: 'filled',\r\n class: 'bg-help-fill text-help-fill-fg shadow-filled hover:bg-help-fill-hover',\r\n },\r\n\r\n // ---- outlined ----\r\n {\r\n tone: 'primary',\r\n appearance: 'outlined',\r\n class: 'border-accent/30 text-accent hover:bg-accent/5',\r\n },\r\n {\r\n tone: 'neutral',\r\n appearance: 'outlined',\r\n class: 'border-border text-fg-muted hover:bg-surface-alt',\r\n },\r\n {\r\n tone: 'success',\r\n appearance: 'outlined',\r\n class: 'border-success/30 text-success hover:bg-success/5',\r\n },\r\n {\r\n tone: 'warning',\r\n appearance: 'outlined',\r\n class: 'border-warning/30 text-warning hover:bg-warning/5',\r\n },\r\n {\r\n tone: 'danger',\r\n appearance: 'outlined',\r\n class: 'border-danger/30 text-danger hover:bg-danger/5',\r\n },\r\n {\r\n tone: 'info',\r\n appearance: 'outlined',\r\n class: 'border-info/30 text-info hover:bg-info/5',\r\n },\r\n {\r\n tone: 'help',\r\n appearance: 'outlined',\r\n class: 'border-help/30 text-help hover:bg-help/5',\r\n },\r\n // ---- text ----\r\n {\r\n tone: 'primary',\r\n appearance: 'text',\r\n class: 'text-accent hover:bg-accent/5',\r\n },\r\n {\r\n tone: 'neutral',\r\n appearance: 'text',\r\n class: 'text-fg-muted hover:bg-surface-alt',\r\n },\r\n {\r\n tone: 'success',\r\n appearance: 'text',\r\n class: 'text-success hover:bg-success/5',\r\n },\r\n {\r\n tone: 'warning',\r\n appearance: 'text',\r\n class: 'text-warning hover:bg-warning/5',\r\n },\r\n {\r\n tone: 'danger',\r\n appearance: 'text',\r\n class: 'text-danger hover:bg-danger/5',\r\n },\r\n {\r\n tone: 'info',\r\n appearance: 'text',\r\n class: 'text-info hover:bg-info/5',\r\n },\r\n {\r\n tone: 'help',\r\n appearance: 'text',\r\n class: 'text-help hover:bg-help/5',\r\n },\r\n ],\r\n defaultVariants: { tone: 'primary', appearance: 'filled', size: 'md', shape: 'round' },\r\n },\r\n);\r\n\r\nexport type ButtonTone = VariantProps<typeof buttonVariants>['tone'];\r\n/** @deprecated `ButtonTone` kullan — `severity` girdisi `tone`'a taşındı (bkz. plan Faz 1a). */\r\nexport type ButtonSeverity = ButtonTone;\r\nexport type ButtonAppearance = VariantProps<typeof buttonVariants>['appearance'];\r\nexport type ButtonSize = VariantProps<typeof buttonVariants>['size'];\r\nexport type ButtonShape = VariantProps<typeof buttonVariants>['shape'];\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Spinner } from '@mesgflow/ui-kit/spinner';\r\nimport {\r\n buttonVariants,\r\n type ButtonAppearance,\r\n type ButtonShape,\r\n type ButtonSize,\r\n type ButtonTone,\r\n} from './button.variants';\r\n\r\n/**\r\n * `<button mfButton>`/`<a mfButton>` — selector native elemanın KENDİSİNİ\r\n * hedefler (`button[mfButton], a[mfButton]`), bir SARMALAYICI etiket\r\n * (`<mf-button>`) DEĞİL (bkz. `projects/ui-kit/README.md` \"Directive mi,\r\n * component mi?\") — bu yüzden tüketicinin `class=\"...\"` ile verdiği static\r\n * class GENE doğrudan gerçek native elemana düşer, eskiden directive'ken\r\n * olduğu gibi (host'ta kalıp içe düşmeme sorunu YOK). Directive'ten\r\n * component'e yükseltilmenin TEK sebebi: `loading`'i gerçek bir\r\n * `<mf-spinner>`'a, `iconStart`/`iconEnd`'i gerçek ikon element'lerine\r\n * bağlayabilmek için bir ŞABLONA ihtiyaç duyulması — tüketicinin kendi\r\n * içeriği `<ng-content />` ile AYNEN korunur.\r\n *\r\n * `tone` (renk) × `appearance` (dolu/kenarlıklı/düz-metin) bağımsız iki\r\n * girdi — ör. `tone=\"danger\" appearance=\"text\" size=\"icon\"` sadece ikon\r\n * gösteren, kenarlıksız bir sil butonu için.\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector -- BİLEREK native eleman + attribute (bkz. yukarıdaki JSDoc)\r\n selector: 'button[mfButton], a[mfButton]',\r\n exportAs: 'mfButton',\r\n imports: [Icon, Spinner],\r\n host: {\r\n '[class]': 'classes()',\r\n '[attr.type]': 'nativeType()',\r\n '[attr.aria-busy]': 'loading() || null',\r\n },\r\n template: `\r\n @if (loading()) {\r\n <mf-spinner size=\"xs\" />\r\n } @else if (iconStart()) {\r\n <span mfIcon [size]=\"18\">{{ iconStart() }}</span>\r\n }\r\n <ng-content />\r\n @if (!loading() && iconEnd()) {\r\n <span mfIcon [size]=\"18\">{{ iconEnd() }}</span>\r\n }\r\n `,\r\n})\r\nexport class Button {\r\n readonly tone = input<ButtonTone>('primary');\r\n readonly appearance = input<ButtonAppearance>('filled');\r\n readonly size = input<ButtonSize>('md');\r\n /** Sadece `size=\"icon\"`'da etkili — bkz. button.variants.ts. */\r\n readonly shape = input<ButtonShape>('round');\r\n /** Native <button> varsayılan type=\"submit\" sürprizini önlemek için — <a>'da yok sayılır. */\r\n readonly type = input<'button' | 'submit' | 'reset'>('button');\r\n /**\r\n * `true` iken içeriğin (`<ng-content />`) ÖNÜNE `<mf-spinner size=\"xs\" />`\r\n * eklenir — `iconStart` varsa YERİNE geçer, etiket metni görünür KALIR\r\n * (buton \"Kaydet\" yazıp yanında dönen bir gösterge taşır, metin\r\n * kaybolmaz). `disabled`'ı KENDİLİĞİNDEN yönetmez — tüketici\r\n * `[disabled]=\"loading() || ...\"` ile kendi bağlar.\r\n */\r\n readonly loading = input(false);\r\n /** Material Symbol adı (bkz. `Icon`) — içeriğin ÖNÜNE eklenir. `loading=true` iken spinner onun YERİNE geçer. */\r\n readonly iconStart = input('');\r\n /** Material Symbol adı — içeriğin ARDINA eklenir. `loading=true` iken GİZLENİR (tek bir dönen gösterge yeterli — `iconStart` ile aynı ilke). */\r\n readonly iconEnd = input('');\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n buttonVariants({\r\n tone: this.tone(),\r\n appearance: this.appearance(),\r\n size: this.size(),\r\n shape: this.shape(),\r\n }),\r\n this.loading() ? 'cursor-wait' : '',\r\n ),\r\n );\r\n protected readonly nativeType = computed(() => this.type());\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n/**\r\n * `<mf-button-group><button mfButton appearance=\"outlined\">A</button>...</mf-button-group>`\r\n * — bitişik butonları TEK bir segment şeridi gibi birleştirir: iç köşeler\r\n * kare, kenarlıklar 1px çakışır (`-ms-px`), hover/odaklı buton `z-10` ile\r\n * komşusunun üstüne çıkar (çakışan kenarlık kesilmesin diye). En anlamlısı\r\n * `appearance=\"outlined\"` butonlarla — dolu/düz-metin butonlarda zaten\r\n * görünür kenarlık yok, sadece aralarındaki boşluk kapanır.\r\n */\r\n@Component({\r\n selector: 'mf-button-group',\r\n exportAs: 'mfButtonGroup',\r\n host: {\r\n role: 'group',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n class:\r\n 'inline-flex [&>*]:rounded-none [&>*:first-child]:rounded-s-md [&>*:last-child]:rounded-e-md [&>*:not(:first-child)]:-ms-px [&>*:focus-visible]:z-10 [&>*:hover]:z-10',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class ButtonGroup {\r\n readonly ariaLabel = input('');\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * BORDER-FIRST (2026-09 Deep Emerald geçişi, kullanıcı kararıyla önceki\r\n * \"light modda kenarlıksız, sadece gölge\" ilkesinin YERİNE geçti): iki modda\r\n * da `border-hairline` (color.css — %8-12 opak marka-tonlu 1px çizgi),\r\n * gölge YOK. `interactive` kartlarda hover'da hafif bir yükselme hâlâ\r\n * `shadow-2` ile veriliyor — bu artık istisna, varsayılan durum gölgesiz.\r\n */\r\nexport const cardVariants = cva('rounded-lg border border-hairline bg-surface', {\r\n variants: {\r\n padding: {\r\n none: '',\r\n sm: 'p-4',\r\n md: 'p-6',\r\n },\r\n /** Tıklanabilir/navigasyona giden kartlar için (ör. bir listedeki satır-kart) — hover'da hafif bir yükselme, kartın tıklanabilir olduğunu ima eder. Statik/salt-bilgi kartlarında (varsayılan `false`) KULLANILMAZ. */\r\n interactive: {\r\n true: 'transition-[box-shadow,transform] duration-fast ease-out hover:-translate-y-px hover:shadow-2',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { padding: 'md', interactive: false },\r\n});\r\n\r\nexport type CardPadding = VariantProps<typeof cardVariants>['padding'];\r\nexport type CardInteractive = VariantProps<typeof cardVariants>['interactive'];\r\n\r\n/**\r\n * `CardHeader`/`CardBody`/`CardFooter`'ın paylaştığı dolgu ölçeği — `Card`'ın\r\n * kendi `padding` ekseniyle AYNI üç basamak. Alt parçalar kullanılırken dış\r\n * `mfCard`'ın `padding=\"none\"` olması BEKLENİR (aksi halde dolgu iki katmanda\r\n * çakışır) — bu, çağıranın sorumluluğunda (bkz. `Field`'ın `for`/id\r\n * eşleşmesiyle aynı desen, `field.ts`'teki not).\r\n */\r\nexport const cardSectionPadding: Record<NonNullable<CardPadding>, string> = {\r\n none: '',\r\n sm: 'p-4',\r\n md: 'p-6',\r\n};\r\n","import { Directive, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { cardVariants, type CardInteractive, type CardPadding } from './card.variants';\r\n\r\n/** `<div mfCard padding=\"md\" [interactive]=\"true\">...</div>` — `interactive` tıklanabilir/navigasyona giden kartlar için hover'da hafif bir yükselme ekler. */\r\n@Directive({\r\n selector: '[mfCard]',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class Card {\r\n readonly padding = input<CardPadding>('md');\r\n readonly interactive = input<CardInteractive>(false);\r\n protected readonly classes = computed(() =>\r\n cn(cardVariants({ padding: this.padding(), interactive: this.interactive() })),\r\n );\r\n}\r\n","import { Directive, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { cardSectionPadding, type CardPadding } from './card.variants';\r\n\r\n/** `<div mfCardBody>...</div>` — bkz. `CardHeader`'ın JSDoc'u. */\r\n@Directive({\r\n selector: '[mfCardBody]',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class CardBody {\r\n readonly padding = input<CardPadding>('md');\r\n\r\n protected readonly classes = computed(() => cn(cardSectionPadding[this.padding() ?? 'md']));\r\n}\r\n","import { Directive, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { cardSectionPadding, type CardPadding } from './card.variants';\r\n\r\n/**\r\n * `<div mfCardFooter bordered>...</div>` — bkz. `CardHeader`'ın JSDoc'u.\r\n * Aksiyon düğmeleri için sağa yaslanmış bir satır varsayar (`justify-end`).\r\n */\r\n@Directive({\r\n selector: '[mfCardFooter]',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class CardFooter {\r\n readonly padding = input<CardPadding>('md');\r\n readonly bordered = input(false);\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n 'flex items-center justify-end gap-2',\r\n cardSectionPadding[this.padding() ?? 'md'],\r\n this.bordered() && 'border-t border-border',\r\n ),\r\n );\r\n}\r\n","import { Directive, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { cardSectionPadding, type CardPadding } from './card.variants';\r\n\r\n/**\r\n * `<div mfCard padding=\"none\"><div mfCardHeader bordered>...</div>...</div>`\r\n * — bkz. `cardSectionPadding`'in JSDoc'u (dış `mfCard`'ın `padding=\"none\"`\r\n * olması beklenir). `bordered` alttaki içerikten ayıran bir `border-b` ekler\r\n * — tek başlık kartlarında (alt parça yok) gereksiz, o yüzden varsayılan `false`.\r\n */\r\n@Directive({\r\n selector: '[mfCardHeader]',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class CardHeader {\r\n readonly padding = input<CardPadding>('md');\r\n readonly bordered = input(false);\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n 'flex items-start justify-between gap-3',\r\n cardSectionPadding[this.padding() ?? 'md'],\r\n this.bordered() && 'border-b border-border',\r\n ),\r\n );\r\n}\r\n","/**\r\n * Kategorik grafik renkleri — `color.css`'in `--mf-chart-1..8` rol token'larına SABİT sıralı\r\n * referans (dataviz doktrini: \"Assign categorical hues in fixed order, never cycled\"). Sekiz\r\n * slotun sırası CVD güvenlik mekanizmasıdır (bkz. color.css yorumu — `validate_palette.js` ile\r\n * iki modda doğrulandı); 9. ve sonraki seriler ASLA döngüye girip 1. seriyle aynı rengi almaz,\r\n * nötr \"Diğer\" (`chart-other`) rengine düşer — tüketici o serileri tek bir \"Diğer\"de toplamalı\r\n * veya küçük çoklulara bölmeli.\r\n *\r\n * Renk VARLIĞI izler, sırasını DEĞİL: bir filtre seri sayısını değiştirdiğinde kalan seriler\r\n * yeniden boyanmasın diye tüketici `slot`'u varlığa bağlı SABİT bir değerden türetmeli (ör. seri\r\n * tanımındaki `colorIndex`), o anki dizideki pozisyondan değil.\r\n *\r\n * Class isimleri TAM/LİTERAL string — Tailwind'in JIT tarayıcısı çalışma zamanında birleştirilen\r\n * (`` `fill-chart-${n}` ``) isimleri göremez. Tema utility'leri (`fill-chart-1`) değeri\r\n * `var(--mf-chart-1)` olarak GÖMER — `--color-chart-*` takma adının `:root`'tan budanmasından\r\n * etkilenmez (bkz. color.css / `docs/tr/mimari.md` \"@theme inline\" notu).\r\n */\r\nexport const MF_CHART_SLOT_COUNT = 8;\r\n\r\nconst FILL = [\r\n 'fill-chart-1',\r\n 'fill-chart-2',\r\n 'fill-chart-3',\r\n 'fill-chart-4',\r\n 'fill-chart-5',\r\n 'fill-chart-6',\r\n 'fill-chart-7',\r\n 'fill-chart-8',\r\n] as const;\r\n\r\nconst STROKE = [\r\n 'stroke-chart-1',\r\n 'stroke-chart-2',\r\n 'stroke-chart-3',\r\n 'stroke-chart-4',\r\n 'stroke-chart-5',\r\n 'stroke-chart-6',\r\n 'stroke-chart-7',\r\n 'stroke-chart-8',\r\n] as const;\r\n\r\nconst BG = [\r\n 'bg-chart-1',\r\n 'bg-chart-2',\r\n 'bg-chart-3',\r\n 'bg-chart-4',\r\n 'bg-chart-5',\r\n 'bg-chart-6',\r\n 'bg-chart-7',\r\n 'bg-chart-8',\r\n] as const;\r\n\r\nfunction slotClass(classes: readonly string[], other: string, slot: number): string {\r\n return Number.isInteger(slot) && slot >= 0 && slot < classes.length ? classes[slot] : other;\r\n}\r\n\r\n/** SVG dolgu (bar/alan/nokta). `slot` 0 tabanlı; 0-7 dışı → \"Diğer\". */\r\nexport function chartFillClass(slot: number): string {\r\n return slotClass(FILL, 'fill-chart-other', slot);\r\n}\r\n\r\n/** SVG çizgi (line/sparkline). `slot` 0 tabanlı; 0-7 dışı → \"Diğer\". */\r\nexport function chartStrokeClass(slot: number): string {\r\n return slotClass(STROKE, 'stroke-chart-other', slot);\r\n}\r\n\r\n/** HTML zemin (lejant/tooltip anahtarı, BarList çubuğu). `slot` 0 tabanlı; 0-7 dışı → \"Diğer\". */\r\nexport function chartBgClass(slot: number): string {\r\n return slotClass(BG, 'bg-chart-other', slot);\r\n}\r\n","/**\r\n * \"Temiz\" eksen işaretleri — dataviz: y ekseni işaretleri yuvarlak sayılara oturur (0 / 250 /\r\n * 500, asla 0 / 237 / 474). Heckbert'in \"nice numbers\" algoritması: aralığı 1/2/5 × 10^n\r\n * adımlarına yuvarlar, dönen ilk/son işaret ölçeğin alt/üst sınırı olur (veri onların İÇİNDE).\r\n * Tüm değerler aynıysa (ör. hepsi 0) ölçek çökmesin diye aralık 1 birim açılır.\r\n */\r\nexport function niceTicks(min: number, max: number, count = 4): number[] {\r\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\r\n if (min === max) {\r\n if (min === 0) return [0, 1];\r\n min = Math.min(0, min);\r\n max = Math.max(0, max);\r\n }\r\n\r\n const span = niceNumber(max - min, false);\r\n const step = niceNumber(span / Math.max(1, count), true);\r\n const start = Math.floor(min / step) * step;\r\n const end = Math.ceil(max / step) * step;\r\n\r\n const ticks: number[] = [];\r\n for (let value = start; value <= end + step / 2; value += step) {\r\n // Kayan nokta birikimini temizle (0.30000000000000004 → 0.3).\r\n ticks.push(Number(value.toPrecision(12)));\r\n }\r\n return ticks;\r\n}\r\n\r\nfunction niceNumber(range: number, round: boolean): number {\r\n const exponent = Math.floor(Math.log10(range));\r\n const fraction = range / 10 ** exponent;\r\n let nice: number;\r\n if (round) {\r\n nice = fraction < 1.5 ? 1 : fraction < 3 ? 2 : fraction < 7 ? 5 : 10;\r\n } else {\r\n nice = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\r\n }\r\n return nice * 10 ** exponent;\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { chartFillClass } from './chart-colors';\r\n\r\nexport interface BarChartPoint {\r\n label: string;\r\n value: number;\r\n}\r\n\r\ninterface BarChartBar extends BarChartPoint {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n squareFootY: number;\r\n squareFootHeight: number;\r\n labelY: number;\r\n}\r\n\r\nconst PLOT_WIDTH = 300;\r\nconst PLOT_HEIGHT = 80;\r\nconst BASELINE_Y = 96;\r\nconst VIEW_HEIGHT = 132;\r\nconst MAX_BAR_WIDTH = 24;\r\n/** dataviz \"4px rounded data-end, square at the baseline\" — üstü yuvarlak tam boy dikdörtgen + tabana yapışık düz bir dikdörtgen üst üste, alt köşeleri KARELER. */\r\nconst SQUARE_FOOT = 4;\r\n\r\n/**\r\n * `<mf-bar-chart [points]=\"monthly\" [ariaLabel]=\"'Son 6 ayda katılan üyeler'\" />`\r\n *\r\n * Tek seri, elle yazılmış inline SVG — grafik kütüphanesi eklenmedi (bu kitin\r\n * \"npm paketi olmayan, kaynağı elinde\" doktrini). Tek seri olduğu için LEJANT yok (dataviz doktrini: \"a single\r\n * series needs no legend box\"), değerler her çubuğun tepesinde DOĞRUDAN etiketlenir (6 nokta —\r\n * \"her noktayı etiketleme\" uyarısının kapsamı yoğun serilere yönelik, 6 noktada tamamı okunabilir).\r\n */\r\n@Component({\r\n selector: 'mf-bar-chart',\r\n host: { class: 'block' },\r\n templateUrl: './bar-chart.html',\r\n})\r\nexport class BarChart {\r\n readonly points = input.required<BarChartPoint[]>();\r\n readonly ariaLabel = input('');\r\n readonly valueFormatter = input<(value: number) => string>((value) => `${value}`);\r\n\r\n protected readonly viewBox = `0 0 ${PLOT_WIDTH} ${VIEW_HEIGHT}`;\r\n protected readonly baselineY = BASELINE_Y;\r\n protected readonly fillClass = chartFillClass(0);\r\n\r\n protected readonly bars = computed<BarChartBar[]>(() => {\r\n const points = this.points();\r\n if (points.length === 0) return [];\r\n\r\n const max = Math.max(1, ...points.map((point) => point.value));\r\n const slotWidth = PLOT_WIDTH / points.length;\r\n const width = Math.min(MAX_BAR_WIDTH, slotWidth * 0.5);\r\n\r\n return points.map((point, index) => {\r\n const height = (point.value / max) * PLOT_HEIGHT;\r\n const squareFootHeight = Math.min(height, SQUARE_FOOT);\r\n return {\r\n ...point,\r\n width,\r\n x: index * slotWidth + (slotWidth - width) / 2,\r\n y: BASELINE_Y - height,\r\n height,\r\n squareFootY: BASELINE_Y - squareFootHeight,\r\n squareFootHeight,\r\n labelY: BASELINE_Y - height - 6,\r\n };\r\n });\r\n });\r\n}\r\n","@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\">—</p>\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { chartBgClass } from './chart-colors';\r\n\r\nexport interface BarListItem {\r\n label: string;\r\n value: number;\r\n /**\r\n * Opsiyonel SABİT kategorik slot (0-7) — aynı varlık (ör. 'Yönetici') başka bir grafikte de\r\n * aynı renkle görünsün isteniyorsa. Verilmezse satır tek serinin rengini (slot 0) alır.\r\n */\r\n colorIndex?: number;\r\n}\r\n\r\ninterface BarListRow extends BarListItem {\r\n percent: number;\r\n colorClass: string;\r\n}\r\n\r\n/**\r\n * `<mf-bar-list [items]=\"roleDistribution\" />`\r\n *\r\n * Yatay oranlı liste — TEK bir ölçünün nominal kategorileri: kimliği METİN etiketi, büyüklüğü bar\r\n * uzunluğu + sayı taşır. Bu yüzden bütün çubuklar TEK serinin rengini (slot 0) alır — dataviz\r\n * doktrini: nominal çubukları sıraya/değere göre renklendirmek, uzunluğun zaten gösterdiğini\r\n * renkle tekrar kodlar ve \"renk varlığı izler, sırasını değil\" kuralını çiğner (eskiden\r\n * pozisyona göre boyanıyordu — veri sırası değişince aynı rol başka renge bürünüyordu).\r\n * Varlığa kalıcı bir renk bağlamak için öğe başına `colorIndex`.\r\n */\r\n@Component({\r\n selector: 'mf-bar-list',\r\n host: { class: 'block' },\r\n template: `\r\n <ul class=\"m-0 flex list-none flex-col gap-3 p-0\">\r\n @for (row of rows(); track row.label) {\r\n <li class=\"flex items-center gap-3\">\r\n <span class=\"min-w-0 flex-1 truncate text-sm text-fg-muted\">{{ row.label }}</span>\r\n <div class=\"h-1.5 w-20 shrink-0 overflow-hidden rounded-full bg-surface-alt\">\r\n <div\r\n class=\"h-full rounded-full\"\r\n [class]=\"row.colorClass\"\r\n [style.width.%]=\"row.percent\"\r\n ></div>\r\n </div>\r\n <span class=\"w-8 shrink-0 text-end font-mono text-xs tabular-nums text-fg-subtle\">{{\r\n valueFormatter()(row.value)\r\n }}</span>\r\n </li>\r\n } @empty {\r\n <li class=\"text-sm text-fg-subtle\">—</li>\r\n }\r\n </ul>\r\n `,\r\n})\r\nexport class BarList {\r\n readonly items = input.required<BarListItem[]>();\r\n readonly valueFormatter = input<(value: number) => string>((value) => `${value}`);\r\n\r\n protected readonly rows = computed<BarListRow[]>(() => {\r\n const items = this.items();\r\n const max = Math.max(1, ...items.map((item) => item.value));\r\n return items.map((item) => ({\r\n ...item,\r\n percent: Math.round((item.value / max) * 100),\r\n colorClass: chartBgClass(item.colorIndex ?? 0),\r\n }));\r\n });\r\n}\r\n","import {\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { MF_CHART_LABELS, focusRecipe, overlaySurface } from '@mesgflow/ui-kit/core';\r\nimport { chartBgClass, chartFillClass, chartStrokeClass } from './chart-colors';\r\nimport { niceTicks } from './chart-scale';\r\n\r\nexport interface LineChartSeries {\r\n name: string;\r\n values: readonly number[];\r\n /**\r\n * SABİT kategorik slot (0-7). Renk VARLIĞI izlemeli — bir filtre seri sayısını değiştirince\r\n * kalan seriler yeniden boyanmasın diye kalıcı bir değer verin. Verilmezse dizideki pozisyon.\r\n */\r\n colorIndex?: number;\r\n}\r\n\r\ninterface PlotPoint {\r\n x: number;\r\n y: number;\r\n}\r\n\r\ninterface PlotSeries {\r\n name: string;\r\n values: readonly number[];\r\n points: PlotPoint[];\r\n path: string;\r\n areaPath: string;\r\n strokeClass: string;\r\n fillClass: string;\r\n keyClass: string;\r\n}\r\n\r\ninterface AxisTick {\r\n value: number;\r\n y: number;\r\n label: string;\r\n}\r\n\r\ninterface XLabel {\r\n x: number;\r\n text: string;\r\n anchor: 'start' | 'middle' | 'end';\r\n}\r\n\r\nconst PAD_TOP = 12;\r\nconst PAD_BOTTOM = 28;\r\nconst PAD_LEFT = 44;\r\nconst PAD_RIGHT = 16;\r\n/** Tek seride uç değer etiketi çizginin SAĞINA yazıldığı için ek boşluk. */\r\nconst PAD_RIGHT_END_LABEL = 52;\r\n/** `ResizeObserver` gelene kadar (SSR/jsdom/ilk kare) kullanılan genişlik. */\r\nconst FALLBACK_WIDTH = 600;\r\n/** X ekseni etiketleri arasındaki en küçük boşluk — sığmıyorsa etiketler seyreltilir. */\r\nconst X_LABEL_MIN_GAP = 56;\r\n\r\nconst defaultFormatter = (value: number) => new Intl.NumberFormat().format(value);\r\n\r\n/**\r\n * `<mf-line-chart [labels]=\"months\" [series]=\"series\" ariaLabel=\"Aylık aktif kullanıcı\" area />`\r\n *\r\n * Çok serili çizgi / alan grafiği — elle yazılmış SVG, grafik kütüphanesi YOK (kitin bağımlılık\r\n * politikası). Dataviz metoduna göre:\r\n * - 2px çizgi, yuvarlak birleşim; uç noktada ≥8px işaret + 2px yüzey halkası; alan dolgusu\r\n * serinin %10'u (doygun blok değil, \"yıkama\").\r\n * - Y ekseni temiz sayılara (`niceTicks`), ızgara 1px düz hairline; TEK eksen (çift y ekseni yok).\r\n * - ≥2 seride lejant HER ZAMAN var; tek seride lejant yok (başlık seriyi adlandırır), uç değer\r\n * çizginin ucunda doğrudan etiketlenir. Metin ASLA seri rengini taşımaz.\r\n * - Hover katmanı varsayılan: crosshair en yakın X'e oturur, TEK tooltip o X'teki TÜM serileri\r\n * listeler (değer önde/güçlü, seri adı ikincil, çizgi anahtarı). Klavyede aynı bilgi: odakta\r\n * ←/→/Home/End, `aria-live` ile okunur.\r\n * - Tooltip hiçbir değeri KAPILAMAZ: \"Tablo olarak göster\" ile aynı veri HTML tablosu olarak.\r\n *\r\n * Genişlik kapsayıcıdan (`ResizeObserver`) okunur ve çizim gerçek piksellerle yapılır — sabit\r\n * `viewBox` ölçeklemesinin aksine etiketler dar kartta küçülmez, çizgiler kalınlaşmaz.\r\n */\r\n@Component({\r\n selector: 'mf-line-chart',\r\n exportAs: 'mfLineChart',\r\n host: { class: 'block' },\r\n templateUrl: './line-chart.html',\r\n})\r\nexport class LineChart {\r\n readonly labels = input.required<readonly string[]>();\r\n readonly series = input.required<readonly LineChartSeries[]>();\r\n readonly ariaLabel = input.required<string>();\r\n readonly area = input(false, { transform: booleanAttribute });\r\n readonly height = input(220);\r\n readonly valueFormatter = input<(value: number) => string>(defaultFormatter);\r\n\r\n protected readonly i18n = inject(MF_CHART_LABELS);\r\n protected readonly focusRecipe = focusRecipe;\r\n protected readonly tooltipSurface = overlaySurface;\r\n\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n protected readonly width = signal(FALLBACK_WIDTH);\r\n protected readonly activeIndex = signal<number | null>(null);\r\n protected readonly tableView = signal(false);\r\n\r\n protected readonly single = computed(() => this.series().length === 1);\r\n protected readonly padRight = computed(() => (this.single() ? PAD_RIGHT_END_LABEL : PAD_RIGHT));\r\n protected readonly plotBottom = computed(() => this.height() - PAD_BOTTOM);\r\n protected readonly plotLeft = PAD_LEFT;\r\n protected readonly plotRight = computed(() => this.width() - this.padRight());\r\n\r\n private readonly domain = computed(() => {\r\n const all = this.series().flatMap((s) => s.values);\r\n if (all.length === 0) return [0, 1];\r\n return niceTicks(Math.min(0, ...all), Math.max(...all));\r\n });\r\n\r\n private readonly scaleY = computed(() => {\r\n const ticks = this.domain();\r\n const min = ticks[0];\r\n const max = ticks[ticks.length - 1];\r\n const top = PAD_TOP;\r\n const bottom = this.plotBottom();\r\n return (value: number) => bottom - ((value - min) / (max - min)) * (bottom - top);\r\n });\r\n\r\n private readonly scaleX = computed(() => {\r\n const count = this.labels().length;\r\n const left = PAD_LEFT;\r\n const plotWidth = Math.max(0, this.plotRight() - left);\r\n if (count <= 1) return () => left + plotWidth / 2;\r\n return (index: number) => left + (index * plotWidth) / (count - 1);\r\n });\r\n\r\n protected readonly yTicks = computed<AxisTick[]>(() => {\r\n const y = this.scaleY();\r\n const format = this.valueFormatter();\r\n return this.domain().map((value) => ({ value, y: y(value), label: format(value) }));\r\n });\r\n\r\n protected readonly xLabels = computed<XLabel[]>(() => {\r\n const labels = this.labels();\r\n const x = this.scaleX();\r\n const count = labels.length;\r\n const plotWidth = this.plotRight() - PAD_LEFT;\r\n const fit = Math.max(1, Math.floor(plotWidth / X_LABEL_MIN_GAP));\r\n const step = Math.max(1, Math.ceil(count / fit));\r\n return labels.flatMap((text, index) => {\r\n if (index % step !== 0) return [];\r\n const anchor: XLabel['anchor'] =\r\n count > 1 && index === 0 ? 'start' : count > 1 && index === count - 1 ? 'end' : 'middle';\r\n return [{ x: x(index), text, anchor }];\r\n });\r\n });\r\n\r\n /** Alan dolgusunun ve eksen çizgisinin oturduğu taban — 0 ölçekteyse 0, değilse alt sınır. */\r\n protected readonly baselineY = computed(() => {\r\n const ticks = this.domain();\r\n const zero = ticks[0] <= 0 && ticks[ticks.length - 1] >= 0 ? 0 : ticks[0];\r\n return this.scaleY()(zero);\r\n });\r\n\r\n protected readonly plotSeries = computed<PlotSeries[]>(() => {\r\n const x = this.scaleX();\r\n const y = this.scaleY();\r\n const base = this.baselineY();\r\n return this.series().map((s, index) => {\r\n const slot = s.colorIndex ?? index;\r\n const points = s.values.map((value, i) => ({ x: x(i), y: y(value) }));\r\n const path = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`).join(' ');\r\n const first = points[0];\r\n const last = points[points.length - 1];\r\n const areaPath = points.length > 1 ? `${path} L${last.x} ${base} L${first.x} ${base} Z` : '';\r\n return {\r\n name: s.name,\r\n values: s.values,\r\n points,\r\n path,\r\n areaPath,\r\n strokeClass: chartStrokeClass(slot),\r\n fillClass: chartFillClass(slot),\r\n keyClass: chartBgClass(slot),\r\n };\r\n });\r\n });\r\n\r\n protected readonly activeX = computed(() => {\r\n const index = this.activeIndex();\r\n return index === null ? null : this.scaleX()(index);\r\n });\r\n\r\n /** Tooltip crosshair'in sağında; grafiğin sağ yarısındaysa taşmasın diye solunda. */\r\n protected readonly tooltipStyle = computed(() => {\r\n const x = this.activeX();\r\n if (x === null) return null;\r\n return x > this.width() / 2 ? { right: `${this.width() - x + 12}px` } : { left: `${x + 12}px` };\r\n });\r\n\r\n protected readonly readout = computed(() => {\r\n const index = this.activeIndex();\r\n if (index === null) return null;\r\n const format = this.valueFormatter();\r\n return {\r\n label: this.labels()[index] ?? '',\r\n rows: this.plotSeries().map((s) => ({\r\n name: s.name,\r\n keyClass: s.keyClass,\r\n value: s.values[index] === undefined ? '—' : format(s.values[index]),\r\n })),\r\n };\r\n });\r\n\r\n protected readonly liveText = computed(() => {\r\n const readout = this.readout();\r\n if (!readout) return '';\r\n return `${readout.label}: ${readout.rows.map((r) => `${r.name} ${r.value}`).join(', ')}`;\r\n });\r\n\r\n protected readonly tableRows = computed(() => {\r\n const format = this.valueFormatter();\r\n return this.labels().map((label, index) => ({\r\n label,\r\n values: this.series().map((s) =>\r\n s.values[index] === undefined ? '—' : format(s.values[index]),\r\n ),\r\n }));\r\n });\r\n\r\n constructor() {\r\n const destroyRef = inject(DestroyRef);\r\n afterNextRender(() => {\r\n const host = this.elementRef.nativeElement;\r\n if (host.clientWidth > 0) this.width.set(host.clientWidth);\r\n if (typeof ResizeObserver === 'undefined') return;\r\n const observer = new ResizeObserver(([entry]) => {\r\n const next = Math.round(entry.contentRect.width);\r\n if (next > 0) this.width.set(next);\r\n });\r\n observer.observe(host);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n }\r\n\r\n protected toggleTable(): void {\r\n this.activeIndex.set(null);\r\n this.tableView.update((value) => !value);\r\n }\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n const count = this.labels().length;\r\n if (count === 0) return;\r\n const rect = (event.currentTarget as HTMLElement).getBoundingClientRect();\r\n const plotWidth = this.plotRight() - PAD_LEFT;\r\n const ratio = count <= 1 ? 0 : (event.clientX - rect.left - PAD_LEFT) / plotWidth;\r\n this.activeIndex.set(clamp(Math.round(ratio * (count - 1)), 0, count - 1));\r\n }\r\n\r\n protected onFocus(): void {\r\n if (this.activeIndex() === null && this.labels().length > 0) {\r\n this.activeIndex.set(this.labels().length - 1);\r\n }\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const count = this.labels().length;\r\n if (count === 0) return;\r\n const current = this.activeIndex() ?? count - 1;\r\n const next: Record<string, number | null> = {\r\n ArrowLeft: clamp(current - 1, 0, count - 1),\r\n ArrowRight: clamp(current + 1, 0, count - 1),\r\n Home: 0,\r\n End: count - 1,\r\n Escape: null,\r\n };\r\n if (!(event.key in next)) return;\r\n event.preventDefault();\r\n this.activeIndex.set(next[event.key]);\r\n }\r\n}\r\n\r\nfunction clamp(value: number, min: number, max: number): number {\r\n return Math.min(max, Math.max(min, value));\r\n}\r\n","<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","import { Component, booleanAttribute, computed, input } from '@angular/core';\r\n\r\nconst INSET = 4;\r\n\r\n/**\r\n * `<mf-sparkline [values]=\"last12\" ariaLabel=\"Son 12 ay: 120'den 184'e\" />`\r\n *\r\n * Eksensiz, etkileşimsiz trend glifi — StatTile'ın \"trend\" satırı (dataviz figür sözleşmesi:\r\n * çizgi geri planda kalan tonla, GÜNCEL dönem vurgu renginde). Değerin kendisi yanındaki metinde\r\n * yazdığı için hover katmanı YOK; `ariaLabel` verilmezse süs sayılır (`aria-hidden`).\r\n * Gerçek piksellerle çizilir (sabit `width`/`height`) — `viewBox` ölçeklemesi uç noktayı\r\n * elipse çevirirdi.\r\n */\r\n@Component({\r\n selector: 'mf-sparkline',\r\n host: { class: 'inline-block align-middle leading-none' },\r\n templateUrl: './sparkline.html',\r\n})\r\nexport class Sparkline {\r\n readonly values = input.required<readonly number[]>();\r\n readonly ariaLabel = input('');\r\n readonly width = input(96);\r\n readonly height = input(28);\r\n readonly area = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly geometry = computed(() => {\r\n const values = this.values();\r\n const width = this.width();\r\n const height = this.height();\r\n if (values.length === 0) return { line: '', area: '', end: null };\r\n\r\n const min = Math.min(...values);\r\n const max = Math.max(...values);\r\n const span = max - min || 1;\r\n const stepX = values.length > 1 ? (width - INSET * 2) / (values.length - 1) : 0;\r\n const points = values.map((value, index) => ({\r\n x: values.length > 1 ? INSET + index * stepX : width / 2,\r\n y: height - INSET - ((value - min) / span) * (height - INSET * 2),\r\n }));\r\n const line = points.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`).join(' ');\r\n const first = points[0];\r\n const end = points[points.length - 1];\r\n const area = points.length > 1 ? `${line} L${end.x} ${height} L${first.x} ${height} Z` : '';\r\n return { line, area, end };\r\n });\r\n}\r\n","<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","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","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","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","import {\r\n Component,\r\n Directive,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n} from '@angular/core';\r\n\r\nlet collapsibleIdSeq = 0;\r\n\r\n/**\r\n * `<mf-collapsible [(open)]=\"advanced\">\r\n * <button mfButton mfCollapsibleTrigger>Gelişmiş ayarlar</button>\r\n * <mf-collapsible-content>…</mf-collapsible-content>\r\n * </mf-collapsible>`\r\n *\r\n * Tek bir aç/kapa bölümü (WAI-ARIA \"disclosure\"). Birden çok bölüm ve \"yalnızca biri açık\"\r\n * kuralı için `Accordion`. Tetikleyici herhangi bir `<button>` — görünümü tüketicide.\r\n */\r\n@Component({\r\n selector: 'mf-collapsible',\r\n exportAs: 'mfCollapsible',\r\n host: { class: 'block', '[attr.data-state]': \"open() ? 'open' : 'closed'\" },\r\n template: '<ng-content />',\r\n})\r\nexport class Collapsible {\r\n readonly open = model(false);\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n readonly contentId = `mf-collapsible-${++collapsibleIdSeq}`;\r\n\r\n toggle(): void {\r\n if (!this.disabled()) this.open.update((open) => !open);\r\n }\r\n}\r\n\r\n/** `button[mfCollapsibleTrigger]` — `aria-expanded`/`aria-controls` bağlı; bkz. `Collapsible`. */\r\n@Directive({\r\n selector: 'button[mfCollapsibleTrigger]',\r\n exportAs: 'mfCollapsibleTrigger',\r\n host: {\r\n '[attr.aria-expanded]': 'collapsible.open()',\r\n '[attr.aria-controls]': 'collapsible.contentId',\r\n '[attr.data-state]': \"collapsible.open() ? 'open' : 'closed'\",\r\n '[disabled]': 'collapsible.disabled()',\r\n '(click)': 'collapsible.toggle()',\r\n },\r\n})\r\nexport class CollapsibleTrigger {\r\n protected readonly collapsible = inject(Collapsible);\r\n}\r\n\r\n/**\r\n * Yükseklik `grid-template-rows: 0fr → 1fr` ile animasyonlanır — içerik yüksekliği ölçülmez\r\n * (JS yok, içerik sonradan büyüse de doğru). Kapalıyken `inert`: içindeki odaklanabilir öğeler\r\n * sekme sırasından ve erişilebilirlik ağacından çıkar (yalnızca `height: 0` bunu yapmazdı).\r\n * `prefers-reduced-motion`'da geçiş süresi tokens/motion.css'teki genel kuralla sıfırlanır.\r\n */\r\n@Component({\r\n selector: 'mf-collapsible-content',\r\n exportAs: 'mfCollapsibleContent',\r\n host: {\r\n '[id]': 'collapsible.contentId',\r\n '[attr.inert]': 'collapsible.open() ? null : \"\"',\r\n '[attr.data-state]': \"collapsible.open() ? 'open' : 'closed'\",\r\n '[class]': 'classes()',\r\n },\r\n template: '<div class=\"min-h-0 overflow-hidden\"><ng-content /></div>',\r\n})\r\nexport class CollapsibleContent {\r\n protected readonly collapsible = inject(Collapsible);\r\n\r\n protected readonly classes = computed(\r\n () =>\r\n 'grid transition-[grid-template-rows,opacity] duration-base ease-emphasis ' +\r\n (this.collapsible.open() ? 'grid-rows-[1fr] opacity-100' : 'grid-rows-[0fr] opacity-0'),\r\n );\r\n}\r\n","export interface Hsv {\r\n h: number; // 0-360\r\n s: number; // 0-100\r\n v: number; // 0-100\r\n}\r\n\r\nexport interface Rgb {\r\n r: number;\r\n g: number;\r\n b: number;\r\n}\r\n\r\nexport function hexToRgb(hex: string): Rgb | null {\r\n const match = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex.trim());\r\n if (!match) return null;\r\n return { r: parseInt(match[1], 16), g: parseInt(match[2], 16), b: parseInt(match[3], 16) };\r\n}\r\n\r\nexport function rgbToHex({ r, g, b }: Rgb): string {\r\n const toHex = (n: number) =>\r\n Math.round(Math.min(255, Math.max(0, n)))\r\n .toString(16)\r\n .padStart(2, '0');\r\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\r\n}\r\n\r\nexport function rgbToHsv({ r, g, b }: Rgb): Hsv {\r\n const rn = r / 255;\r\n const gn = g / 255;\r\n const bn = b / 255;\r\n const max = Math.max(rn, gn, bn);\r\n const min = Math.min(rn, gn, bn);\r\n const delta = max - min;\r\n\r\n let h = 0;\r\n if (delta !== 0) {\r\n if (max === rn) h = 60 * (((gn - bn) / delta) % 6);\r\n else if (max === gn) h = 60 * ((bn - rn) / delta + 2);\r\n else h = 60 * ((rn - gn) / delta + 4);\r\n }\r\n if (h < 0) h += 360;\r\n\r\n const s = max === 0 ? 0 : (delta / max) * 100;\r\n const v = max * 100;\r\n\r\n return { h, s, v };\r\n}\r\n\r\nexport function hsvToRgb({ h, s, v }: Hsv): Rgb {\r\n const sn = s / 100;\r\n const vn = v / 100;\r\n const c = vn * sn;\r\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\r\n const m = vn - c;\r\n\r\n let rp: number;\r\n let gp: number;\r\n let bp: number;\r\n if (h < 60) [rp, gp, bp] = [c, x, 0];\r\n else if (h < 120) [rp, gp, bp] = [x, c, 0];\r\n else if (h < 180) [rp, gp, bp] = [0, c, x];\r\n else if (h < 240) [rp, gp, bp] = [0, x, c];\r\n else if (h < 300) [rp, gp, bp] = [x, 0, c];\r\n else [rp, gp, bp] = [c, 0, x];\r\n\r\n return { r: (rp + m) * 255, g: (gp + m) * 255, b: (bp + m) * 255 };\r\n}\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n ElementRef,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { cn, MF_COLOR_PICKER_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { hexToRgb, hsvToRgb, rgbToHex, rgbToHsv, type Hsv } from './color';\r\n\r\ninterface EyeDropperResult {\r\n sRGBHex: string;\r\n}\r\n\r\ninterface EyeDropperApi {\r\n open(): Promise<EyeDropperResult>;\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n EyeDropper?: new () => EyeDropperApi;\r\n }\r\n}\r\n\r\n/**\r\n * `<mf-color-picker [(value)]=\"brandColor\" [palette]=\"brandPalette\" />` —\r\n * HSV alanı + hue slider + hex girdi + marka paleti + (destekleniyorsa)\r\n * `EyeDropper` API. `@angular/aria`'da hazır bir color-picker pattern'i YOK\r\n * — HSV alanı ve hue slider'ı `Slider`'daki AYNI hand-rolled pointer/klavye\r\n * yaklaşımıyla kuruldu. Overlay pozisyonlaması `Select`'in kanıtlanmış\r\n * `cdkConnectedOverlay` deseni.\r\n */\r\n@Component({\r\n selector: 'mf-color-picker',\r\n exportAs: 'mfColorPicker',\r\n host: { class: 'inline-flex' },\r\n imports: [OverlayModule, Icon, Popover],\r\n templateUrl: './color-picker.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ColorPicker), multi: true },\r\n ],\r\n})\r\nexport class ColorPicker implements ControlValueAccessor {\r\n /** Varsayılan — kitin kendi marka rengi (`--color-primary-600`, bkz. tokens/color.css) — jenerik bir Tailwind yeşili DEĞİL. */\r\n readonly value = model('#004d40');\r\n readonly palette = input<string[]>([]);\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input<string>();\r\n\r\n private onChange: (value: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected readonly colorPickerLabels = inject(MF_COLOR_PICKER_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.colorPickerLabels().ariaLabel,\r\n );\r\n\r\n protected readonly open = signal(false);\r\n protected readonly hexDraft = signal('');\r\n\r\n protected readonly areaEl = viewChild<ElementRef<HTMLElement>>('area');\r\n protected readonly hueTrackEl = viewChild<ElementRef<HTMLElement>>('hueTrack');\r\n\r\n protected readonly hsv = computed<Hsv>(() =>\r\n rgbToHsv(hexToRgb(this.value()) ?? { r: 0, g: 0, b: 0 }),\r\n );\r\n\r\n protected readonly areaBackground = computed(\r\n () =>\r\n `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, transparent), hsl(${this.hsv().h}, 100%, 50%)`,\r\n );\r\n\r\n protected readonly supportsEyeDropper = typeof window !== 'undefined' && !!window.EyeDropper;\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value || '#000000');\r\n }\r\n\r\n registerOnChange(fn: (value: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n protected toggle(): void {\r\n if (this.disabled()) return;\r\n this.hexDraft.set(this.value());\r\n this.open.update((v) => !v);\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.onTouched();\r\n }\r\n\r\n private setHsv(next: Partial<Hsv>): void {\r\n const hex = rgbToHex(hsvToRgb({ ...this.hsv(), ...next }));\r\n this.value.set(hex);\r\n this.hexDraft.set(hex);\r\n this.onChange(hex);\r\n }\r\n\r\n protected onAreaPointerDown(event: PointerEvent): void {\r\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n this.updateFromAreaPointer(event);\r\n }\r\n\r\n protected onAreaPointerMove(event: PointerEvent): void {\r\n if (event.buttons !== 1) return;\r\n this.updateFromAreaPointer(event);\r\n }\r\n\r\n private updateFromAreaPointer(event: PointerEvent): void {\r\n const rect = this.areaEl()?.nativeElement.getBoundingClientRect();\r\n if (!rect) return;\r\n const s = Math.min(100, Math.max(0, ((event.clientX - rect.left) / rect.width) * 100));\r\n const v = Math.min(100, Math.max(0, 100 - ((event.clientY - rect.top) / rect.height) * 100));\r\n this.setHsv({ s, v });\r\n }\r\n\r\n protected onHuePointerDown(event: PointerEvent): void {\r\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n this.updateFromHuePointer(event);\r\n }\r\n\r\n protected onHuePointerMove(event: PointerEvent): void {\r\n if (event.buttons !== 1) return;\r\n this.updateFromHuePointer(event);\r\n }\r\n\r\n private updateFromHuePointer(event: PointerEvent): void {\r\n const rect = this.hueTrackEl()?.nativeElement.getBoundingClientRect();\r\n if (!rect) return;\r\n const h = Math.min(360, Math.max(0, ((event.clientX - rect.left) / rect.width) * 360));\r\n this.setHsv({ h });\r\n }\r\n\r\n protected onHexInput(raw: string): void {\r\n this.hexDraft.set(raw);\r\n const rgb = hexToRgb(raw);\r\n if (rgb) {\r\n const hex = rgbToHex(rgb);\r\n this.value.set(hex);\r\n this.onChange(hex);\r\n }\r\n }\r\n\r\n protected selectPaletteColor(hex: string): void {\r\n this.value.set(hex);\r\n this.hexDraft.set(hex);\r\n this.onChange(hex);\r\n }\r\n\r\n protected async pickWithEyeDropper(): Promise<void> {\r\n if (!window.EyeDropper) return;\r\n try {\r\n const result = await new window.EyeDropper().open();\r\n this.value.set(result.sRGBHex);\r\n this.hexDraft.set(result.sRGBHex);\r\n this.onChange(result.sRGBHex);\r\n } catch {\r\n // Kullanıcı Escape ile iptal etti — sessizce yut, gerçek bir hata değil.\r\n }\r\n }\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n 'flex aspect-square h-control-md shrink-0 items-center justify-center rounded-md border border-border shadow-control transition-colors duration-fast ease-emphasis ' +\r\n 'hover:border-border-strong focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n (this.disabled() ? 'pointer-events-none cursor-not-allowed opacity-50' : 'cursor-pointer'),\r\n ),\r\n );\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"classes()\"\r\n [style.background]=\"disabled() ? null : value()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [attr.aria-expanded]=\"open()\"\r\n (click)=\"toggle()\"\r\n></button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-56\"\r\n (closed)=\"close()\"\r\n>\r\n <div\r\n #area\r\n class=\"relative h-32 w-full cursor-crosshair touch-none rounded-md\"\r\n [style.background]=\"areaBackground()\"\r\n (pointerdown)=\"onAreaPointerDown($event)\"\r\n (pointermove)=\"onAreaPointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface shadow-control\"\r\n [style.left.%]=\"hsv().s\"\r\n [style.top.%]=\"100 - hsv().v\"\r\n ></div>\r\n </div>\r\n\r\n <div\r\n #hueTrack\r\n class=\"relative mt-3 h-3 w-full touch-none rounded-full\"\r\n style=\"background: linear-gradient(to right, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)\"\r\n (pointerdown)=\"onHuePointerDown($event)\"\r\n (pointermove)=\"onHuePointerMove($event)\"\r\n >\r\n <div\r\n class=\"pointer-events-none absolute top-1/2 h-4 w-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface bg-surface shadow-control\"\r\n [style.left.%]=\"(hsv().h / 360) * 100\"\r\n ></div>\r\n </div>\r\n\r\n <div class=\"mt-3 flex items-center gap-2\">\r\n <input\r\n type=\"text\"\r\n class=\"min-h-8 w-full rounded-md border border-border bg-surface px-2 py-1 text-sm text-fg shadow-control focus:border-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [value]=\"hexDraft()\"\r\n (input)=\"onHexInput($any($event.target).value)\"\r\n [attr.aria-label]=\"colorPickerLabels().hexAriaLabel\"\r\n />\r\n @if (supportsEyeDropper) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-md border border-border text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-surface-alt hover:text-fg\"\r\n (click)=\"pickWithEyeDropper()\"\r\n [attr.aria-label]=\"colorPickerLabels().pickFromScreenAriaLabel\"\r\n >\r\n <span mfIcon [size]=\"16\">colorize</span>\r\n </button>\r\n }\r\n </div>\r\n\r\n @if (palette().length > 0) {\r\n <div class=\"mt-3 flex flex-wrap gap-1.5\">\r\n @for (color of palette(); track color) {\r\n <button\r\n type=\"button\"\r\n class=\"h-6 w-6 rounded-sm border border-border transition-transform duration-fast hover:scale-110 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-focus-ring\"\r\n [style.background]=\"color\"\r\n [attr.aria-label]=\"color\"\r\n (click)=\"selectPaletteColor(color)\"\r\n ></button>\r\n }\r\n </div>\r\n }\r\n</mf-popover>\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/** `Select`'in trigger/option görsel diliyle AYNI — bkz. select.variants.ts / `core/recipes.ts`. */\r\nexport const comboboxTriggerVariants = cva(\r\n 'w-full rounded-md border border-border bg-surface pe-9 text-sm text-fg shadow-control ' +\r\n 'transition-colors duration-fast ease-emphasis placeholder:text-fg-subtle ' +\r\n 'hover:border-border-strong ' +\r\n 'focus:border-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n 'disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:hover:border-border',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'min-h-(--control-h-sm) px-2.5 py-1',\r\n md: 'min-h-(--control-h-md) px-3 py-1.5',\r\n lg: 'min-h-(--control-h-lg) px-3.5 py-2 text-base',\r\n },\r\n hasError: {\r\n true: 'border-danger focus:border-danger focus-visible:outline-danger',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { size: 'md', hasError: false },\r\n },\r\n);\r\n\r\nexport type ComboboxSize = VariantProps<typeof comboboxTriggerVariants>['size'];\r\nexport type ComboboxHasError = VariantProps<typeof comboboxTriggerVariants>['hasError'];\r\n\r\nexport const comboboxOptionVariants = cva(\r\n 'flex cursor-pointer items-center justify-between gap-2 rounded-sm px-2.5 py-1.5 text-fg-muted transition-colors duration-fast ease-emphasis',\r\n {\r\n variants: {\r\n highlighted: {\r\n true: 'bg-surface-alt',\r\n false: '',\r\n },\r\n selected: {\r\n true: 'bg-primary-tint text-primary-tint-fg',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { highlighted: false, selected: false },\r\n },\r\n);\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, forwardRef, inject, input, model, signal } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { cn, MF_COMBOBOX_LABELS, type MfSize } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { comboboxOptionVariants, comboboxTriggerVariants } from './combobox.variants';\r\n\r\nexport interface ComboboxOption<T> {\r\n label: string;\r\n value: T;\r\n}\r\n\r\nlet comboboxIdSeq = 0;\r\n\r\n/**\r\n * `<mf-combobox [options]=\"opts\" [(value)]=\"chosen\" placeholder=\"Ara...\" />`\r\n *\r\n * `Select`'in (bkz. select.ts) genişletilmiş hâli — filtrelenebilir/typeahead\r\n * seçim. `@angular/aria/combobox` + `@angular/aria/listbox` zincirini\r\n * KULLANMADI, bilinçli bir tercih: o zincir kendi popup pozisyonlamasını\r\n * taşımıyor (headless), `Select`'in ZATEN kanıtlanmış CDK Overlay + elle ARIA\r\n * deseni (highlighted index, `role=\"listbox\"`/`role=\"option\"`) buraya\r\n * genişletmek, dört ayrı directive'i (Combobox/ComboboxPopup/ComboboxWidget/\r\n * Listbox/Option) doğru sırayla bağlamaktan daha az riskli.\r\n *\r\n * `(mousedown)=\"$event.preventDefault()\"` seçenek satırında ZORUNLU —\r\n * aksi halde input'un `blur`'ı `click`'ten ÖNCE tetiklenip paneli kapatır\r\n * (klasik combobox tuzağı).\r\n */\r\n@Component({\r\n selector: 'mf-combobox',\r\n exportAs: 'mfCombobox',\r\n host: { class: 'block' },\r\n imports: [OverlayModule, Icon, Popover],\r\n templateUrl: './combobox.html',\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Combobox), multi: true }],\r\n})\r\nexport class Combobox<T> implements ControlValueAccessor {\r\n readonly options = input.required<ComboboxOption<T>[]>();\r\n readonly value = model<T | null>(null);\r\n readonly placeholder = input<string>();\r\n readonly disabled = input(false);\r\n readonly size = input<MfSize>('md');\r\n readonly hasError = input(false);\r\n readonly ariaLabel = input('');\r\n\r\n private onChange: (value: T | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected readonly comboboxLabels = inject(MF_COMBOBOX_LABELS);\r\n protected readonly effectivePlaceholder = computed(\r\n () => this.placeholder() ?? this.comboboxLabels().placeholder,\r\n );\r\n\r\n protected readonly open = signal(false);\r\n protected readonly query = signal('');\r\n protected readonly highlighted = signal(0);\r\n\r\n protected readonly triggerClasses = computed(() =>\r\n cn(comboboxTriggerVariants({ size: this.size(), hasError: this.hasError() })),\r\n );\r\n /** ARIA 1.2 combobox deseni: input'un `aria-controls`'ü panel listbox'ına işaret etmeli. */\r\n protected readonly listboxId = `mf-combobox-listbox-${++comboboxIdSeq}`;\r\n\r\n protected readonly selectedLabel = computed(\r\n () => this.options().find((o) => o.value === this.value())?.label ?? '',\r\n );\r\n\r\n protected readonly filteredOptions = computed(() => {\r\n const q = this.query().trim().toLowerCase();\r\n if (!q) return this.options();\r\n return this.options().filter((o) => o.label.toLowerCase().includes(q));\r\n });\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n registerOnChange(fn: (value: T | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n protected onFocus(): void {\r\n if (this.disabled()) return;\r\n this.query.set('');\r\n this.highlighted.set(0);\r\n this.open.set(true);\r\n }\r\n\r\n protected onQueryInput(raw: string): void {\r\n this.query.set(raw);\r\n this.highlighted.set(0);\r\n if (!this.open()) this.open.set(true);\r\n }\r\n\r\n protected select(option: ComboboxOption<T>): void {\r\n this.value.set(option.value);\r\n this.onChange(option.value);\r\n this.close();\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.query.set('');\r\n this.onTouched();\r\n }\r\n\r\n protected isSelected(option: ComboboxOption<T>): boolean {\r\n return option.value === this.value();\r\n }\r\n\r\n protected optionClasses(option: ComboboxOption<T>, index: number): string {\r\n return cn(\r\n comboboxOptionVariants({\r\n highlighted: index === this.highlighted() && !this.isSelected(option),\r\n selected: this.isSelected(option),\r\n }),\r\n );\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const options = this.filteredOptions();\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.close();\r\n return;\r\n }\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n if (!this.open()) {\r\n this.open.set(true);\r\n return;\r\n }\r\n this.highlighted.update((i) => Math.min(options.length - 1, i + 1));\r\n return;\r\n }\r\n if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n this.highlighted.update((i) => Math.max(0, i - 1));\r\n return;\r\n }\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n const option = options[this.highlighted()];\r\n if (option) this.select(option);\r\n }\r\n }\r\n}\r\n","<div class=\"relative\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <input\r\n type=\"text\"\r\n role=\"combobox\"\r\n aria-autocomplete=\"list\"\r\n [class]=\"triggerClasses()\"\r\n [value]=\"open() ? query() : selectedLabel()\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-expanded]=\"open()\"\r\n [attr.aria-controls]=\"listboxId\"\r\n (focus)=\"onFocus()\"\r\n (input)=\"onQueryInput($any($event.target).value)\"\r\n (keydown)=\"onKeydown($event)\"\r\n (blur)=\"close()\"\r\n />\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 end-3 -translate-y-1/2 text-fg-subtle\"\r\n >unfold_more</span\r\n >\r\n</div>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [hasBackdrop]=\"false\"\r\n [matchTriggerWidth]=\"true\"\r\n (closed)=\"close()\"\r\n>\r\n <ul [id]=\"listboxId\" role=\"listbox\" class=\"max-h-64 min-w-[8rem] text-sm\">\r\n @for (option of filteredOptions(); track option.label; let i = $index) {\r\n <!--\r\n `role=\"option\"` satırları BİLEREK odaklanabilir değil — klavye gezinmesi\r\n input'un `(keydown)` işleyicisinde (yukarıda) merkezi olarak yönetiliyor\r\n (roving-highlight deseni); `(click)` yalnızca fare/dokunma için.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <li\r\n role=\"option\"\r\n [attr.aria-selected]=\"isSelected(option)\"\r\n [class]=\"optionClasses(option, i)\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(option)\"\r\n >\r\n <span class=\"truncate\">{{ option.label }}</span>\r\n @if (isSelected(option)) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n } @empty {\r\n <li class=\"px-2.5 py-3 text-center text-fg-subtle\">{{ comboboxLabels().noResults }}</li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n","/** `mf-command`'ın tek öğesi — `data` tüketicinin kendi yükü (rota, eylem kimliği vb.). */\r\nexport interface MfCommandItem<T = unknown> {\r\n /** Benzersiz — `@for` track anahtarı ve DOM kimliği buradan türer. */\r\n id: string;\r\n label: string;\r\n /** Aynı `group`'taki öğeler başlık altında toplanır; grup sırası = ilk görünme sırası. */\r\n group?: string;\r\n icon?: string;\r\n /** Etiketin yanında sönük ikincil metin (ör. yol, açıklama). Aranır ama vurgulanmaz. */\r\n hint?: string;\r\n /** Etikette geçmeyen eş anlamlılar (\"theme\" → \"Görünüm\"). */\r\n keywords?: readonly string[];\r\n /** Görsel kısayol yongaları (`['Ctrl', 'S']`) — kısayolu DİNLEMEZ, yalnızca gösterir. */\r\n shortcut?: readonly string[];\r\n disabled?: boolean;\r\n data?: T;\r\n}\r\n\r\n/** Etiketin görüntülenen parçaları — `match: true` olanlar vurgulanır. */\r\nexport interface MfCommandSegment {\r\n text: string;\r\n match: boolean;\r\n}\r\n\r\nexport interface MfCommandResult<T = unknown> {\r\n item: MfCommandItem<T>;\r\n score: number;\r\n segments: MfCommandSegment[];\r\n}\r\n\r\n/**\r\n * Tek karakteri karşılaştırma biçimine indirger — 1:1 uzunluk KORUNUR (vurgu aralıkları orijinal\r\n * etiket üzerinde doğrudan kullanılabilsin diye): küçük harf + aksan atma (\"Ö\"→\"o\", \"ç\"→\"c\") +\r\n * noktasız ı→i. Böylece \"ozel\" \"Özel\"i, \"ISIK\" \"ışık\"ı bulur — Türkçe klavyesiz yazan kullanıcı\r\n * için premium paletlerin (Linear, Raycast) beklenen davranışı.\r\n */\r\nfunction foldChar(char: string, locale: string | undefined): string {\r\n const lower = char.toLocaleLowerCase(locale);\r\n const stripped = lower.normalize('NFD').replace(/\\p{M}/gu, '');\r\n // Kod noktası bazında — `charAt` bir emoji'nin yarısını (UTF-16 vekil çifti) döndürürdü.\r\n const first = Array.from(stripped)[0] ?? Array.from(lower)[0] ?? char;\r\n return first === 'ı' ? 'i' : first;\r\n}\r\n\r\nexport function foldText(text: string, locale?: string): string {\r\n let out = '';\r\n for (const char of text) out += foldChar(char, locale);\r\n return out;\r\n}\r\n\r\nconst WORD_BOUNDARY = /[\\s\\-_/.:]/;\r\n\r\nfunction isWordStart(text: string, index: number): boolean {\r\n return index === 0 || WORD_BOUNDARY.test(text.charAt(index - 1));\r\n}\r\n\r\n/**\r\n * Alt-dizi (subsequence) eşleşmesi — her sorgu karakteri SIRAYLA bulunmalı. Kelime başına düşen\r\n * ve ardışık gelen karakterler ödüllendirilir (\"gs\" → \"**G**enel **S**ayfa\").\r\n * Eşleşme yoksa `null`.\r\n */\r\nfunction fuzzyMatch(text: string, query: string): { score: number; indices: number[] } | null {\r\n const indices: number[] = [];\r\n let score = 0;\r\n let from = 0;\r\n for (const char of query) {\r\n // Önce bir kelime başında aranır; yoksa ilk görünen konuma düşülür.\r\n let index = -1;\r\n for (let i = from; i < text.length; i++) {\r\n if (text.charAt(i) === char && isWordStart(text, i)) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n if (index === -1) index = text.indexOf(char, from);\r\n if (index === -1) return null;\r\n const previous = indices.at(-1);\r\n if (previous !== undefined && index === previous + 1) score += 3;\r\n if (isWordStart(text, index)) score += 2;\r\n indices.push(index);\r\n from = index + 1;\r\n }\r\n return { score, indices };\r\n}\r\n\r\nfunction toSegments(label: string, indices: readonly number[]): MfCommandSegment[] {\r\n const chars = Array.from(label);\r\n const hit = new Set(indices);\r\n const segments: MfCommandSegment[] = [];\r\n chars.forEach((char, i) => {\r\n const match = hit.has(i);\r\n const last = segments.at(-1);\r\n if (last && last.match === match) last.text += char;\r\n else segments.push({ text: char, match });\r\n });\r\n return segments;\r\n}\r\n\r\nfunction range(start: number, length: number): number[] {\r\n return Array.from({ length }, (_, i) => start + i);\r\n}\r\n\r\n/**\r\n * Puan basamakları (yüksek → düşük): tam etiket 1000 · etiket başı 800 · kelime başı 600 ·\r\n * etiket içi 400 · anahtar kelime / ipucu 200–300 · bulanık alt-dizi 100+. Aynı basamakta kısa\r\n * etiket öne geçer (daha \"tam\" eşleşme). Etiketi eşleşmeyen öğenin segmentleri vurgusuzdur.\r\n */\r\nexport function scoreCommand<T>(\r\n item: MfCommandItem<T>,\r\n foldedQuery: string,\r\n locale?: string,\r\n): MfCommandResult<T> | null {\r\n const plain: MfCommandSegment[] = [{ text: item.label, match: false }];\r\n if (!foldedQuery) return { item, score: 0, segments: plain };\r\n\r\n const label = foldText(item.label, locale);\r\n const brevity = Math.max(0, 50 - label.length);\r\n const queryLength = Array.from(foldedQuery).length;\r\n const at = label.indexOf(foldedQuery);\r\n if (at !== -1) {\r\n // `foldText` 1:1 olduğu için UTF-16 indeksi yerine kod noktası indeksine çevrilir.\r\n const start = Array.from(label.slice(0, at)).length;\r\n const base = label === foldedQuery ? 1000 : at === 0 ? 800 : isWordStart(label, at) ? 600 : 400;\r\n return {\r\n item,\r\n score: base + brevity,\r\n segments: toSegments(item.label, range(start, queryLength)),\r\n };\r\n }\r\n\r\n const extras = [...(item.keywords ?? []), item.hint ?? ''].map((text) => foldText(text, locale));\r\n if (extras.some((text) => text.startsWith(foldedQuery)))\r\n return { item, score: 300, segments: plain };\r\n if (extras.some((text) => text.includes(foldedQuery)))\r\n return { item, score: 200, segments: plain };\r\n\r\n const fuzzy = fuzzyMatch(label, foldedQuery);\r\n if (!fuzzy) return null;\r\n const chars = Array.from(label);\r\n const indices = fuzzy.indices.map((i) => Array.from(label.slice(0, i)).length);\r\n return {\r\n item,\r\n score: 100 + fuzzy.score + Math.max(0, 50 - chars.length) / 10,\r\n segments: toSegments(item.label, indices),\r\n };\r\n}\r\n\r\n/**\r\n * Boş sorguda öğeler verildiği sırada döner; doluyken puana göre (eşitlikte verilen sıra —\r\n * `Array.prototype.sort` kararlı) sıralanır ve ilk `limit` tutulur.\r\n */\r\nexport function filterCommands<T>(\r\n items: readonly MfCommandItem<T>[],\r\n query: string,\r\n options: { limit?: number; locale?: string } = {},\r\n): MfCommandResult<T>[] {\r\n const { limit = Infinity, locale } = options;\r\n const folded = foldText(query.trim(), locale);\r\n const results: MfCommandResult<T>[] = [];\r\n for (const item of items) {\r\n const result = scoreCommand(item, folded, locale);\r\n if (result) results.push(result);\r\n }\r\n if (folded) results.sort((a, b) => b.score - a.score);\r\n return results.slice(0, limit);\r\n}\r\n\r\nexport interface MfCommandGroup<T = unknown> {\r\n label: string;\r\n results: MfCommandResult<T>[];\r\n}\r\n\r\n/** Sonuçları `group`'a göre toplar — grup sırası, o gruptaki EN İYİ sonucun sırasıdır. */\r\nexport function groupCommands<T>(results: readonly MfCommandResult<T>[]): MfCommandGroup<T>[] {\r\n const groups = new Map<string, MfCommandGroup<T>>();\r\n for (const result of results) {\r\n const key = result.item.group ?? '';\r\n let group = groups.get(key);\r\n if (!group) {\r\n group = { label: key, results: [] };\r\n groups.set(key, group);\r\n }\r\n group.results.push(result);\r\n }\r\n return [...groups.values()];\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n afterRenderEffect,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n linkedSignal,\r\n model,\r\n output,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { MF_COMMAND_LABELS, MF_DATE_LOCALE } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Kbd } from '@mesgflow/ui-kit/kbd';\r\nimport {\r\n filterCommands,\r\n groupCommands,\r\n type MfCommandItem,\r\n type MfCommandResult,\r\n} from './command-search';\r\n\r\nlet commandIdSeq = 0;\r\n\r\n/**\r\n * `<mf-command [items]=\"commands\" (run)=\"onRun($event)\" />`\r\n *\r\n * Komut paleti gövdesi — arama kutusu + gruplu sonuç listesi. Tek başına (sayfa içi, ör. bir\r\n * ayarlar arama alanı) kullanılabilir; ⌘K deneyimi için `CommandPaletteService.open()` bunu bir\r\n * dialog içinde açar (bkz. `command-palette.service.ts`).\r\n *\r\n * ARIA 1.2 combobox deseni: odak HER ZAMAN input'ta kalır, etkin satır `aria-activedescendant`\r\n * ile duyurulur (satırlar odaklanamaz — `mousedown` engellenir, aksi halde input odağı kaybederdi).\r\n * Arama aksan/büyük-küçük harf duyarsız, alt-dizi (fuzzy) eşleşmeli ve eşleşen harfleri vurgular\r\n * (bkz. `command-search.ts`). Esc: sorgu doluysa ÖNCE sorguyu temizler (Raycast/Linear davranışı),\r\n * boşsa olayı yukarı bırakır — dialog'un kendi Esc kapanışı çalışır.\r\n */\r\n@Component({\r\n selector: 'mf-command',\r\n exportAs: 'mfCommand',\r\n imports: [Icon, Kbd],\r\n host: { class: 'flex min-h-0 flex-col' },\r\n templateUrl: './command.html',\r\n})\r\nexport class Command<T = unknown> {\r\n readonly items = input.required<readonly MfCommandItem<T>[]>();\r\n readonly query = model('');\r\n readonly placeholder = input<string>();\r\n readonly ariaLabel = input<string>();\r\n /** Dolu sorguda gösterilecek en fazla sonuç — boş sorguda tüm liste (tüketici sıralaması) gösterilir. */\r\n readonly limit = input(50);\r\n /** Alt bilgi şeridi: ↑↓ / ↵ / Esc ipuçları (dialog içinde anlamlı; sayfa içi kullanımda genelde kapalı). */\r\n readonly hints = input(false, { transform: booleanAttribute });\r\n /** Açılışta input'a odaklan — dialog zaten ilk odaklanabilir öğeye odaklanır, sayfa içinde istenirse. */\r\n readonly autofocus = input(false, { transform: booleanAttribute });\r\n\r\n readonly run = output<MfCommandItem<T>>();\r\n\r\n protected readonly labels = inject(MF_COMMAND_LABELS);\r\n private readonly locale = inject(MF_DATE_LOCALE);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly inputRef = viewChild.required<ElementRef<HTMLInputElement>>('input');\r\n\r\n private readonly idPrefix = `mf-command-${++commandIdSeq}`;\r\n protected readonly listboxId = `${this.idPrefix}-listbox`;\r\n\r\n protected readonly effectivePlaceholder = computed(\r\n () => this.placeholder() ?? this.labels().placeholder,\r\n );\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.labels().ariaLabel,\r\n );\r\n\r\n private readonly results = computed(() =>\r\n filterCommands(this.items(), this.query(), {\r\n limit: this.query().trim() ? this.limit() : Infinity,\r\n locale: this.locale().code,\r\n }),\r\n );\r\n protected readonly groups = computed(() => groupCommands(this.results()));\r\n /** Görüntülenme sırasıyla düz liste — klavye gezinmesi bunun üzerinde yürür. */\r\n private readonly flat = computed(() => this.groups().flatMap((group) => group.results));\r\n\r\n /** Sonuç kümesi her değiştiğinde ilk etkin satıra sıfırlanır; kullanıcı gezinince elle güncellenir. */\r\n protected readonly activeId = linkedSignal(\r\n () => this.flat().find((result) => !result.item.disabled)?.item.id ?? null,\r\n );\r\n protected readonly activeDomId = computed(() => {\r\n const id = this.activeId();\r\n return id === null ? null : this.optionId(id);\r\n });\r\n\r\n protected readonly liveText = computed(() => {\r\n if (!this.query().trim()) return '';\r\n const count = this.results().length;\r\n return count ? `${count} ${this.labels().resultsCount}` : this.labels().empty;\r\n });\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n const domId = this.activeDomId();\r\n if (!domId) return;\r\n const option = this.host.nativeElement.querySelector<HTMLElement>(`#${domId}`);\r\n option?.scrollIntoView?.({ block: 'nearest' });\r\n });\r\n afterRenderEffect({\r\n write: () => {\r\n if (this.autofocus()) this.inputRef().nativeElement.focus();\r\n },\r\n });\r\n }\r\n\r\n /** DOM kimliği sıra numarasından türer — `item.id` boşluk/`/` içerebilir, geçerli bir `id` olmayabilir. */\r\n private readonly indexById = computed(\r\n () => new Map(this.flat().map((result, index) => [result.item.id, index])),\r\n );\r\n\r\n protected optionId(itemId: string): string {\r\n return `${this.idPrefix}-option-${this.indexById().get(itemId) ?? -1}`;\r\n }\r\n\r\n protected groupId(index: number): string {\r\n return `${this.idPrefix}-group-${index}`;\r\n }\r\n\r\n protected onInput(value: string): void {\r\n this.query.set(value);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.move(1);\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.move(-1);\r\n break;\r\n case 'Home':\r\n case 'End':\r\n // Ctrl ile — düz Home/End input içindeki imleci taşımaya devam etsin.\r\n if (!event.ctrlKey && !event.metaKey) return;\r\n event.preventDefault();\r\n this.edge(event.key === 'Home' ? 'first' : 'last');\r\n break;\r\n case 'Enter': {\r\n if (event.isComposing) return;\r\n event.preventDefault();\r\n const active = this.flat().find((result) => result.item.id === this.activeId());\r\n if (active) this.select(active);\r\n break;\r\n }\r\n case 'Escape':\r\n if (!this.query()) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.query.set('');\r\n break;\r\n }\r\n }\r\n\r\n protected setActive(result: MfCommandResult<T>): void {\r\n if (!result.item.disabled) this.activeId.set(result.item.id);\r\n }\r\n\r\n protected select(result: MfCommandResult<T>): void {\r\n if (result.item.disabled) return;\r\n this.run.emit(result.item);\r\n }\r\n\r\n /** Programatik odak — ör. sayfa içi kullanımda bir kısayolla aramaya atlamak için. */\r\n focus(): void {\r\n this.inputRef().nativeElement.focus();\r\n }\r\n\r\n private enabled(): MfCommandResult<T>[] {\r\n return this.flat().filter((result) => !result.item.disabled);\r\n }\r\n\r\n private move(delta: number): void {\r\n const enabled = this.enabled();\r\n if (enabled.length === 0) return;\r\n const current = enabled.findIndex((result) => result.item.id === this.activeId());\r\n const next = (current + delta + enabled.length) % enabled.length;\r\n this.activeId.set(enabled[current === -1 ? 0 : next].item.id);\r\n }\r\n\r\n private edge(which: 'first' | 'last'): void {\r\n const enabled = this.enabled();\r\n const target = which === 'first' ? enabled[0] : enabled.at(-1);\r\n if (target) this.activeId.set(target.item.id);\r\n }\r\n}\r\n","<div class=\"flex shrink-0 items-center gap-2.5 border-b border-hairline px-4\">\r\n <span mfIcon [size]=\"18\" class=\"shrink-0 text-fg-subtle\">search</span>\r\n <input\r\n #input\r\n type=\"text\"\r\n role=\"combobox\"\r\n autocomplete=\"off\"\r\n autocapitalize=\"off\"\r\n spellcheck=\"false\"\r\n aria-autocomplete=\"list\"\r\n [attr.aria-expanded]=\"groups().length > 0\"\r\n [attr.aria-controls]=\"groups().length > 0 ? listboxId : null\"\r\n [attr.aria-activedescendant]=\"activeDomId()\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [value]=\"query()\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (keydown)=\"onKeydown($event)\"\r\n class=\"h-12 w-full min-w-0 appearance-none border-0 bg-transparent text-sm text-fg outline-none placeholder:text-fg-subtle\"\r\n />\r\n <ng-content select=\"[mfCommandInputEnd]\" />\r\n</div>\r\n\r\n@if (groups().length > 0) {\r\n <div\r\n [id]=\"listboxId\"\r\n role=\"listbox\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n class=\"max-h-[min(24rem,60dvh)] min-h-0 scroll-py-2 overflow-y-auto overscroll-contain p-2\"\r\n >\r\n @for (group of groups(); track group.label; let g = $index) {\r\n <div role=\"group\" [attr.aria-labelledby]=\"group.label ? groupId(g) : null\">\r\n @if (group.label) {\r\n <div\r\n [id]=\"groupId(g)\"\r\n aria-hidden=\"true\"\r\n class=\"px-2.5 pt-2 pb-1 font-mono text-eyebrow text-fg-subtle uppercase\"\r\n >\r\n {{ group.label }}\r\n </div>\r\n }\r\n @for (result of group.results; track result.item.id) {\r\n <!-- Klavye input'ta (aria-activedescendant) — satır bilerek odaklanamaz, bkz. command.ts. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n role=\"option\"\r\n [id]=\"optionId(result.item.id)\"\r\n [attr.aria-selected]=\"result.item.id === activeId()\"\r\n [attr.aria-disabled]=\"result.item.disabled || null\"\r\n class=\"flex cursor-pointer items-center gap-3 rounded-md px-2.5 py-2 text-sm text-fg-muted transition-colors duration-fast ease-emphasis aria-disabled:cursor-not-allowed aria-disabled:opacity-50 aria-selected:bg-surface-alt aria-selected:text-fg\"\r\n (mousedown)=\"$event.preventDefault()\"\r\n (pointermove)=\"setActive(result)\"\r\n (click)=\"select(result)\"\r\n >\r\n @if (result.item.icon) {\r\n <span mfIcon [size]=\"18\" class=\"shrink-0 text-fg-subtle\">{{ result.item.icon }}</span>\r\n }\r\n <span class=\"min-w-0 flex-1 truncate\">\r\n @for (segment of result.segments; track $index) {\r\n @if (segment.match) {\r\n <mark class=\"bg-transparent font-semibold text-fg\">{{ segment.text }}</mark>\r\n } @else {\r\n <!-- Çıplak metin düğümü OLMAMALI: etrafındaki boşluk \" \" olarak kalıp kelimeyi böler (\"Dia log\"). -->\r\n <span>{{ segment.text }}</span>\r\n }\r\n }\r\n @if (result.item.hint) {\r\n <span class=\"ms-2 text-xs text-fg-subtle\">{{ result.item.hint }}</span>\r\n }\r\n </span>\r\n @if (result.item.shortcut?.length) {\r\n <span class=\"flex shrink-0 items-center gap-0.5\" aria-hidden=\"true\">\r\n @for (key of result.item.shortcut; track $index) {\r\n <kbd mfKbd>{{ key }}</kbd>\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n} @else if (query().trim()) {\r\n <p class=\"px-4 py-10 text-center text-sm text-fg-subtle\">{{ labels().empty }}</p>\r\n}\r\n\r\n<div class=\"sr-only\" aria-live=\"polite\">{{ liveText() }}</div>\r\n\r\n@if (hints()) {\r\n <div\r\n class=\"flex shrink-0 items-center gap-4 border-t border-hairline px-4 py-2 text-xs text-fg-subtle\"\r\n aria-hidden=\"true\"\r\n >\r\n <span class=\"flex items-center gap-1\">\r\n <kbd mfKbd>↑</kbd><kbd mfKbd>↓</kbd> {{ labels().navigate }}\r\n </span>\r\n <span class=\"flex items-center gap-1\"><kbd mfKbd>↵</kbd> {{ labels().select }}</span>\r\n <span class=\"flex items-center gap-1\"><kbd mfKbd>Esc</kbd> {{ labels().close }}</span>\r\n </div>\r\n}\r\n","import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';\r\nimport { Component, computed, inject } from '@angular/core';\r\nimport { DialogSurface } from '@mesgflow/ui-kit/dialog';\r\nimport { Command } from './command';\r\nimport type { MfCommandItem } from './command-search';\r\n\r\nexport interface CommandPaletteData<T = unknown> {\r\n items: readonly MfCommandItem<T>[];\r\n placeholder?: string;\r\n query?: string;\r\n limit?: number;\r\n}\r\n\r\n/**\r\n * `CommandPaletteService.open()`'ın dialog içeriği — `<mf-dialog>` KULLANMAZ: Dialog'un her zaman\r\n * çizdiği başlık/kapat şeridi bir komut paletine uymuyor; yüzey `overlaySurface` reçetesinin cam\r\n * olmayan, daha yüksek gölgeli hâli (palet içeriğin ÜSTÜNDE yüzen tek odak — Linear/Raycast).\r\n * Dialog kabı kendi `aria-label`'ını servisten alır; odak/Esc/backdrop CDK'dan gelir.\r\n */\r\n@Component({\r\n selector: 'mf-command-palette',\r\n imports: [Command],\r\n host: {\r\n class:\r\n 'flex max-h-[min(34rem,80dvh)] w-[min(40rem,calc(100vw-2rem))] flex-col overflow-hidden rounded-xl border border-hairline bg-overlay shadow-3',\r\n '[class.animate-dialog-in]': '!closing()',\r\n '[class.animate-dialog-out]': 'closing()',\r\n // Mobil sheet (`DialogService` 640px altında alta yaslar) — alt kenar ekrana oturur.\r\n '[class.rounded-b-none]': 'sheet()',\r\n '[class.border-b-0]': 'sheet()',\r\n },\r\n template: `\r\n <mf-command\r\n class=\"min-h-0 flex-1\"\r\n hints\r\n [items]=\"data.items\"\r\n [placeholder]=\"data.placeholder\"\r\n [limit]=\"data.limit ?? 50\"\r\n [query]=\"data.query ?? ''\"\r\n (run)=\"ref.close($event)\"\r\n />\r\n `,\r\n})\r\nexport class CommandPalette<T = unknown> {\r\n protected readonly data = inject<CommandPaletteData<T>>(DIALOG_DATA);\r\n protected readonly ref = inject<DialogRef<MfCommandItem<T>, CommandPalette<T>>>(DialogRef);\r\n /** `DialogService` çıkış animasyonu turu — `Dialog`'un aynı reaktif sınıfı (bkz. dialog.service.ts). */\r\n private readonly surface = inject(DialogSurface, { optional: true });\r\n protected readonly closing = computed(() => this.surface?.closing() ?? false);\r\n protected readonly sheet = computed(() => this.surface?.sheet() ?? false);\r\n}\r\n","import type { DialogRef } from '@angular/cdk/dialog';\r\nimport { Service, inject } from '@angular/core';\r\nimport { MF_COMMAND_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { DialogService } from '@mesgflow/ui-kit/dialog';\r\nimport { CommandPalette, type CommandPaletteData } from './command-palette';\r\nimport type { MfCommandItem } from './command-search';\r\n\r\nexport type CommandPaletteOptions = Omit<CommandPaletteData, 'items'>;\r\n\r\n/**\r\n * ⌘K paletinin tek açılış noktası — `DialogService` üzerine ince katman (odak tuzağı, Esc,\r\n * backdrop, odak iadesi, çıkış animasyonu, mobil sheet HEPSİ oradan):\r\n *\r\n * ```ts\r\n * const item = await palette.open(commands);\r\n * if (item) void router.navigateByUrl(item.data.url);\r\n * ```\r\n *\r\n * Aynı anda tek palet: açıkken yeniden `open()` yeni bir dialog yığmaz, açık olanın sonucunu\r\n * bekleyen aynı `Promise`'i döner (kısayola iki kez basmak iki palet açmasın).\r\n */\r\n@Service()\r\nexport class CommandPaletteService {\r\n private readonly dialog = inject(DialogService);\r\n private readonly labels = inject(MF_COMMAND_LABELS);\r\n private active: {\r\n ref: DialogRef<MfCommandItem, CommandPalette>;\r\n result: Promise<MfCommandItem | undefined>;\r\n } | null = null;\r\n\r\n get isOpen(): boolean {\r\n return this.active !== null;\r\n }\r\n\r\n open<T>(\r\n items: readonly MfCommandItem<T>[],\r\n options: CommandPaletteOptions = {},\r\n ): Promise<MfCommandItem<T> | undefined> {\r\n if (this.active) return this.active.result as Promise<MfCommandItem<T> | undefined>;\r\n\r\n const ref = this.dialog.open<MfCommandItem<T>, CommandPaletteData<T>, CommandPalette<T>>(\r\n CommandPalette,\r\n {\r\n data: { ...options, items },\r\n size: 'sm',\r\n ariaLabel: this.labels().ariaLabel,\r\n },\r\n );\r\n const result = new Promise<MfCommandItem<T> | undefined>((resolve) =>\r\n ref.closed.subscribe((item) => {\r\n this.active = null;\r\n resolve(item);\r\n }),\r\n );\r\n this.active = {\r\n ref: ref as unknown as DialogRef<MfCommandItem, CommandPalette>,\r\n result: result as Promise<MfCommandItem | undefined>,\r\n };\r\n return result;\r\n }\r\n\r\n close(): void {\r\n this.active?.ref.close();\r\n }\r\n}\r\n","import { Directive, booleanAttribute, computed, inject, input, output } from '@angular/core';\r\nimport { CommandPaletteService } from './command-palette.service';\r\nimport type { MfCommandItem } from './command-search';\r\n\r\n/** `Ctrl/⌘ + <hotkey>` mi? Düzenlenebilir bir metin alanındayken (`contenteditable`) kısayol yutulmaz. */\r\nexport function isCommandHotkey(event: KeyboardEvent, hotkey = 'k'): boolean {\r\n if (event.key.toLowerCase() !== hotkey.toLowerCase()) return false;\r\n if (!(event.ctrlKey || event.metaKey) || event.altKey || event.shiftKey) return false;\r\n const target = event.target as HTMLElement | null;\r\n return !target?.closest?.('[contenteditable]:not([contenteditable=\"false\"])');\r\n}\r\n\r\n/**\r\n * `<button mfButton [mfCommandPaletteTrigger]=\"commands\" (commandRun)=\"go($event)\">Ara</button>`\r\n *\r\n * Tıklamada VE global `Ctrl/⌘+K` kısayolunda paleti açar; seçilen öğeyi `commandRun` ile verir.\r\n * `aria-keyshortcuts` kısayolu yardımcı teknolojiye duyurur. Kısayol dinleyicisi belgeye bağlı —\r\n * sayfada TEK tetikleyici `hotkey` taşımalı (diğerleri `[hotkeyDisabled]=\"true\"`).\r\n */\r\n@Directive({\r\n selector: '[mfCommandPaletteTrigger]',\r\n exportAs: 'mfCommandPaletteTrigger',\r\n host: {\r\n 'aria-haspopup': 'dialog',\r\n '[attr.aria-keyshortcuts]': 'keyshortcuts()',\r\n '(click)': 'open()',\r\n '(document:keydown)': 'onDocumentKeydown($event)',\r\n },\r\n})\r\nexport class CommandPaletteTrigger<T = unknown> {\r\n readonly items = input.required<readonly MfCommandItem<T>[]>({\r\n alias: 'mfCommandPaletteTrigger',\r\n });\r\n readonly placeholder = input<string>();\r\n readonly hotkey = input('k');\r\n readonly hotkeyDisabled = input(false, { transform: booleanAttribute });\r\n\r\n readonly commandRun = output<MfCommandItem<T>>();\r\n\r\n private readonly palette = inject(CommandPaletteService);\r\n\r\n protected readonly keyshortcuts = computed(() => {\r\n if (this.hotkeyDisabled()) return null;\r\n const key = this.hotkey().toUpperCase();\r\n return `Control+${key} Meta+${key}`;\r\n });\r\n\r\n protected onDocumentKeydown(event: KeyboardEvent): void {\r\n if (this.hotkeyDisabled() || !isCommandHotkey(event, this.hotkey())) return;\r\n event.preventDefault();\r\n // Açıkken tekrar basmak paleti kapatır (Linear/Raycast'ın aç-kapa davranışı).\r\n if (this.palette.isOpen) this.palette.close();\r\n else void this.open();\r\n }\r\n\r\n async open(): Promise<void> {\r\n const item = await this.palette.open(this.items(), { placeholder: this.placeholder() });\r\n if (item) this.commandRun.emit(item);\r\n }\r\n}\r\n","import { Overlay, type OverlayRef } from '@angular/cdk/overlay';\r\nimport { TemplatePortal } from '@angular/cdk/portal';\r\nimport { Directive, OnDestroy, TemplateRef, ViewContainerRef, inject, input } from '@angular/core';\r\n\r\n/**\r\n * `<div [mfContextMenu]=\"menuTpl\" #ctx=\"mfContextMenu\">Sağ tıkla</div>\r\n * <ng-template #menuTpl>\r\n * <mf-menu (itemSelected)=\"onSelect($event); ctx.close()\">\r\n * <button mfMenuItem value=\"edit\">Düzenle</button>\r\n * <button mfMenuItem value=\"delete\">Sil</button>\r\n * </mf-menu>\r\n * </ng-template>`\r\n *\r\n * Sağ tıkla İMLEÇ KONUMUNDA bir menü açar — native tarayıcı bağlam menüsü\r\n * `event.preventDefault()` ile bastırılır. Kitteki ilk \"gerçek DOM elemanına\r\n * değil bir NOKTAYA sabitlenen\" overlay (bkz. `Tooltip`'in aynı\r\n * `flexibleConnectedTo` + elle `Overlay.create()` deseni) — `mf-popover`\r\n * KULLANILMADI çünkü `Popover.origin` bir `CdkOverlayOrigin` (gerçek bir\r\n * DOM elemanı) şart koşuyor, imleç noktası değil; CDK'nın\r\n * `flexibleConnectedTo` stratejisi bir `{x, y}` noktasını da DOĞRUDAN kabul\r\n * ediyor, ayrı bir \"görünmez sanal anchor elemanı\" hilesi GEREKMİYOR.\r\n *\r\n * Menü seçimi/kapanışı çağıranın kendi sorumluluğunda — `mfMenuTrigger`\r\n * deseniyle AYNI ilke (bkz. `menu-trigger.ts`): `itemSelected`'te\r\n * `ctx.close()`'u KENDİ elle çağırırsın.\r\n */\r\n@Directive({\r\n selector: '[mfContextMenu]',\r\n exportAs: 'mfContextMenu',\r\n host: {\r\n '(contextmenu)': 'onContextMenu($event)',\r\n },\r\n})\r\nexport class ContextMenu implements OnDestroy {\r\n readonly mfContextMenu = input<TemplateRef<unknown> | null>(null);\r\n readonly disabled = input(false);\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private overlayRef?: OverlayRef;\r\n\r\n protected onContextMenu(event: MouseEvent): void {\r\n const template = this.mfContextMenu();\r\n if (this.disabled() || !template) return;\r\n event.preventDefault();\r\n this.close();\r\n\r\n const positionStrategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo({ x: event.clientX, y: event.clientY })\r\n .withPositions([\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' },\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' },\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'bottom' },\r\n ])\r\n .withPush(true);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n scrollStrategy: this.overlay.scrollStrategies.close(),\r\n hasBackdrop: true,\r\n backdropClass: 'cdk-overlay-transparent-backdrop',\r\n });\r\n this.overlayRef.backdropClick().subscribe(() => this.close());\r\n this.overlayRef.keydownEvents().subscribe((e) => {\r\n if (e.key === 'Escape') this.close();\r\n });\r\n this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));\r\n }\r\n\r\n /** Public — menü içeriğinden (bkz. sınıf üstündeki JSDoc örneği) elle kapatmak için. */\r\n close(): void {\r\n this.overlayRef?.dispose();\r\n this.overlayRef = undefined;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.close();\r\n }\r\n}\r\n","import { DOCUMENT, DestroyRef, Directive, inject, input, output, signal } from '@angular/core';\r\n\r\n/** Kopyalandı durumunun görünür kaldığı süre (ms). */\r\nconst COPIED_MS = 2000;\r\n\r\n/**\r\n * Metni panoya yazar. `navigator.clipboard` yoksa ya da reddedilirse (güvenli olmayan bağlam,\r\n * izin) gizli bir `<textarea>` + `execCommand('copy')` yedeğine düşer — eski ama HTTP'de de\r\n * çalışan tek yol. Başarısızsa `false`.\r\n */\r\nexport async function copyToClipboard(text: string, doc: Document = document): Promise<boolean> {\r\n try {\r\n if (doc.defaultView?.navigator.clipboard) {\r\n await doc.defaultView.navigator.clipboard.writeText(text);\r\n return true;\r\n }\r\n } catch {\r\n // Yedeğe düş.\r\n }\r\n const area = doc.createElement('textarea');\r\n area.value = text;\r\n area.setAttribute('readonly', '');\r\n area.style.cssText = 'position:fixed;inset-block-start:0;opacity:0;pointer-events:none';\r\n doc.body.appendChild(area);\r\n area.select();\r\n try {\r\n return doc.execCommand('copy');\r\n } catch {\r\n return false;\r\n } finally {\r\n area.remove();\r\n }\r\n}\r\n\r\n/**\r\n * `<button mfButton [mfCopy]=\"token\" #c=\"mfCopy\">{{ c.copied() ? '✓' : 'Kopyala' }}</button>`\r\n *\r\n * Herhangi bir düğmeyi kopyala düğmesine çevirir — görünüm tamamen tüketicide; hazır görünüm\r\n * için `<mf-copy-button>`. `copied()` başarıdan sonra 2 sn `true` kalır (ikon/etiket değişimi\r\n * için), `failed()` başarısızlıkta. Metin tıklama ANINDA okunur (dinamik değerler güncel olur).\r\n */\r\n@Directive({\r\n selector: '[mfCopy]',\r\n exportAs: 'mfCopy',\r\n host: { '(click)': 'copy()' },\r\n})\r\nexport class Copy {\r\n readonly value = input.required<string>({ alias: 'mfCopy' });\r\n\r\n readonly copySuccess = output<string>();\r\n readonly copyError = output<void>();\r\n\r\n readonly copied = signal(false);\r\n readonly failed = signal(false);\r\n\r\n private readonly document = inject(DOCUMENT);\r\n private timer: ReturnType<typeof setTimeout> | undefined;\r\n\r\n constructor() {\r\n inject(DestroyRef).onDestroy(() => clearTimeout(this.timer));\r\n }\r\n\r\n async copy(): Promise<boolean> {\r\n const text = this.value();\r\n const ok = await copyToClipboard(text, this.document);\r\n clearTimeout(this.timer);\r\n this.copied.set(ok);\r\n this.failed.set(!ok);\r\n if (ok) this.copySuccess.emit(text);\r\n else this.copyError.emit();\r\n this.timer = setTimeout(() => {\r\n this.copied.set(false);\r\n this.failed.set(false);\r\n }, COPIED_MS);\r\n return ok;\r\n }\r\n}\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { MF_COPY_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport { Copy } from './copy';\r\n\r\n/**\r\n * `<mf-copy-button [value]=\"apiKey\" />` — ikon düğmesi: tıklanınca ikon ✓'ye döner (2 sn),\r\n * başarısızsa ⚠; sonuç `aria-live` ile duyurulur. Düğmenin erişilebilir adı SABİT (\"Copy\" ya da\r\n * `label`) — ekran okuyucu durum değişimini canlı bölgeden duyar, ad oynamaz.\r\n */\r\n@Component({\r\n selector: 'mf-copy-button',\r\n exportAs: 'mfCopyButton',\r\n imports: [Button, Icon, Tooltip, Copy],\r\n host: { class: 'inline-flex' },\r\n template: `\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [mfCopy]=\"value()\"\r\n #copier=\"mfCopy\"\r\n [mfTooltip]=\"effectiveLabel()\"\r\n [attr.aria-label]=\"effectiveLabel()\"\r\n >\r\n <span mfIcon [size]=\"16\" [class]=\"iconClass(copier.copied(), copier.failed())\">{{\r\n copier.copied() ? 'check' : copier.failed() ? 'error' : 'content_copy'\r\n }}</span>\r\n </button>\r\n <span class=\"sr-only\" aria-live=\"polite\">{{\r\n copier.copied() ? labels().copied : copier.failed() ? labels().failed : ''\r\n }}</span>\r\n `,\r\n})\r\nexport class CopyButton {\r\n readonly value = input.required<string>();\r\n /** Düğmenin adı + ipucu. Verilmezse `MfLabels.copy.copy`. */\r\n readonly label = input<string>();\r\n\r\n protected readonly labels = inject(MF_COPY_LABELS);\r\n protected readonly effectiveLabel = computed(() => this.label() ?? this.labels().copy);\r\n\r\n protected iconClass(copied: boolean, failed: boolean): string {\r\n if (copied) return 'text-success animate-pop';\r\n return failed ? 'text-danger' : '';\r\n }\r\n}\r\n","import {\r\n addMonths,\r\n addYears,\r\n eachDayOfInterval,\r\n endOfMonth,\r\n endOfWeek,\r\n format,\r\n isSameDay as isSameDayFns,\r\n isSameMonth,\r\n isValid,\r\n isWithinInterval,\r\n parse,\r\n startOfDay,\r\n startOfMonth,\r\n startOfWeek,\r\n subDays,\r\n subMonths,\r\n subYears,\r\n type Locale,\r\n} from 'date-fns';\r\n\r\nexport interface DateRange {\r\n start: Date | null;\r\n end: Date | null;\r\n}\r\n\r\nexport type DateRangePresetId = 'today' | 'last7' | 'last30' | 'thisMonth';\r\n\r\n/**\r\n * Hazır tarih aralıkları — kurumsal panellerde tarih filtresinin %90'ı bunlar\r\n * (bkz. eski `table-filter.model.ts` `dateRangeFor`, ISO metin üreten\r\n * kardeşi — burada `Date` nesneleri üretiyor, ISO'ya çevirme çağıranın işi,\r\n * bkz. `date-picker.model.ts` kullanan `table-filter.model.ts`'teki\r\n * `dateToIso`). `date-picker`'ın kendi paketi TEK KAYNAK — Table bunu import\r\n * eder, tersi değil.\r\n */\r\nexport function dateRangeForPreset(preset: DateRangePresetId): DateRange {\r\n const today = startOfDay(new Date());\r\n if (preset === 'today') return { start: today, end: today };\r\n if (preset === 'thisMonth') return { start: startOfMonth(today), end: today };\r\n const days = preset === 'last7' ? 6 : 29;\r\n return { start: subDays(today, days), end: today };\r\n}\r\n\r\n/**\r\n * Bir ay ızgarası — 6 satır × 7 sütun, komşu ay günleri dahil (haftanın ilk\r\n * günü `locale`'e göre — tr Pazartesi, en-US Pazar; `date-fns/locale`'in\r\n * `weekStartsOn`'undan otomatik gelir, elle YAZILMAZ).\r\n */\r\nexport function buildMonthMatrix(month: Date, locale: Locale): Date[][] {\r\n const gridStart = startOfWeek(startOfMonth(month), { locale });\r\n const gridEnd = endOfWeek(endOfMonth(month), { locale });\r\n const days = eachDayOfInterval({ start: gridStart, end: gridEnd });\r\n\r\n const weeks: Date[][] = [];\r\n for (let i = 0; i < days.length; i += 7) weeks.push(days.slice(i, i + 7));\r\n return weeks;\r\n}\r\n\r\nexport function isCurrentMonth(day: Date, month: Date): boolean {\r\n return isSameMonth(day, month);\r\n}\r\n\r\nexport function isSameDay(a: Date | null, b: Date | null): boolean {\r\n if (!a || !b) return false;\r\n return isSameDayFns(a, b);\r\n}\r\n\r\nexport function isWithinRange(day: Date, start: Date | null, end: Date | null): boolean {\r\n if (!start || !end) return false;\r\n return isWithinInterval(day, { start, end });\r\n}\r\n\r\nexport function isDayDisabled(day: Date, min: Date | null, max: Date | null): boolean {\r\n const time = startOfDay(day).getTime();\r\n if (min && time < startOfDay(min).getTime()) return true;\r\n if (max && time > startOfDay(max).getTime()) return true;\r\n return false;\r\n}\r\n\r\nexport function shiftMonth(month: Date, delta: number): Date {\r\n return delta >= 0 ? addMonths(month, delta) : subMonths(month, -delta);\r\n}\r\n\r\nexport function shiftYear(month: Date, delta: number): Date {\r\n return delta >= 0 ? addYears(month, delta) : subYears(month, -delta);\r\n}\r\n\r\n/** `date-fns`'in `formatLong.date({width:'short'})`'u — `'P'` token'ının ARKASINDAKİ gerçek örüntü (tr: `dd.MM.yyyy`, en-US: `MM/dd/yyyy`). `parse()` `'P'`'yi DOĞRUDAN kabul etmiyor (yalnızca `format()` yerelleştirilmiş token'ları çözer) — yazarak girişi geri okumak için bu örüntü gerekiyor. */\r\nfunction shortDatePattern(locale: Locale): string {\r\n return locale.formatLong?.date({ width: 'short' }) ?? 'P';\r\n}\r\n\r\nexport function formatDateInput(date: Date, locale: Locale): string {\r\n return format(date, shortDatePattern(locale), { locale });\r\n}\r\n\r\n/** Kullanıcının yazdığı metni çözer; geçersizse `null` (çağıran son geçerli değere geri döner). Sonuç HER ZAMAN gün sınırına (`startOfDay`) normalize edilir. */\r\nexport function parseDateInput(text: string, locale: Locale): Date | null {\r\n const trimmed = text.trim();\r\n if (!trimmed) return null;\r\n const parsed = parse(trimmed, shortDatePattern(locale), new Date(), { locale });\r\n return isValid(parsed) ? startOfDay(parsed) : null;\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n afterRenderEffect,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { addDays, endOfWeek, format, startOfMonth, startOfWeek } from 'date-fns';\r\nimport type { Locale } from 'date-fns';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport {\r\n cn,\r\n MF_DATE_LOCALE,\r\n MF_DATE_PICKER_LABELS,\r\n type MfDatePickerLabels,\r\n} from '@mesgflow/ui-kit/core';\r\nimport {\r\n buildMonthMatrix,\r\n isCurrentMonth,\r\n isDayDisabled,\r\n isSameDay,\r\n isWithinRange,\r\n shiftMonth,\r\n shiftYear,\r\n} from './date-picker.model';\r\n\r\n/**\r\n * `<mf-calendar [(month)]=\"visibleMonth\" [selected]=\"value()\" (dayPick)=\"onPick($event)\" />`\r\n *\r\n * Takvim ızgarasının gövdesi — hem `DatePicker`/`DateRangePicker`'ın overlay\r\n * paneli İÇİNDE hem inline (overlay'siz) kullanılabilir. `@angular/aria/grid`\r\n * KULLANILMADI (bkz. plan): sağ ok ayın son gününden sonraki ayın ilk gününe\r\n * ATLAMALI, `PageUp`/`PageDown` ±1 ay/±1 yıl yapmalı — grid pattern'i\r\n * render edilmiş satır/sütun sınırlarıyla kapalı, bu ikisini karşılamıyor.\r\n * Roving tabindex elle kuruldu (emsal: `table-pagination.ts`'in\r\n * `afterRenderEffect` + `viewChild(ElementRef)` deseni).\r\n *\r\n * Üç görünüm (`view`) — gün ızgarası, ay ızgarası, yıl ızgarası — klasik\r\n * drill-up/down: başlıktaki \"Eylül 2026\" ay/yıl görünümüne, oradaki yıl\r\n * yıl ızgarasına götürür; seçim tersine iner.\r\n */\r\n@Component({\r\n selector: 'mf-calendar',\r\n imports: [Button, Icon],\r\n host: { class: 'block' },\r\n templateUrl: './calendar.html',\r\n})\r\nexport class Calendar {\r\n readonly month = model<Date>(startOfMonth(new Date()));\r\n readonly mode = input<'single' | 'range'>('single');\r\n readonly selected = input<Date | null>(null);\r\n readonly rangeStart = input<Date | null>(null);\r\n readonly rangeEnd = input<Date | null>(null);\r\n /** Fare aralığın ikinci ucunun üzerinde gezinirken önizleme — `rangeEnd()` doluysa yok sayılır. */\r\n readonly hoverEnd = input<Date | null>(null);\r\n readonly min = input<Date | null>(null);\r\n readonly max = input<Date | null>(null);\r\n readonly locale = input<Locale>();\r\n readonly labels = input<MfDatePickerLabels>();\r\n /**\r\n * `false` → başlık ok/ay-yıl drill-down kontrolleri GİZLENİR, sadece ay/yıl\r\n * ETİKETİ (statik metin) kalır. `DateRangePicker`'ın İKİNCİ (takipçi)\r\n * takvimi için — \"ikinci ay = birincinin bir fazlası\" değişmezini korumak\r\n * amacıyla o takvim kendi başına gezilemez (bkz. date-range-picker.ts).\r\n * Gün ızgarası yine TAM etkileşimli kalır — sadece ay/yıl DEĞİŞTİRME devre\r\n * dışı.\r\n */\r\n readonly navigable = input(true);\r\n\r\n readonly dayPick = output<Date>();\r\n readonly dayHover = output<Date | null>();\r\n\r\n private readonly dateLocaleToken = inject(MF_DATE_LOCALE);\r\n private readonly datePickerLabels = inject(MF_DATE_PICKER_LABELS);\r\n protected readonly effectiveLocale = computed(() => this.locale() ?? this.dateLocaleToken());\r\n protected readonly effectiveLabels = computed(() => this.labels() ?? this.datePickerLabels());\r\n\r\n protected readonly view = signal<'day' | 'month' | 'year'>('day');\r\n protected readonly focusedDay = signal(new Date());\r\n protected readonly yearPageStart = signal(Math.floor(new Date().getFullYear() / 12) * 12);\r\n\r\n protected readonly weeks = computed(() => buildMonthMatrix(this.month(), this.effectiveLocale()));\r\n protected readonly monthGrid = computed(() => {\r\n const year = this.month().getFullYear();\r\n return Array.from({ length: 12 }, (_, i) => new Date(year, i, 1));\r\n });\r\n protected readonly yearGrid = computed(() =>\r\n Array.from({ length: 12 }, (_, i) => this.yearPageStart() + i),\r\n );\r\n protected readonly weekdayLabels = computed(() => {\r\n const locale = this.effectiveLocale();\r\n const start = startOfWeek(new Date(), { locale });\r\n return Array.from({ length: 7 }, (_, i) => format(addDays(start, i), 'EEEEEE', { locale }));\r\n });\r\n protected readonly monthYearLabel = computed(() =>\r\n format(this.month(), 'LLLL yyyy', { locale: this.effectiveLocale() }),\r\n );\r\n\r\n private readonly gridEl = viewChild<ElementRef<HTMLElement>>('grid');\r\n private focusPending = false;\r\n\r\n protected readonly shiftMonth = shiftMonth;\r\n protected readonly shiftYear = shiftYear;\r\n\r\n constructor() {\r\n // `month()` dışarıdan (ok butonu, klavye, ya da tüketicinin kendi\r\n // `[(month)]` bağlaması) değiştiğinde odaklı gün YENİ ayın dışında\r\n // kalmışsa içeri çekilir — `selected()` yeni ayın içindeyse ona, değilse\r\n // ayın 1'ine.\r\n effect(() => {\r\n const month = this.month();\r\n untracked(() => {\r\n if (!isCurrentMonth(this.focusedDay(), month)) {\r\n const preferred = this.selected() ?? new Date();\r\n this.focusedDay.set(isCurrentMonth(preferred, month) ? preferred : startOfMonth(month));\r\n }\r\n });\r\n });\r\n\r\n afterRenderEffect(() => {\r\n this.focusedDay();\r\n if (!this.focusPending) return;\r\n this.focusPending = false;\r\n const key = this.dayKey(this.focusedDay());\r\n this.gridEl()?.nativeElement.querySelector<HTMLElement>(`[data-day-key=\"${key}\"]`)?.focus();\r\n });\r\n }\r\n\r\n protected dayKey(day: Date): string {\r\n return format(day, 'yyyy-MM-dd');\r\n }\r\n\r\n protected tabIndexFor(day: Date): number {\r\n return isSameDay(day, this.focusedDay()) ? 0 : -1;\r\n }\r\n\r\n protected isDisabled(day: Date): boolean {\r\n return isDayDisabled(day, this.min(), this.max());\r\n }\r\n\r\n protected isSameDaySafe(day: Date): boolean {\r\n if (this.mode() === 'single') return isSameDay(day, this.selected());\r\n return isSameDay(day, this.rangeStart()) || isSameDay(day, this.rangeEnd());\r\n }\r\n\r\n protected dayClasses(day: Date): string {\r\n const outside = !isCurrentMonth(day, this.month());\r\n const today = isSameDay(day, new Date());\r\n const isRangeMode = this.mode() === 'range';\r\n const effectiveEnd = this.rangeEnd() ?? this.hoverEnd();\r\n\r\n const isStart = isRangeMode && isSameDay(day, this.rangeStart());\r\n const isEnd =\r\n isRangeMode &&\r\n (isSameDay(day, this.rangeEnd()) || (!this.rangeEnd() && isSameDay(day, this.hoverEnd())));\r\n const isEdge = isStart || isEnd;\r\n const inRange = isRangeMode && isWithinRange(day, this.rangeStart(), effectiveEnd);\r\n const isSelectedSingle = !isRangeMode && isSameDay(day, this.selected());\r\n\r\n return cn(\r\n 'relative flex h-9 w-9 shrink-0 appearance-none items-center justify-center rounded-sm border-0 bg-transparent text-sm tabular-nums text-fg 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:opacity-40',\r\n outside && 'text-fg-subtle',\r\n !isSelectedSingle && !isEdge && 'hover:bg-surface-alt',\r\n inRange && 'rounded-none bg-primary-tint',\r\n inRange && isStart && 'rounded-s-sm',\r\n inRange && isEnd && 'rounded-e-sm',\r\n (isSelectedSingle || isEdge) &&\r\n 'rounded-sm bg-primary-tint font-semibold text-primary-tint-fg',\r\n today &&\r\n !isSelectedSingle &&\r\n !isEdge &&\r\n \"after:absolute after:bottom-1 after:h-1 after:w-1 after:rounded-full after:bg-accent after:content-['']\",\r\n );\r\n }\r\n\r\n protected cellClasses(active: boolean): string {\r\n return cn(\r\n 'rounded-sm px-2 py-2.5 text-sm text-fg capitalize transition-colors duration-fast ease-emphasis',\r\n active ? 'bg-primary-tint font-semibold text-primary-tint-fg' : 'hover:bg-surface-alt',\r\n );\r\n }\r\n\r\n protected monthLabel(m: Date): string {\r\n return format(m, 'LLL', { locale: this.effectiveLocale() });\r\n }\r\n\r\n protected openMonthView(): void {\r\n this.view.set('month');\r\n }\r\n\r\n protected openYearView(): void {\r\n this.yearPageStart.set(Math.floor(this.month().getFullYear() / 12) * 12);\r\n this.view.set('year');\r\n }\r\n\r\n protected shiftYearPage(delta: number): void {\r\n this.yearPageStart.update((y) => y + delta * 12);\r\n }\r\n\r\n protected pickMonth(m: Date): void {\r\n this.month.set(new Date(this.month().getFullYear(), m.getMonth(), 1));\r\n this.view.set('day');\r\n }\r\n\r\n protected pickYear(y: number): void {\r\n this.month.set(new Date(y, this.month().getMonth(), 1));\r\n this.view.set('month');\r\n }\r\n\r\n protected pick(day: Date): void {\r\n if (this.isDisabled(day)) return;\r\n this.focusedDay.set(day);\r\n this.dayPick.emit(day);\r\n }\r\n\r\n protected onDayMouseEnter(day: Date): void {\r\n if (this.mode() === 'range') this.dayHover.emit(day);\r\n }\r\n\r\n protected onGridKeydown(event: KeyboardEvent): void {\r\n const current = this.focusedDay();\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.moveFocus(addDays(current, -1));\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.moveFocus(addDays(current, 1));\r\n break;\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.moveFocus(addDays(current, -7));\r\n break;\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.moveFocus(addDays(current, 7));\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.moveFocus(startOfWeek(current, { locale: this.effectiveLocale() }));\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.moveFocus(endOfWeek(current, { locale: this.effectiveLocale() }));\r\n break;\r\n case 'PageUp':\r\n event.preventDefault();\r\n this.moveFocus(event.shiftKey ? shiftYear(current, -1) : shiftMonth(current, -1));\r\n break;\r\n case 'PageDown':\r\n event.preventDefault();\r\n this.moveFocus(event.shiftKey ? shiftYear(current, 1) : shiftMonth(current, 1));\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n this.pick(current);\r\n break;\r\n }\r\n }\r\n\r\n private moveFocus(day: Date): void {\r\n this.focusPending = true;\r\n this.focusedDay.set(day);\r\n if (!isCurrentMonth(day, this.month())) this.month.set(startOfMonth(day));\r\n }\r\n}\r\n","<div class=\"flex w-64 flex-col gap-2\">\r\n @switch (view()) {\r\n @case ('day') {\r\n <div class=\"flex items-center justify-between\">\r\n @if (navigable()) {\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"effectiveLabels().previousMonth\"\r\n (click)=\"month.set(shiftMonth(month(), -1))\"\r\n >\r\n <span mfIcon [size]=\"18\" class=\"rtl:-scale-x-100\">chevron_left</span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex appearance-none items-center gap-0.5 border-0 bg-transparent px-1 font-display text-title-sm text-fg capitalize transition-colors duration-fast ease-emphasis hover:text-accent\"\r\n [attr.aria-label]=\"effectiveLabels().chooseMonth\"\r\n (click)=\"openMonthView()\"\r\n >\r\n {{ monthYearLabel() }}\r\n <span mfIcon [size]=\"16\">expand_more</span>\r\n </button>\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"effectiveLabels().nextMonth\"\r\n (click)=\"month.set(shiftMonth(month(), 1))\"\r\n >\r\n <span mfIcon [size]=\"18\" class=\"rtl:-scale-x-100\">chevron_right</span>\r\n </button>\r\n } @else {\r\n <span class=\"px-1 font-display text-title-sm text-fg capitalize\">{{\r\n monthYearLabel()\r\n }}</span>\r\n }\r\n </div>\r\n\r\n <div class=\"grid grid-cols-7\">\r\n @for (label of weekdayLabels(); track $index) {\r\n <span class=\"text-eyebrow flex h-6 items-center justify-center text-fg-subtle\">{{\r\n label\r\n }}</span>\r\n }\r\n </div>\r\n\r\n <!--\r\n `role=\"grid\"` kapsayıcısı odaklanabilir DEĞİL — hücreler (`role=\"gridcell\"`)\r\n gerçek `<button>` elemanları, roving tabindex ile kendi odaklarını taşır;\r\n bu `(keydown)` yalnızca ok tuşu gezinmesini merkezi yönetmek için.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <div\r\n #grid\r\n role=\"grid\"\r\n [attr.aria-label]=\"monthYearLabel()\"\r\n class=\"grid grid-cols-7 gap-y-1\"\r\n (keydown)=\"onGridKeydown($event)\"\r\n (mouseleave)=\"dayHover.emit(null)\"\r\n >\r\n @for (week of weeks(); track $index) {\r\n <div role=\"row\" class=\"contents\">\r\n @for (day of week; track day.getTime()) {\r\n <button\r\n type=\"button\"\r\n role=\"gridcell\"\r\n [attr.data-day-key]=\"dayKey(day)\"\r\n [attr.aria-selected]=\"isSameDaySafe(day)\"\r\n [tabindex]=\"tabIndexFor(day)\"\r\n [disabled]=\"isDisabled(day)\"\r\n [class]=\"dayClasses(day)\"\r\n (click)=\"pick(day)\"\r\n (mouseenter)=\"onDayMouseEnter(day)\"\r\n >\r\n {{ day.getDate() }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n @case ('month') {\r\n <div class=\"flex items-center justify-between\">\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"effectiveLabels().previousYear\"\r\n (click)=\"month.set(shiftYear(month(), -1))\"\r\n >\r\n <span mfIcon [size]=\"18\" class=\"rtl:-scale-x-100\">chevron_left</span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex appearance-none items-center gap-0.5 border-0 bg-transparent px-1 font-display text-title-sm tabular-nums text-fg transition-colors duration-fast ease-emphasis hover:text-accent\"\r\n [attr.aria-label]=\"effectiveLabels().chooseYear\"\r\n (click)=\"openYearView()\"\r\n >\r\n {{ month().getFullYear() }}\r\n <span mfIcon [size]=\"16\">expand_more</span>\r\n </button>\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"effectiveLabels().nextYear\"\r\n (click)=\"month.set(shiftYear(month(), 1))\"\r\n >\r\n <span mfIcon [size]=\"18\" class=\"rtl:-scale-x-100\">chevron_right</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-3 gap-1 py-1\">\r\n @for (m of monthGrid(); track m.getMonth()) {\r\n <button\r\n type=\"button\"\r\n [class]=\"cellClasses(m.getMonth() === month().getMonth())\"\r\n (click)=\"pickMonth(m)\"\r\n >\r\n {{ monthLabel(m) }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n @case ('year') {\r\n <div class=\"flex items-center justify-between\">\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"effectiveLabels().previousYear\"\r\n (click)=\"shiftYearPage(-1)\"\r\n >\r\n <span mfIcon [size]=\"18\" class=\"rtl:-scale-x-100\">chevron_left</span>\r\n </button>\r\n <span class=\"font-display text-title-sm tabular-nums text-fg\"\r\n >{{ yearGrid()[0] }}–{{ yearGrid()[11] }}</span\r\n >\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"effectiveLabels().nextYear\"\r\n (click)=\"shiftYearPage(1)\"\r\n >\r\n <span mfIcon [size]=\"18\" class=\"rtl:-scale-x-100\">chevron_right</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-3 gap-1 py-1\">\r\n @for (y of yearGrid(); track y) {\r\n <button\r\n type=\"button\"\r\n class=\"tabular-nums\"\r\n [class]=\"cellClasses(y === month().getFullYear())\"\r\n (click)=\"pickYear(y)\"\r\n >\r\n {{ y }}\r\n </button>\r\n }\r\n </div>\r\n }\r\n }\r\n</div>\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { startOfDay, startOfMonth } from 'date-fns';\r\nimport type { Locale } from 'date-fns';\r\nimport {\r\n MF_DATE_LOCALE,\r\n MF_DATE_PICKER_LABELS,\r\n type MfDatePickerLabels,\r\n ValueAccessorBase,\r\n} from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Input } from '@mesgflow/ui-kit/input';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { Calendar } from './calendar';\r\nimport { formatDateInput, isDayDisabled, parseDateInput } from './date-picker.model';\r\n\r\n/**\r\n * `<mf-date-picker [(value)]=\"date\" [min]=\"minDate()\" />`\r\n *\r\n * Tetikleyici GERÇEK bir `<input mfInput>` — ikon+temizle butonu üstüne\r\n * bindirilmiş (emsal: `search-input.html`, ayrı bir bordürlü kutuyla\r\n * SARMALAMIYORUZ, `Input`'un kendi border/shadow/focus'u tek kaynak kalıyor,\r\n * \"çift kenarlık\" görünümü olmasın diye). Yazarak giriş + takvimden seçim\r\n * AYNI `value` model'ine yazıyor.\r\n *\r\n * Panel `select.html`'deki CDK overlay bloğunun birebir aynısı (şeffaf\r\n * backdrop, `(backdropClick)`/`(detach)` → kapat, bottom-start + flip\r\n * pozisyon). Panel kabuğu sabit formül: `rounded-lg bg-overlay p-3 shadow-2\r\n * dark:border dark:border-border-subtle` (bkz. table-filter-menu.html).\r\n */\r\n@Component({\r\n selector: 'mf-date-picker',\r\n exportAs: 'mfDatePicker',\r\n imports: [OverlayModule, Icon, Input, Calendar, Popover],\r\n host: { class: 'block' },\r\n templateUrl: './date-picker.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePicker), multi: true },\r\n ],\r\n})\r\nexport class DatePicker extends ValueAccessorBase<Date | null> implements ControlValueAccessor {\r\n readonly value = model<Date | null>(null);\r\n readonly min = input<Date | null>(null);\r\n readonly max = input<Date | null>(null);\r\n readonly locale = input<Locale>();\r\n readonly labels = input<MfDatePickerLabels>();\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n readonly ariaLabel = input('');\r\n\r\n private readonly dateLocaleToken = inject(MF_DATE_LOCALE);\r\n private readonly datePickerLabels = inject(MF_DATE_PICKER_LABELS);\r\n protected readonly effectiveLocale = computed(() => this.locale() ?? this.dateLocaleToken());\r\n protected readonly effectiveLabels = computed(() => this.labels() ?? this.datePickerLabels());\r\n\r\n protected readonly open = signal(false);\r\n protected readonly draft = signal('');\r\n protected readonly month = signal(startOfMonth(new Date()));\r\n\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\r\n\r\n constructor() {\r\n super();\r\n // `value()`/`locale()` değişince taslak metin ve görünen ay yeniden\r\n // hesaplanır — `locale()` BİLEREK izlenen bağımlılıklardan biri (dil\r\n // değişince mevcut değer YENİ yerel kısa biçimde gösterilsin).\r\n effect(() => {\r\n const v = this.value();\r\n const locale = this.effectiveLocale();\r\n untracked(() => {\r\n this.draft.set(v ? formatDateInput(v, locale) : '');\r\n this.month.set(startOfMonth(v ?? new Date()));\r\n });\r\n });\r\n }\r\n\r\n writeValue(value: Date | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n private setValue(next: Date | null): void {\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n protected onInput(raw: string): void {\r\n this.draft.set(raw);\r\n this.onTouched();\r\n }\r\n\r\n protected commitDraft(): void {\r\n const text = this.draft().trim();\r\n if (!text) {\r\n this.setValue(null);\r\n return;\r\n }\r\n const parsed = parseDateInput(text, this.effectiveLocale());\r\n if (parsed && !isDayDisabled(parsed, this.min(), this.max())) {\r\n this.setValue(parsed);\r\n } else {\r\n const v = this.value();\r\n this.draft.set(v ? formatDateInput(v, this.effectiveLocale()) : '');\r\n }\r\n }\r\n\r\n protected onDayPick(day: Date): void {\r\n this.setValue(day);\r\n this.close();\r\n }\r\n\r\n protected pickToday(): void {\r\n this.onDayPick(startOfDay(new Date()));\r\n }\r\n\r\n protected clear(): void {\r\n this.setValue(null);\r\n this.inputEl()?.nativeElement.focus();\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n }\r\n\r\n protected onEscape(): void {\r\n if (!this.open()) return;\r\n const v = this.value();\r\n this.draft.set(v ? formatDateInput(v, this.effectiveLocale()) : '');\r\n this.close();\r\n }\r\n}\r\n","<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 start-2.5 -translate-y-1/2 text-fg-subtle\"\r\n >calendar_today</span\r\n >\r\n <input\r\n mfInput\r\n #inputEl\r\n type=\"text\"\r\n class=\"ps-9\"\r\n [class.pr-8]=\"!!value()\"\r\n [hasError]=\"hasError()\"\r\n [disabled]=\"disabled()\"\r\n [placeholder]=\"effectiveLabels().placeholder\"\r\n [value]=\"draft()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"absolute top-1/2 end-2.5 -translate-y-1/2 appearance-none border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().clear\"\r\n (click)=\"clear()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"lg\"\r\n panelClass=\"w-auto\"\r\n (closed)=\"onEscape()\"\r\n >\r\n <mf-calendar\r\n [(month)]=\"month\"\r\n [selected]=\"value()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n />\r\n <div class=\"mt-2 flex items-center justify-between border-t border-border pt-2\">\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-accent transition-colors duration-fast ease-emphasis hover:text-accent-strong\"\r\n (click)=\"pickToday()\"\r\n >\r\n {{ effectiveLabels().today }}\r\n </button>\r\n @if (value()) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-xs font-medium text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"clear()\"\r\n >\r\n {{ effectiveLabels().clear }}\r\n </button>\r\n }\r\n </div>\r\n </mf-popover>\r\n</div>\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { addMonths, startOfMonth } from 'date-fns';\r\nimport type { Locale } from 'date-fns';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport {\r\n MF_DATE_LOCALE,\r\n MF_DATE_PICKER_LABELS,\r\n type MfDatePickerLabels,\r\n ValueAccessorBase,\r\n} from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { InputGroup, InputPrefix, InputSuffix } from '@mesgflow/ui-kit/input';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { Calendar } from './calendar';\r\nimport {\r\n dateRangeForPreset,\r\n formatDateInput,\r\n isDayDisabled,\r\n parseDateInput,\r\n type DateRange,\r\n type DateRangePresetId,\r\n} from './date-picker.model';\r\n\r\nconst PRESETS: DateRangePresetId[] = ['today', 'last7', 'last30', 'thisMonth'];\r\n\r\n/**\r\n * `<mf-date-range-picker [(value)]=\"range\" />` — `value` şekli\r\n * `{ start: Date | null; end: Date | null }` (bkz. `DateRange`).\r\n *\r\n * Tetikleyici tek kutu içinde İKİ metin input'u (başlangıç/bitiş) —\r\n * `DatePicker`'ın aksine burada `mfInput`'un KENDİ border/shadow'unu\r\n * KULLANMIYORUZ (iki input yan yana, \"çift kenarlık\" olmasın diye border/\r\n * shadow/focus DIŞ kutuya taşındı, iç input'lar çıplak — tek gerekçeli\r\n * istisna).\r\n *\r\n * Panelde solda ön ayar sütunu + sağda iki takvim (ikincisi\r\n * `[navigable]=\"false\"` — bkz. `calendar.ts`, \"birincinin bir fazlası\"\r\n * değişmezini koruyor). Onay YALNIZCA \"Uygula\"da dışarı çıkar — takvimde\r\n * gezinme/seçim kendi `draftRange` sinyalinde kalır, `value()` her tık ile\r\n * DEĞİŞMEZ (emsal: `table-page-jump.ts` — her tuş vuruşunda backend'e istek\r\n * atmama notu). \"Temizle\" bunun istisnası — anında commit eder.\r\n */\r\n@Component({\r\n selector: 'mf-date-range-picker',\r\n exportAs: 'mfDateRangePicker',\r\n imports: [OverlayModule, Icon, Button, Calendar, Popover, InputGroup, InputPrefix, InputSuffix],\r\n host: { class: 'block' },\r\n templateUrl: './date-range-picker.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateRangePicker), multi: true },\r\n ],\r\n})\r\nexport class DateRangePicker extends ValueAccessorBase<DateRange> implements ControlValueAccessor {\r\n readonly value = model<DateRange>({ start: null, end: null });\r\n readonly min = input<Date | null>(null);\r\n readonly max = input<Date | null>(null);\r\n readonly locale = input<Locale>();\r\n readonly labels = input<MfDatePickerLabels>();\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n\r\n private readonly dateLocaleToken = inject(MF_DATE_LOCALE);\r\n private readonly datePickerLabels = inject(MF_DATE_PICKER_LABELS);\r\n protected readonly effectiveLocale = computed(() => this.locale() ?? this.dateLocaleToken());\r\n protected readonly effectiveLabels = computed(() => this.labels() ?? this.datePickerLabels());\r\n\r\n protected readonly open = signal(false);\r\n protected readonly startDraft = signal('');\r\n protected readonly endDraft = signal('');\r\n protected readonly draftRange = signal<DateRange>({ start: null, end: null });\r\n protected readonly pickStage = signal<'start' | 'end'>('start');\r\n protected readonly hoverEnd = signal<Date | null>(null);\r\n protected readonly monthLeft = signal(startOfMonth(new Date()));\r\n protected readonly monthRight = signal(addMonths(startOfMonth(new Date()), 1));\r\n\r\n protected readonly presets = PRESETS;\r\n\r\n private readonly startEl = viewChild<ElementRef<HTMLInputElement>>('startEl');\r\n\r\n constructor() {\r\n super();\r\n // `value()`/`locale()` değişince iki taslak metin yeniden hesaplanır.\r\n effect(() => {\r\n const v = this.value();\r\n const locale = this.effectiveLocale();\r\n untracked(() => {\r\n this.startDraft.set(v.start ? formatDateInput(v.start, locale) : '');\r\n this.endDraft.set(v.end ? formatDateInput(v.end, locale) : '');\r\n });\r\n });\r\n\r\n // Sol takvim değişince sağ takvim HER ZAMAN bir fazlası — kendi başına\r\n // gezilemiyor (bkz. `Calendar.navigable`), tek yönlü senkron yeterli.\r\n effect(() => {\r\n const left = this.monthLeft();\r\n untracked(() => this.monthRight.set(addMonths(left, 1)));\r\n });\r\n\r\n // Panel her açılışta `value()`'dan taze bir taslakla başlar.\r\n effect(() => {\r\n if (!this.open()) return;\r\n untracked(() => {\r\n const v = this.value();\r\n this.draftRange.set(v);\r\n this.pickStage.set(v.start && !v.end ? 'end' : 'start');\r\n this.hoverEnd.set(null);\r\n this.monthLeft.set(startOfMonth(v.start ?? new Date()));\r\n });\r\n });\r\n }\r\n\r\n writeValue(value: DateRange): void {\r\n this.value.set(value);\r\n }\r\n\r\n private setValue(next: DateRange): void {\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n protected presetLabel(preset: DateRangePresetId): string {\r\n const labels = this.effectiveLabels();\r\n if (preset === 'today') return labels.presetToday;\r\n if (preset === 'last7') return labels.presetLast7;\r\n if (preset === 'last30') return labels.presetLast30;\r\n return labels.presetThisMonth;\r\n }\r\n\r\n protected applyPreset(preset: DateRangePresetId): void {\r\n const range = dateRangeForPreset(preset);\r\n this.setValue(range);\r\n this.close();\r\n }\r\n\r\n protected onStartInput(raw: string): void {\r\n this.startDraft.set(raw);\r\n this.onTouched();\r\n }\r\n\r\n protected onEndInput(raw: string): void {\r\n this.endDraft.set(raw);\r\n this.onTouched();\r\n }\r\n\r\n protected commitStartDraft(): void {\r\n const text = this.startDraft().trim();\r\n const current = this.value();\r\n if (!text) {\r\n this.setValue({ ...current, start: null });\r\n return;\r\n }\r\n const parsed = parseDateInput(text, this.effectiveLocale());\r\n if (parsed && !isDayDisabled(parsed, this.min(), this.max())) {\r\n const end = current.end && parsed > current.end ? null : current.end;\r\n this.setValue({ start: parsed, end });\r\n } else {\r\n this.startDraft.set(\r\n current.start ? formatDateInput(current.start, this.effectiveLocale()) : '',\r\n );\r\n }\r\n }\r\n\r\n protected commitEndDraft(): void {\r\n const text = this.endDraft().trim();\r\n const current = this.value();\r\n if (!text) {\r\n this.setValue({ ...current, end: null });\r\n return;\r\n }\r\n const parsed = parseDateInput(text, this.effectiveLocale());\r\n const validOrder = !current.start || (parsed && parsed >= current.start);\r\n if (parsed && validOrder && !isDayDisabled(parsed, this.min(), this.max())) {\r\n this.setValue({ ...current, end: parsed });\r\n } else {\r\n this.endDraft.set(current.end ? formatDateInput(current.end, this.effectiveLocale()) : '');\r\n }\r\n }\r\n\r\n protected onDayHover(day: Date | null): void {\r\n this.hoverEnd.set(day);\r\n }\r\n\r\n protected onDayPick(day: Date): void {\r\n const draft = this.draftRange();\r\n if (this.pickStage() === 'start' || (draft.start && draft.end)) {\r\n this.draftRange.set({ start: day, end: null });\r\n this.pickStage.set('end');\r\n this.hoverEnd.set(null);\r\n return;\r\n }\r\n\r\n const start = draft.start!;\r\n this.draftRange.set(day < start ? { start: day, end: start } : { start, end: day });\r\n this.pickStage.set('start');\r\n this.hoverEnd.set(null);\r\n }\r\n\r\n protected apply(): void {\r\n const draft = this.draftRange();\r\n if (!draft.start) return;\r\n this.setValue({ start: draft.start, end: draft.end ?? draft.start });\r\n this.close();\r\n }\r\n\r\n protected clear(): void {\r\n this.setValue({ start: null, end: null });\r\n this.draftRange.set({ start: null, end: null });\r\n this.pickStage.set('start');\r\n this.startEl()?.nativeElement.focus();\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n }\r\n\r\n protected onEscape(): void {\r\n if (!this.open()) return;\r\n const v = this.value();\r\n this.startDraft.set(v.start ? formatDateInput(v.start, this.effectiveLocale()) : '');\r\n this.endDraft.set(v.end ? formatDateInput(v.end, this.effectiveLocale()) : '');\r\n this.close();\r\n }\r\n}\r\n","<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <mf-input-group [hasError]=\"hasError()\" [disabled]=\"disabled()\">\r\n <span mfInputPrefix><span mfIcon [size]=\"18\">calendar_today</span></span>\r\n <input\r\n #startEl\r\n type=\"text\"\r\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"effectiveLabels().startDate\"\r\n [value]=\"startDraft()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveLabels().startDate\"\r\n (input)=\"onStartInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitStartDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n <span class=\"shrink-0 text-fg-subtle\" aria-hidden=\"true\">–</span>\r\n <input\r\n type=\"text\"\r\n class=\"w-0 min-w-0 flex-1 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"effectiveLabels().endDate\"\r\n [value]=\"endDraft()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"effectiveLabels().endDate\"\r\n (input)=\"onEndInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitEndDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (value().start || value().end) {\r\n <button\r\n mfInputSuffix\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().clear\"\r\n (click)=\"clear()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n </mf-input-group>\r\n\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"none\"\r\n panelClass=\"flex w-auto\"\r\n (closed)=\"onEscape()\"\r\n >\r\n <div class=\"flex flex-col gap-0.5 border-e border-border p-2\">\r\n @for (preset of presets; track preset) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n (click)=\"applyPreset(preset)\"\r\n >\r\n {{ presetLabel(preset) }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-2 p-3\">\r\n <div class=\"flex gap-4\">\r\n <mf-calendar\r\n mode=\"range\"\r\n [(month)]=\"monthLeft\"\r\n [rangeStart]=\"draftRange().start\"\r\n [rangeEnd]=\"draftRange().end\"\r\n [hoverEnd]=\"hoverEnd()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n (dayHover)=\"onDayHover($event)\"\r\n />\r\n <div class=\"hidden sm:block\">\r\n <mf-calendar\r\n mode=\"range\"\r\n [month]=\"monthRight()\"\r\n [navigable]=\"false\"\r\n [rangeStart]=\"draftRange().start\"\r\n [rangeEnd]=\"draftRange().end\"\r\n [hoverEnd]=\"hoverEnd()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [locale]=\"effectiveLocale()\"\r\n [labels]=\"effectiveLabels()\"\r\n (dayPick)=\"onDayPick($event)\"\r\n (dayHover)=\"onDayHover($event)\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"flex items-center justify-end gap-2 border-t border-border pt-2\">\r\n <button mfButton tone=\"neutral\" appearance=\"text\" size=\"sm\" type=\"button\" (click)=\"clear()\">\r\n {{ effectiveLabels().clear }}\r\n </button>\r\n <button\r\n mfButton\r\n tone=\"primary\"\r\n appearance=\"filled\"\r\n size=\"sm\"\r\n type=\"button\"\r\n [disabled]=\"!draftRange().start\"\r\n (click)=\"apply()\"\r\n >\r\n {{ effectiveLabels().apply }}\r\n </button>\r\n </div>\r\n </div>\r\n </mf-popover>\r\n</div>\r\n","import { Component, input } from '@angular/core';\r\n\r\nexport interface DescriptionItem {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport type DescriptionListOrientation = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * `<mf-description-list [items]=\"[{label: 'E-posta', value: 'a@b.com'}]\" />`\r\n * — salt-okunur alan/değer çiftleri için (ör. bir profil özeti). `horizontal`\r\n * (varsayılan): etiket solda (1 sütun), değer sağda (2 sütun) — ayarlar\r\n * panellerindeki tipik \"satır\" deseni. `vertical`: etiket değerin ÜSTÜNDE,\r\n * yığılı — dar bir kart/kenar çubuğu içinde daha rahat.\r\n */\r\n@Component({\r\n selector: 'mf-description-list',\r\n exportAs: 'mfDescriptionList',\r\n host: { class: 'block' },\r\n template: `\r\n <dl class=\"divide-y divide-border\">\r\n @for (item of items(); track item.label) {\r\n <div\r\n [class]=\"\r\n orientation() === 'horizontal'\r\n ? 'grid grid-cols-3 gap-4 py-2'\r\n : 'flex flex-col gap-0.5 py-2'\r\n \"\r\n >\r\n <dt class=\"text-sm text-fg-subtle\">{{ item.label }}</dt>\r\n <dd\r\n [class]=\"\r\n orientation() === 'horizontal' ? 'col-span-2 text-sm text-fg' : 'text-sm text-fg'\r\n \"\r\n >\r\n {{ item.value }}\r\n </dd>\r\n </div>\r\n }\r\n </dl>\r\n `,\r\n})\r\nexport class DescriptionList {\r\n readonly items = input.required<DescriptionItem[]>();\r\n readonly orientation = input<DescriptionListOrientation>('horizontal');\r\n}\r\n","import { signal } from '@angular/core';\r\nimport type { DialogPlacement, DialogSize } from './dialog.model';\r\n\r\nexport interface DialogCustomSize {\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Dialog başına TEK instance — `DialogService.open()` her açılışta yeni bir\r\n * tane üretip `options`'tan doldurur, CDK `DialogConfig.providers` ile o\r\n * dialog'un (içerik component'inin) injector'ına verir. `Dialog` (dialog.ts)\r\n * kendi `@Component.providers`'ında `skipSelf` ile bunu arar — bulamazsa\r\n * (ör. overlay olmadan tek başına render edilen statik bir önizleme/demo)\r\n * kendi yerel instance'ını üretir, hiçbir şey patlamaz.\r\n *\r\n * Boyut/maximize/drag/resize/sheet durumunun TAMAMI burada yaşıyor — `Dialog`\r\n * kendi `@Input()`'larıyla DEĞİL, bu sınıfı okuyarak render ediyor. Böylece\r\n * `DialogService.open(SomeForm, { size:'lg', maximizable:true })` gibi bir\r\n * çağrı, `SomeForm`'un template'inde 1+ seviye iç içe olan `<mf-dialog>`'a\r\n * DI üzerinden ulaşabiliyor (`@Input()` ile mümkün olmazdı — DialogService\r\n * `Dialog`'u değil, `SomeForm`'u örnekliyor).\r\n */\r\nexport class DialogSurface {\r\n readonly size = signal<DialogSize>('md');\r\n readonly placement = signal<DialogPlacement>('center');\r\n readonly maximizable = signal(false);\r\n readonly draggable = signal(false);\r\n readonly resizable = signal(false);\r\n readonly maximized = signal(false);\r\n /** Kullanıcı kenardan boyutlandırdıysa dolu; maximize/sheet'te yok sayılır. */\r\n readonly customSize = signal<DialogCustomSize | null>(null);\r\n /** < 640px — `DialogService` `BreakpointObserver` ile besler. */\r\n readonly sheet = signal(false);\r\n /** Kapanış animasyonu oynarken `true` — bkz. `DialogService.open()` `closePredicate`. */\r\n readonly closing = signal(false);\r\n\r\n toggleMaximize(): void {\r\n this.maximized.update((value) => !value);\r\n this.customSize.set(null);\r\n }\r\n\r\n private dirtyCheck: (() => boolean) | null = null;\r\n /** Başarılı kayıt/programatik kapanışta `true` yapılır — bir sonraki kapanışta kirli-form uyarısı SORULMAZ. */\r\n readonly bypassDirtyGuard = signal(false);\r\n\r\n /** İçerik component'i (tüketicinin kendi form component'i) kendi \"kirli mi\" sorusunu buraya kaydeder — `DialogSurface` formun kendi şemasını bilmez. */\r\n registerDirty(check: () => boolean): void {\r\n this.dirtyCheck = check;\r\n }\r\n\r\n /** `DialogService.open()`'ın `closePredicate`'i ESC/backdrop/X kapanışında bunu okur. */\r\n isDirty(): boolean {\r\n return !this.bypassDirtyGuard() && !!this.dirtyCheck?.();\r\n }\r\n\r\n /** Başarılı kayıttan hemen önce çağrılır — programatik `dialogRef.close()` kirli-form uyarısı sormasın diye. */\r\n markClean(): void {\r\n this.bypassDirtyGuard.set(true);\r\n }\r\n}\r\n","import { Directive, ElementRef, computed, inject, input } from '@angular/core';\r\nimport { DialogSurface } from './dialog.surface';\r\n\r\nconst MIN_WIDTH = 320;\r\nconst MIN_HEIGHT = 240;\r\nconst VIEWPORT_MARGIN = 32;\r\nconst ARROW_STEP = 16;\r\nconst ARROW_STEP_LARGE = 64;\r\n\r\n/**\r\n * `<button mfDialogResizeHandle [ariaLabel]=\"...\">` — `Dialog`'un (dialog.ts)\r\n * sağ-alt köşesinde, `DialogSurface.customSize`'ı besleyen serbest boyutlandırma\r\n * tutamacı. Fare/dokunma İLE klavye (ok tuşları) İKİSİ de destekleniyor —\r\n * projects/ui-kit/README.md \"a11y checklist\" bölümü \"sadece fareyle çalışan bir\r\n * tutamaç\"ı kabul etmiyor.\r\n */\r\n@Directive({\r\n selector: '[mfDialogResizeHandle]',\r\n host: {\r\n role: 'slider',\r\n tabindex: '0',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-valuenow]': 'ariaValueNow()',\r\n '(pointerdown)': 'onPointerDown($event)',\r\n '(pointermove)': 'onPointerMove($event)',\r\n '(pointerup)': 'onPointerUp($event)',\r\n '(pointercancel)': 'onPointerUp($event)',\r\n '(keydown)': 'onKeydown($event)',\r\n },\r\n})\r\nexport class DialogResizeHandle {\r\n private readonly surface = inject(DialogSurface);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n readonly ariaLabel = input.required<string>();\r\n\r\n /** `role=\"slider\"` `aria-valuenow` zorunlu kılıyor (axe: `aria-required-attr`) — genişliği raporlar, özel boyut yoksa panelin ölçülen genişliğine, o da yoksa `MIN_WIDTH`'e düşer. */\r\n protected readonly ariaValueNow = computed(\r\n () => this.surface.customSize()?.width ?? this.panelRect()?.width ?? MIN_WIDTH,\r\n );\r\n\r\n private pointerId: number | null = null;\r\n private startX = 0;\r\n private startY = 0;\r\n private startWidth = 0;\r\n private startHeight = 0;\r\n\r\n protected onPointerDown(event: PointerEvent): void {\r\n if (event.button !== 0) return;\r\n const rect = this.panelRect();\r\n if (!rect) return;\r\n\r\n this.pointerId = event.pointerId;\r\n this.startX = event.clientX;\r\n this.startY = event.clientY;\r\n this.startWidth = this.surface.customSize()?.width ?? rect.width;\r\n this.startHeight = this.surface.customSize()?.height ?? rect.height;\r\n this.host.nativeElement.setPointerCapture(event.pointerId);\r\n event.preventDefault();\r\n }\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n if (this.pointerId !== event.pointerId) return;\r\n this.applySize(\r\n this.startWidth + (event.clientX - this.startX),\r\n this.startHeight + (event.clientY - this.startY),\r\n );\r\n }\r\n\r\n protected onPointerUp(event: PointerEvent): void {\r\n if (this.pointerId !== event.pointerId) return;\r\n this.pointerId = null;\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const rect = this.panelRect();\r\n const current = this.surface.customSize() ?? {\r\n width: rect?.width ?? MIN_WIDTH,\r\n height: rect?.height ?? MIN_HEIGHT,\r\n };\r\n const step = event.shiftKey ? ARROW_STEP_LARGE : ARROW_STEP;\r\n\r\n switch (event.key) {\r\n case 'ArrowRight':\r\n this.applySize(current.width + step, current.height);\r\n break;\r\n case 'ArrowLeft':\r\n this.applySize(current.width - step, current.height);\r\n break;\r\n case 'ArrowDown':\r\n this.applySize(current.width, current.height + step);\r\n break;\r\n case 'ArrowUp':\r\n this.applySize(current.width, current.height - step);\r\n break;\r\n case 'Home':\r\n this.surface.customSize.set(null);\r\n break;\r\n default:\r\n return;\r\n }\r\n event.preventDefault();\r\n }\r\n\r\n private panelRect(): DOMRect | null {\r\n return (\r\n this.host.nativeElement.closest<HTMLElement>('.cdk-overlay-pane')?.getBoundingClientRect() ??\r\n null\r\n );\r\n }\r\n\r\n private applySize(width: number, height: number): void {\r\n const maxWidth = window.innerWidth - VIEWPORT_MARGIN;\r\n const maxHeight = window.innerHeight - VIEWPORT_MARGIN;\r\n this.surface.customSize.set({\r\n width: Math.min(Math.max(width, MIN_WIDTH), maxWidth),\r\n height: Math.min(Math.max(height, MIN_HEIGHT), maxHeight),\r\n });\r\n }\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\nimport { glassSurface } from '@mesgflow/ui-kit/core';\r\n\r\n/**\r\n * Boyut ölçeği CSS `min()` ile viewport'a göre kendini sınırlıyor —\r\n * `max-w-[560px]` gibi ayrı bir \"hiçbir zaman viewport'tan taşma\" class'ıyla\r\n * `cn()`/tailwind-merge üzerinden birleştirilemezdi (ikisi aynı utility\r\n * grubu — `max-width` — sonuncusu kazanır, ikisi birden UYGULANMAZ). Tek\r\n * arbitrary value'da `min(N, 100vw-2rem)` ile ikisi birden garanti ediliyor.\r\n *\r\n * `state` (normal/maximized/sheet/drawer) boyut eksenine dik, tek-seçim bir eksen —\r\n * `Dialog` (dialog.ts) `DialogSurface`'ten okuyup hesaplıyor, tüketici\r\n * tarafından doğrudan set edilmiyor. `drawer` boyut ölçeğini (sm/md/lg/xl)\r\n * `normal` ile PAYLAŞIR ama genişliği AYNI şekilde uygulamaz — aşağıdaki\r\n * `compoundVariants`'a bak.\r\n *\r\n * **`drawer` neden `width` de alıyor, `max-width` yetmiyor mu**: sağa yaslı\r\n * `GlobalPositionStrategy` (`dialog.service.ts`) overlay wrapper'a\r\n * `align-items:flex-start` veriyor — bu, cross-axis stretch'i KAPATIYOR, yani\r\n * `.cdk-overlay-pane` içeriğine göre daralıyor (shrink-to-fit). Böyle bir\r\n * (genişliği belirsiz/auto) kapsayıcı içinde `mf-dialog`'un tabandaki\r\n * `w-full`'u (`width:100%`) CSS Sizing L3'e göre `width:auto`'ya döner —\r\n * yani panel `max-w-[min(N,...)]` TAVANINA hiç ulaşmadan, içeriğin doğal\r\n * genişliğinde kalır. `normal` (ortada yüzen) dialog için bu doğru davranış\r\n * (kısa bir onay kutusu tavana kadar zorla GENİŞLEMEMELİ), ama drawer için\r\n * YANLIŞ — üç CRUD formu içerik uzunluğuna göre üç farklı genişlikte açılırdı\r\n * (gerçek, gözlemlenen bir regresyon). Çözüm: `calc(100vw-2rem)` viewport'a\r\n * göre DEFINITE bir uzunluk — parent'ın genişliği belirsiz olsa bile bu\r\n * paradoksu atlıyor. `width` + `max-width` aynı ifadeyi taşıdığı için\r\n * `max-width` drawer'da fiilen artık gereksiz ama zararsız kalıyor.\r\n *\r\n * **`maximized` neden kendi `max-w-none`'ını taşıyor**: `size` (sm/md/lg/xl)\r\n * her zaman uygulanır, `state` ondan BAĞIMSIZ bir eksendir — `maximized` kendi\r\n * `max-w-none`'ını taşımazsa, `size`'ın `max-w-[min(N,...)]`'i (aynı `max-width`\r\n * grubu, ama `size` `state`'ten ÖNCE değerlendirildiği için `state` sonuncusu\r\n * kazanmadıkça) tek başına kalır ve `w-screen`'i geçersiz kılar — gerçek,\r\n * gözlemlenen bir regresyon: `maximizable:true, size:'lg'` bir dialog\r\n * büyütüldüğünde yükseklik `h-[100dvh]`'e ulaşırken genişlik hâlâ `lg`'nin\r\n * 720px tavanına sıkışıp kalıyordu (\"kenarlar kısa, sadece boyu uzuyor\").\r\n */\r\n/**\r\n * Panel yüzeyi `glassSurface` (bkz. `@mesgflow/ui-kit/core` — mikro\r\n * glassmorphism, 2026-09 Deep Emerald geçişi): arkadaki içerik `backdrop-blur`\r\n * destekleyen tarayıcılarda hafifçe görünür kalır, backdrop\r\n * (`.mf-dialog-backdrop`, motion.css) ayrıca karartıyor. `maximized` durumu\r\n * TAM VIEWPORT'u kapladığı için (arkasında blur'lanacak sayfa içeriği yok,\r\n * sadece backdrop) camı KAPATIP düz `bg-surface`'e döner — hem maliyetsiz hem\r\n * anlamsız bir blur'dan kaçınır.\r\n */\r\nexport const dialogVariants = cva(\r\n `relative flex w-full flex-col overflow-hidden border shadow-3 ${glassSurface}`,\r\n {\r\n variants: {\r\n size: {\r\n sm: 'max-w-[min(440px,calc(100vw-2rem))]',\r\n md: 'max-w-[min(560px,calc(100vw-2rem))]',\r\n lg: 'max-w-[min(720px,calc(100vw-2rem))]',\r\n xl: 'max-w-[min(960px,calc(100vw-2rem))]',\r\n full: 'max-w-none',\r\n },\r\n state: {\r\n normal: 'rounded-xl max-h-[85vh]',\r\n maximized:\r\n 'h-[100dvh] max-h-none w-screen max-w-none rounded-none supports-[backdrop-filter]:bg-surface supports-[backdrop-filter]:backdrop-blur-none',\r\n sheet: 'w-screen rounded-t-xl rounded-b-none max-h-[92dvh]',\r\n drawer: 'h-[100dvh] max-h-none rounded-l-xl rounded-r-none',\r\n },\r\n },\r\n compoundVariants: [\r\n { state: 'drawer', size: 'sm', class: 'w-[min(440px,calc(100vw-2rem))]' },\r\n { state: 'drawer', size: 'md', class: 'w-[min(560px,calc(100vw-2rem))]' },\r\n { state: 'drawer', size: 'lg', class: 'w-[min(720px,calc(100vw-2rem))]' },\r\n { state: 'drawer', size: 'xl', class: 'w-[min(960px,calc(100vw-2rem))]' },\r\n ],\r\n defaultVariants: { size: 'md', state: 'normal' },\r\n },\r\n);\r\n\r\nexport type DialogVariants = VariantProps<typeof dialogVariants>;\r\n","import { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { cn, MF_DIALOG_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { DialogResizeHandle } from './dialog-resize-handle';\r\nimport type { DialogSize } from './dialog.model';\r\nimport { DialogSurface } from './dialog.surface';\r\nimport { dialogVariants } from './dialog.variants';\r\n\r\nconst DRAG_MIN_VISIBLE = 48;\r\n\r\n/**\r\n * `<mf-dialog [title]=\"...\" [subtitle]=\"...\" [icon]=\"'group'\" (close)=\"onCancel()\">`\r\n * — `DialogService.open()`'ın açtığı her içerik component'i (tüketicinin kendi\r\n * form component'i, ör. `ConfirmDialog`) kendi kök elemanı olarak bunu kullanır. CDK Dialog'un\r\n * kendisi (bkz. dialog.service.ts) hiçbir görsel çerçeve DAYATMIYOR (backdrop hariç) —\r\n * panel görünümü (yuvarlak köşe/gölge/header/footer/kapatma düğmesi) TAMAMEN burada,\r\n * tek yerde yaşıyor.\r\n *\r\n * Boyut/placement/maximize/drag/resize/sheet durumu kendi `@Input()`'ları DEĞİL,\r\n * `DialogSurface` (DI ile enjekte edilir) — bkz. o dosyanın doc yorumu. `title`/\r\n * `subtitle`/`icon`/`fillBody` ise İÇERİĞE ait olduğu için normal input —\r\n * `[dialog-header]` slot'u tamamen özel bir başlık gerektiren durumlar için (bkz.\r\n * ConfirmDialog) kaçış kapısı olarak kalıyor.\r\n *\r\n * `stateVariant()` sırası (sheet → maximized → drawer → normal) bilinçli: mobil\r\n * sheet her zaman kazanır, ardından drag/resize/mobil-sheet'in yalnızca `normal`'da\r\n * açık olması (bkz. `dragEnabled`/`resizeHandleVisible`) drawer'da bu ikisinin\r\n * otomatik kapalı kalmasını BEDAVA sağlıyor — ayrı bir kontrol gerekmiyor.\r\n */\r\n@Component({\r\n selector: 'mf-dialog',\r\n exportAs: 'mfDialog',\r\n imports: [Button, Icon, DialogResizeHandle, CdkDragHandle],\r\n hostDirectives: [CdkDrag],\r\n providers: [\r\n {\r\n provide: DialogSurface,\r\n useFactory: () =>\r\n inject(DialogSurface, { optional: true, skipSelf: true }) ?? new DialogSurface(),\r\n },\r\n ],\r\n host: {\r\n '[class]': 'hostClasses()',\r\n '[style.width.px]': 'customWidth()',\r\n '[style.height.px]': 'customHeight()',\r\n '(keydown.control.enter)': 'requestSubmit()',\r\n '(keydown.meta.enter)': 'requestSubmit()',\r\n },\r\n templateUrl: './dialog.html',\r\n})\r\nexport class Dialog {\r\n readonly title = input('');\r\n readonly subtitle = input('');\r\n readonly icon = input('');\r\n /** Sadece `DialogSurface` DI ile enjekte edilmediğinde (ör. statik bir önizleme/demo) etkili — gerçek dialog'larda `DialogService.open({ size })` kullanılır. */\r\n readonly size = input<DialogSize | undefined>(undefined);\r\n /**\r\n * `true` ise gövde kendi kaydırmasını KAPATIR (`overflow:hidden`) ve kalan\r\n * yüksekliği içeriğe `flex-1` ile devreder — içeriğin KENDİ tek scroll alanını\r\n * kurması beklenir (ör. uzun bir liste içeren bir form). \"Tek kaydırma bölgesi\"\r\n * kuralının uygulama noktası: dialog gövdesi + içerik aynı anda kaymaz.\r\n */\r\n readonly fillBody = input(false);\r\n // `close` adı native DOM `close` olayıyla çakışıyor (@angular-eslint/no-output-native);\r\n // mevcut public API — yeniden adlandırma kırıcı, ileri bir sürümde ele alınacak.\r\n // eslint-disable-next-line @angular-eslint/no-output-native\r\n readonly close = output<void>();\r\n\r\n protected readonly surface = inject(DialogSurface);\r\n protected readonly labels = inject(MF_DIALOG_LABELS);\r\n\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly cdkDrag = inject(CdkDrag, { self: true });\r\n private readonly scrollBody = viewChild<ElementRef<HTMLElement>>('scrollBody');\r\n\r\n protected readonly scrolledFromTop = signal(false);\r\n protected readonly hasMoreBelow = signal(false);\r\n\r\n protected readonly stateVariant = computed<'normal' | 'maximized' | 'sheet' | 'drawer'>(() => {\r\n if (this.surface.sheet()) return 'sheet';\r\n if (this.surface.maximized() || this.size() === 'full') return 'maximized';\r\n if (this.surface.placement() === 'right') return 'drawer';\r\n return 'normal';\r\n });\r\n\r\n protected readonly dragEnabled = computed(\r\n () => this.surface.draggable() && this.stateVariant() === 'normal',\r\n );\r\n protected readonly resizeHandleVisible = computed(\r\n () => this.surface.resizable() && this.stateVariant() === 'normal',\r\n );\r\n /** Drawer zaten tam yükseklik — büyütme düğmesinin anlamı yok, `surface.maximizable()` `true` olsa bile gizlenir. */\r\n protected readonly maximizeVisible = computed(\r\n () => this.surface.maximizable() && this.stateVariant() !== 'drawer',\r\n );\r\n\r\n protected readonly hostClasses = computed(() => {\r\n const closing = this.surface.closing();\r\n const state = this.stateVariant();\r\n const animateBase = state === 'sheet' ? 'sheet' : state === 'drawer' ? 'drawer' : 'dialog';\r\n return cn(\r\n dialogVariants({ size: this.size() ?? this.surface.size(), state }),\r\n state === 'normal' && this.surface.customSize() ? 'max-w-none max-h-none' : '',\r\n `animate-${animateBase}-${closing ? 'out' : 'in'}`,\r\n );\r\n });\r\n\r\n protected readonly customWidth = computed(() =>\r\n this.stateVariant() === 'normal' ? this.surface.customSize()?.width : undefined,\r\n );\r\n protected readonly customHeight = computed(() =>\r\n this.stateVariant() === 'normal' ? this.surface.customSize()?.height : undefined,\r\n );\r\n\r\n /** Kenara/tam ekrana yaslı yüzeyler (drawer, mobil sheet, maximized): bölgeler KALICI\r\n * çizgiyle ayrılır — header/content/footer iskeleti her zaman aynı görünür. Ortada\r\n * yüzen klasik dialog (`normal`, ör. ConfirmDialog) bugünkü kaydırma-gölgesi davranışını\r\n * korur — kısa bir onay kutusu gereksiz çizgi kazanmaz. */\r\n protected readonly framed = computed(() => this.stateVariant() !== 'normal');\r\n\r\n protected readonly headerBorder = computed(() => this.framed() || this.scrolledFromTop());\r\n protected readonly footerBorder = computed(() => this.framed() || this.hasMoreBelow());\r\n\r\n constructor() {\r\n this.cdkDrag.rootElementSelector = '.cdk-overlay-pane';\r\n this.cdkDrag.constrainPosition = (point, _dragRef, dimensions) => ({\r\n x: Math.min(\r\n Math.max(point.x, DRAG_MIN_VISIBLE - dimensions.width),\r\n window.innerWidth - DRAG_MIN_VISIBLE,\r\n ),\r\n y: Math.min(Math.max(point.y, 0), window.innerHeight - DRAG_MIN_VISIBLE),\r\n });\r\n\r\n effect(() => {\r\n this.cdkDrag.disabled = !this.dragEnabled();\r\n });\r\n\r\n effect(() => {\r\n if (this.surface.maximized() || this.surface.sheet()) {\r\n this.cdkDrag.reset();\r\n this.surface.customSize.set(null);\r\n }\r\n });\r\n\r\n const destroyRef = inject(DestroyRef);\r\n afterNextRender(() => {\r\n this.updateScrollShadow();\r\n const el = this.scrollBody()?.nativeElement;\r\n if (!el || typeof ResizeObserver === 'undefined') return;\r\n const observer = new ResizeObserver(() => this.updateScrollShadow());\r\n observer.observe(el);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n }\r\n\r\n protected updateScrollShadow(): void {\r\n const el = this.scrollBody()?.nativeElement;\r\n if (!el) return;\r\n this.scrolledFromTop.set(el.scrollTop > 1);\r\n this.hasMoreBelow.set(el.scrollHeight - el.clientHeight - el.scrollTop > 1);\r\n }\r\n\r\n /**\r\n * Ctrl/Cmd+Enter — tek yerde çözülür, her form bedava kazanır. Kaydet düğmesi\r\n * footer slot'unda `<form>`'un DIŞINDA yaşıyor (`form=\"role-form\"` attribute\r\n * ilişkilendirmesiyle çalışıyor) — bu yüzden düğmeye tıklamayı taklit etmek\r\n * yerine doğrudan `<form>` üzerinde `requestSubmit()` çağrılıyor; bu da native\r\n * kısıt doğrulamasını çalıştırıp mevcut `(submit)` bağlamasını tetikler.\r\n */\r\n protected requestSubmit(): void {\r\n this.elementRef.nativeElement.querySelector('form')?.requestSubmit();\r\n }\r\n}\r\n","<div\r\n class=\"flex shrink-0 items-start justify-between gap-3 px-6 pt-5 pb-4\"\r\n [class.border-b]=\"headerBorder()\"\r\n [class.border-border]=\"headerBorder()\"\r\n>\r\n <ng-content select=\"[dialog-header]\">\r\n @if (icon()) {\r\n <span\r\n class=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-md bg-surface-alt text-fg-muted\"\r\n >\r\n <span mfIcon [size]=\"20\">{{ icon() }}</span>\r\n </span>\r\n }\r\n <div\r\n cdkDragHandle\r\n class=\"min-w-0 flex-1 pt-0.5\"\r\n [class.cursor-grab]=\"dragEnabled()\"\r\n [class.active:cursor-grabbing]=\"dragEnabled()\"\r\n >\r\n @if (title()) {\r\n <h2 class=\"truncate font-display text-title text-fg\">{{ title() }}</h2>\r\n }\r\n @if (subtitle()) {\r\n <p class=\"mt-0.5 truncate text-sm text-fg-muted\">{{ subtitle() }}</p>\r\n }\r\n </div>\r\n </ng-content>\r\n\r\n <div class=\"flex shrink-0 items-center gap-1\">\r\n @if (maximizeVisible()) {\r\n <button\r\n mfButton\r\n appearance=\"text\"\r\n tone=\"neutral\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"surface.maximized() ? labels().fullscreenExit : labels().fullscreenEnter\"\r\n (click)=\"surface.toggleMaximize()\"\r\n >\r\n <span mfIcon [size]=\"18\">{{ surface.maximized() ? 'fullscreen_exit' : 'fullscreen' }}</span>\r\n </button>\r\n }\r\n <button\r\n mfButton\r\n appearance=\"text\"\r\n tone=\"neutral\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"labels().close\"\r\n (click)=\"close.emit()\"\r\n >\r\n <span mfIcon [size]=\"20\">close</span>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div\r\n #scrollBody\r\n class=\"flex-1 min-h-0 px-6\"\r\n [class.py-4]=\"framed()\"\r\n [class.overflow-y-auto]=\"!fillBody()\"\r\n [class.flex]=\"fillBody()\"\r\n [class.flex-col]=\"fillBody()\"\r\n [class.overflow-hidden]=\"fillBody()\"\r\n (scroll)=\"updateScrollShadow()\"\r\n>\r\n <ng-content />\r\n</div>\r\n\r\n<div\r\n class=\"shrink-0 px-6 py-4 [&:not(:has(*))]:hidden\"\r\n [class.border-t]=\"footerBorder()\"\r\n [class.border-border]=\"footerBorder()\"\r\n>\r\n <ng-content select=\"[dialog-footer]\" />\r\n</div>\r\n\r\n@if (resizeHandleVisible()) {\r\n <button\r\n mfDialogResizeHandle\r\n type=\"button\"\r\n [ariaLabel]=\"labels().resize\"\r\n class=\"absolute right-1 bottom-1 flex h-4 w-4 cursor-se-resize items-center justify-center rounded-xs text-fg-subtle hover:text-fg-muted focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n >\r\n <span mfIcon [size]=\"14\">south_east</span>\r\n </button>\r\n}\r\n","import { DIALOG_DATA, DialogRef } from '@angular/cdk/dialog';\r\nimport { Component, computed, inject, signal } from '@angular/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport type { ButtonTone } from '@mesgflow/ui-kit/button';\r\nimport { MF_DIALOG_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Dialog } from './dialog';\r\nimport type { ConfirmDialogData, ConfirmTone } from './dialog.model';\r\n\r\nconst TONE_ICON: Record<ConfirmTone, string> = {\r\n danger: 'warning',\r\n warning: 'warning',\r\n info: 'info',\r\n success: 'check_circle',\r\n neutral: 'help',\r\n};\r\n\r\n/** Rozet renkleri Badge'in `badge.variants.ts`'teki tonal işaret rol token'ını (`bg-X-tint text-X-tint-fg`) birebir izliyor. */\r\nconst TONE_BADGE_CLASS: Record<ConfirmTone, string> = {\r\n danger: 'bg-danger-tint text-danger-tint-fg',\r\n warning: 'bg-warning-tint text-warning-tint-fg',\r\n info: 'bg-info-tint text-info-tint-fg',\r\n success: 'bg-success-tint text-success-tint-fg',\r\n neutral: 'bg-surface-alt text-fg-muted',\r\n};\r\n\r\n/**\r\n * Onay diyaloğunun içerik component'i — `DialogService.confirm()`/`confirmDelete()`/\r\n * `alert()` (bkz. dialog.service.ts) bunu açıp `DialogRef<boolean>`'ı `Promise`'e\r\n * çeviriyor. `Dialog`'un (dialog.ts) `[dialog-header]` kaçış kapısını kullanıyor —\r\n * ton'a göre renkli ikon rozeti, generic `Dialog`'un kendi `[icon]` input'unun\r\n * desteklemediği bir şey (o sadece nötr bir rozet çizer), bu yüzden kendi başlığını\r\n * kendi çiziyor.\r\n */\r\n@Component({\r\n selector: 'mf-confirm-dialog',\r\n imports: [Dialog, Button, Icon],\r\n host: { class: 'contents' },\r\n templateUrl: './confirm-dialog.html',\r\n})\r\nexport class ConfirmDialog {\r\n protected readonly data = inject<ConfirmDialogData>(DIALOG_DATA);\r\n private readonly dialogRef = inject(DialogRef<boolean, ConfirmDialog>);\r\n protected readonly labels = inject(MF_DIALOG_LABELS);\r\n\r\n protected readonly tone = computed<ConfirmTone>(() => this.data.tone ?? 'neutral');\r\n protected readonly toneIcon = computed(() => TONE_ICON[this.tone()]);\r\n protected readonly toneBadgeClass = computed(() => TONE_BADGE_CLASS[this.tone()]);\r\n\r\n /** Her ton `filled` — warning da diğer tonlarla aynı `bg-X-fill` rol deseninde dolu blok kullanıyor (bkz. button.variants.ts), eski `outlined` istisnası kaldırıldı. */\r\n protected readonly confirmTone = computed<ButtonTone>(() => {\r\n const tone = this.tone();\r\n if (tone === 'danger') return 'danger';\r\n if (tone === 'warning') return 'warning';\r\n return 'primary';\r\n });\r\n\r\n protected readonly submitting = signal(false);\r\n protected readonly actionError = signal<string | null>(null);\r\n\r\n protected onCancel(): void {\r\n this.dialogRef.close(false);\r\n }\r\n\r\n protected async onConfirm(): Promise<void> {\r\n if (!this.data.action) {\r\n this.dialogRef.close(true);\r\n return;\r\n }\r\n\r\n this.submitting.set(true);\r\n this.actionError.set(null);\r\n this.dialogRef.disableClose = true;\r\n try {\r\n await this.data.action();\r\n this.dialogRef.close(true);\r\n } catch {\r\n this.actionError.set(this.labels().errorGeneric);\r\n } finally {\r\n this.submitting.set(false);\r\n this.dialogRef.disableClose = false;\r\n }\r\n }\r\n}\r\n","<mf-dialog size=\"sm\" (close)=\"onCancel()\">\r\n <div dialog-header class=\"flex items-start gap-3\">\r\n <span\r\n class=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-md\"\r\n [class]=\"toneBadgeClass()\"\r\n >\r\n <span mfIcon [size]=\"22\">{{ toneIcon() }}</span>\r\n </span>\r\n <div class=\"min-w-0 flex-1 pt-1.5\">\r\n <h2 class=\"truncate font-display text-title text-fg\">{{ data.title }}</h2>\r\n </div>\r\n </div>\r\n\r\n <p class=\"text-sm text-fg-muted\">{{ data.content }}</p>\r\n\r\n @if (actionError()) {\r\n <p class=\"mt-3 text-sm text-danger\">{{ actionError() }}</p>\r\n }\r\n\r\n <div dialog-footer class=\"flex justify-end gap-2\">\r\n @if (!data.alert) {\r\n <button\r\n mfButton\r\n appearance=\"outlined\"\r\n tone=\"neutral\"\r\n type=\"button\"\r\n [disabled]=\"submitting()\"\r\n (click)=\"onCancel()\"\r\n >\r\n {{ data.cancelLabel ?? labels().confirmCancel }}\r\n </button>\r\n }\r\n <button\r\n mfButton\r\n [tone]=\"confirmTone()\"\r\n appearance=\"filled\"\r\n type=\"button\"\r\n [disabled]=\"submitting()\"\r\n (click)=\"onConfirm()\"\r\n >\r\n @if (submitting()) {\r\n <span mfIcon [size]=\"16\" class=\"animate-spin\">progress_activity</span>\r\n }\r\n {{ data.confirmLabel ?? (data.alert ? labels().confirmOk : labels().confirmConfirm) }}\r\n </button>\r\n </div>\r\n</mf-dialog>\r\n","import { Dialog as CdkDialog, type DialogRef } from '@angular/cdk/dialog';\r\nimport { BreakpointObserver } from '@angular/cdk/layout';\r\nimport { createGlobalPositionStrategy } from '@angular/cdk/overlay';\r\nimport type { ComponentType } from '@angular/cdk/portal';\r\nimport { Injectable, Injector, inject } from '@angular/core';\r\nimport { MF_DIALOG_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { ConfirmDialog } from './confirm-dialog';\r\nimport type { ConfirmDialogData, DialogOptions } from './dialog.model';\r\nimport { DialogSurface } from './dialog.surface';\r\n\r\n/** `--duration-fast` (styles.css) ile birebir — `animate-dialog-out`/`animate-sheet-out` keyframe'lerinin süresi. */\r\nconst EXIT_MS = 120;\r\nconst SHEET_QUERY = '(max-width: 639.98px)';\r\n\r\nfunction normalizeClass(value: string | string[] | undefined): string[] {\r\n if (!value) return [];\r\n return Array.isArray(value) ? value : [value];\r\n}\r\n\r\n/**\r\n * Dialog açmanın tek, merkezi noktası — `@angular/cdk/dialog`'un `Dialog`\r\n * servisi ÜZERİNE ince bir katman (focus-trap/ESC/backdrop-click/geri-scroll-\r\n * engelleme davranışının TAMAMI CDK'dan geliyor, burada TEKRAR YAZILMADI — bkz.\r\n * projects/ui-kit/README.md \"a11y checklist\" bölümündeki \"elle yazmak son çare\" ilkesi).\r\n *\r\n * İçerik component'i (tüketicinin kendi form component'i, ör. `ConfirmDialog`) `@angular/cdk/dialog`'un\r\n * KENDİ `DIALOG_DATA`/`DialogRef` token'larını doğrudan `inject()` eder — ekstra bir\r\n * sarmalayıcı token'a gerek yok. Boyut/placement/maximize/drag/resize/sheet durumu\r\n * `DialogSurface` (bkz. o dosya) üzerinden, `providers` ile o dialog'un injector'ına\r\n * verilir — `Dialog` (dialog.ts) bunu DI'dan okuyarak render eder.\r\n *\r\n * **Tek kural**: kayıt oluştur/düzenle → `openDrawer()` (sağdan, `placement:'right'`);\r\n * onayla/bilgilendir/sil → `confirm()`/`confirmDelete()`/`alert()` (merkezi, `size:'sm'`).\r\n * Drawer ayrı bir primitif DEĞİL — `placement` sadece konum stratejisini ve\r\n * `Dialog.stateVariant()`'ı değiştiren bir eksen, geri kalan her şey (CDK Dialog,\r\n * closePredicate, kirli-form koruması, mobil sheet, kaydırma gölgesi) ortak.\r\n *\r\n * Kapanış animasyonu: CDK'nın `DialogRef.close()`'u `overlayRef.dispose()`'u SENKRON\r\n * çağırıyor, bir \"kapanıyor\" olayı/kancası yok. `closePredicate` bunun için bilinçli\r\n * bir kaçamak — `false` döndürmek kapanmayı iptal ediyor: ilk çağrıda `surface.closing`'i\r\n * `true` yapıp gerçek kapanmayı `EXIT_MS` geciktiriyoruz (panel bu sürede `Dialog`'un\r\n * kendi reaktif `animate-dialog-out`/`animate-sheet-out`/`animate-drawer-out` class'ıyla\r\n * görsel olarak kapanır), ikinci çağrıda (zaten `closing()===true`) gerçek `dispose()`'a\r\n * izin veriyoruz. ESC/backdrop/programatik `dialogRef.close(...)` HEPSİ bu predicate'ten\r\n * geçtiği için davranış tekdüze. `prefers-reduced-motion` gecikmeyi tamamen atlıyor —\r\n * AMA kirli-form kontrolünden SONRA: koruma reduced-motion kullanıcılarında da çalışmalı.\r\n *\r\n * **Kirli form koruması**: `surface.isDirty()` `true` dönerse kapanış iptal edilip\r\n * `confirmDiscard()` (kendi içindeki `ConfirmDialog`, ayrı/temiz bir `DialogSurface`\r\n * ile) açılır; kullanıcı onaylarsa `surface.markClean()` + gerçek `close()`. İçerik\r\n * component'i `constructor()`'da `surface.registerDirty(() => ...)` ile kendi\r\n * \"değişti mi\" sorusunu kaydeder.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class DialogService {\r\n private readonly cdkDialog = inject(CdkDialog);\r\n private readonly injector = inject(Injector);\r\n private readonly breakpointObserver = inject(BreakpointObserver);\r\n private readonly labels = inject(MF_DIALOG_LABELS);\r\n\r\n /** `ref` başına `DialogSurface` — tüketicinin kendi URL senkronizasyon mantığı, kirli-form durumunu PROAKTİF sormak için kullanabilir (kendi `closePredicate`'inin async akışıyla yarışmamak için). */\r\n // `DialogRef<D, C>`'nin `config.providers` callback'i kendi generic'lerine yapısal\r\n // olarak döngüsel referans veriyor (bkz. @angular/cdk/dialog) — `unknown` kullanmak\r\n // `ref`'i somut `DialogRef<R, C>` tipiyle çağıran DIŞARIDAKİ tüketicileri (public API)\r\n // derleme zamanında kırar. Registry nesne KİMLİĞİNE göre çalışıyor, tür parametreleri\r\n // ilgisiz; `any` burada BİLEREK.\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n private readonly surfaces = new WeakMap<DialogRef<any, any>, DialogSurface>();\r\n\r\n open<R = void, D = undefined, C = unknown>(\r\n component: ComponentType<C>,\r\n options?: DialogOptions<D>,\r\n ): DialogRef<R, C> {\r\n const surface = new DialogSurface();\r\n const placement = options?.placement ?? 'center';\r\n surface.size.set(options?.size ?? 'md');\r\n surface.placement.set(placement);\r\n surface.maximizable.set(options?.maximizable ?? false);\r\n surface.draggable.set(options?.draggable ?? false);\r\n surface.resizable.set(options?.resizable ?? false);\r\n\r\n const position = createGlobalPositionStrategy(this.injector);\r\n if (placement === 'right') position.right('0').top('0');\r\n else position.centerHorizontally().centerVertically();\r\n const reducedMotion =\r\n typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n\r\n const ref = this.cdkDialog.open<R, D, C>(component, {\r\n data: options?.data,\r\n panelClass: normalizeClass(options?.panelClass),\r\n backdropClass: 'mf-dialog-backdrop',\r\n positionStrategy: position,\r\n autoFocus: 'first-tabbable',\r\n restoreFocus: true,\r\n disableClose: options?.disableClose ?? false,\r\n // CDK'nın kendi tarayıcı geri/ileri tuşu dinleyicisi (varsayılan `true`) —\r\n // tüketici derin-bağlantı/URL senkronizasyonunu KENDİ route effect'i\r\n // üzerinden yönetiyorsa (kirli-form kontrolü + confirmDiscard + URL\r\n // senkronu dahil), CDK'nın PARALEL ve koordinasyonsuz kendi `close()`\r\n // çağrısı (kendi closePredicate'inden geçerek KENDİ confirmDiscard'ını\r\n // açar) tüketicininkiyle AYNI ANDA iki ayrı \"Kaydedilmemiş değişiklikler\"\r\n // onayı açılmasına yol açabilir — gerçek bir kullanıcı senaryosunda\r\n // tekrarlanan, doğrulanmış bir çakışma.\r\n closeOnNavigation: false,\r\n ariaLabel: options?.ariaLabel,\r\n providers: [{ provide: DialogSurface, useValue: surface }],\r\n closePredicate: (result) => {\r\n // Çıkış animasyonu turu — ikinci çağrı, gerçek dispose'a izin ver.\r\n if (surface.closing()) return true;\r\n\r\n // Kirli form koruması `reducedMotion`'DAN ÖNCE kontrol edilir — aksi halde\r\n // \"animasyonu azalt\" açık kullanıcılarda bu koruma hiç çalışmazdı.\r\n if (surface.isDirty()) {\r\n void this.confirmDiscard().then((discard) => {\r\n if (!discard) return;\r\n surface.markClean();\r\n ref.close(result as R | undefined);\r\n });\r\n return false;\r\n }\r\n\r\n if (reducedMotion) return true;\r\n surface.closing.set(true);\r\n ref.overlayRef.backdropElement?.classList.add('is-closing');\r\n setTimeout(() => ref.close(result as R | undefined), EXIT_MS);\r\n return false;\r\n },\r\n });\r\n\r\n this.surfaces.set(ref, surface);\r\n\r\n const breakpointSub = this.breakpointObserver.observe(SHEET_QUERY).subscribe(({ matches }) => {\r\n surface.sheet.set(matches);\r\n if (matches) {\r\n position.centerHorizontally().bottom('0');\r\n } else if (placement === 'right') {\r\n position.right('0').top('0');\r\n } else {\r\n position.centerHorizontally().centerVertically();\r\n }\r\n position.apply();\r\n });\r\n ref.closed.subscribe(() => breakpointSub.unsubscribe());\r\n\r\n return ref;\r\n }\r\n\r\n /**\r\n * Kayıt oluştur/düzenle formlarının TEK açılış noktası — sağdan drawer.\r\n * `maximizable` bilerek zorla kapatılıyor: drawer zaten tam yükseklik, büyütme\r\n * düğmesinin anlamı yok (bkz. `Dialog.maximizeVisible`).\r\n *\r\n * Varsayılan genişlik `md` (560px) — CRUD formları `size` GEÇMEZ, hepsi aynı\r\n * genişlikte açılmalı. İstisna: iki sütunlu bir form (sol dikey ray + sağ\r\n * panel gibi) `md` içine sığmazsa `xl` (960px) geçilebilir.\r\n */\r\n openDrawer<R = void, D = undefined, C = unknown>(\r\n component: ComponentType<C>,\r\n options?: Omit<DialogOptions<D>, 'placement'>,\r\n ): DialogRef<R, C> {\r\n return this.open<R, D, C>(component, { ...options, placement: 'right', maximizable: false });\r\n }\r\n\r\n /** `Promise<boolean>` döner — `if (await dialog.confirm(...))` çağıran taraf için `.subscribe()` zincirinden daha sade. */\r\n confirm(data: ConfirmDialogData): Promise<boolean> {\r\n const ref = this.open<boolean, ConfirmDialogData, ConfirmDialog>(ConfirmDialog, {\r\n data,\r\n size: 'sm',\r\n // `data.title` her zaman görünür bir başlık taşıyor — CDK'nın dialog konteynerine\r\n // erişilebilir ad olarak veriliyor (axe: `aria-dialog-name`); çağıran taraf\r\n // `ConfirmDialogData`'da ayrı bir `ariaLabel` alanı sağlayamıyor zaten.\r\n ariaLabel: data.title,\r\n });\r\n return new Promise((resolve) => ref.closed.subscribe((result) => resolve(!!result)));\r\n }\r\n\r\n /**\r\n * Kirli-form kapanış korumasının kendi onay diyaloğu — `confirmDiscard`'ın açtığı\r\n * `ConfirmDialog`'un `DialogSurface`'i her zaman temiz (yeni instance), bu yüzden\r\n * özyineleme sorunsuz. `closePredicate` içinden (ESC/backdrop/X) VE tüketicinin\r\n * kendi route senkronizasyonundan (URL değişip panel PROAKTİF kapatılmadan\r\n * önce) iki ayrı yoldan çağrılabildiği için `public`.\r\n *\r\n * `tone: 'warning'` — onay butonu artık DOLU warning (bkz.\r\n * `button.variants.ts`/`confirm-dialog.ts`, eski `outlined` istisnası\r\n * kaldırıldı).\r\n */\r\n confirmDiscard(): Promise<boolean> {\r\n const t = this.labels().discard;\r\n return this.confirm({\r\n title: t.title,\r\n content: t.content,\r\n tone: 'warning',\r\n confirmLabel: t.confirm,\r\n cancelLabel: t.cancel,\r\n });\r\n }\r\n\r\n /** Tüketici bir ref'i kapatmadan ÖNCE kirli mi diye sormak istiyorsa — kendi `closePredicate`'inin async akışıyla yarışmamak için `DialogSurface`'e doğrudan erişim. */\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n getSurface(ref: DialogRef<any, any>): DialogSurface | undefined {\r\n return this.surfaces.get(ref);\r\n }\r\n\r\n /** `confirm()`'in silme kısayolu — `tone:'danger'` + varsayılan \"Sil\" etiketi. */\r\n confirmDelete(data: Omit<ConfirmDialogData, 'tone'>): Promise<boolean> {\r\n const confirmLabel = data.confirmLabel ?? this.labels().confirmDelete;\r\n return this.confirm({ ...data, tone: 'danger', confirmLabel });\r\n }\r\n\r\n /** Tek butonlu bilgilendirme modu — sonuç önemsiz olduğu için `Promise<void>` döner. */\r\n alert(data: Omit<ConfirmDialogData, 'alert'>): Promise<void> {\r\n const ref = this.open<boolean, ConfirmDialogData, ConfirmDialog>(ConfirmDialog, {\r\n data: { ...data, alert: true },\r\n size: 'sm',\r\n ariaLabel: data.title,\r\n });\r\n return new Promise((resolve) => ref.closed.subscribe(() => resolve()));\r\n }\r\n}\r\n","// `MF_DIALOG_LABELS`/`MfDialogLabels` artık `@mesgflow/ui-kit/core`'da yaşıyor\r\n// (bkz. `core/i18n/tokens.ts` — MF_LABELS'ın bir seçicisi) — buradan AYRICA\r\n// re-export etmek `ng build ui-kit`'de TS2308 (ambiguous export) veriyor, çünkü\r\n// birincil barrel zaten hem `./core`'u hem `./dialog`'u `export *` ediyor.\r\n// Tüketici `import { MF_DIALOG_LABELS } from '@mesgflow/ui-kit'` (birincil barrel)\r\n// veya `'@mesgflow/ui-kit/core'` kullanır.\r\nexport * from './confirm-dialog';\r\nexport * from './dialog';\r\nexport * from './dialog-resize-handle';\r\nexport * from './dialog.model';\r\nexport * from './dialog.service';\r\nexport * from './dialog.surface';\r\nexport * from './dialog.variants';\r\n","import { Component, computed, input } from '@angular/core';\r\n\r\nexport type DividerOrientation = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * `<mf-divider />` (düz çizgi) veya `<mf-divider label=\"veya\" />` (ortasında\r\n * metin, ör. iki giriş yöntemini ayırmak için). `vertical` yönlendirmede\r\n * `label` YOKSAYILIR — dikey bir çizginin ortasına metin sığdırmak pratik\r\n * bir kullanım alanı değil.\r\n *\r\n * Etiketli halde iç çizgi parçaları `aria-hidden` — erişilebilir isim tek\r\n * seferde, host'un `role=\"separator\"` içeriğinden (görünür metinden) gelir,\r\n * ayrı bir `aria-label` gerekmez.\r\n */\r\n@Component({\r\n selector: 'mf-divider',\r\n exportAs: 'mfDivider',\r\n host: {\r\n '[class]': 'hostClasses()',\r\n role: 'separator',\r\n '[attr.aria-orientation]': 'orientation()',\r\n },\r\n template: `\r\n @if (label() && orientation() === 'horizontal') {\r\n <span class=\"h-px flex-1 bg-border\" aria-hidden=\"true\"></span>\r\n <span class=\"text-fg-muted shrink-0 text-xs\">{{ label() }}</span>\r\n <span class=\"h-px flex-1 bg-border\" aria-hidden=\"true\"></span>\r\n }\r\n `,\r\n})\r\nexport class Divider {\r\n readonly orientation = input<DividerOrientation>('horizontal');\r\n readonly label = input('');\r\n\r\n protected readonly hostClasses = computed(() => {\r\n if (this.label() && this.orientation() === 'horizontal') {\r\n return 'flex items-center gap-3';\r\n }\r\n return this.orientation() === 'vertical'\r\n ? 'inline-block h-full w-px bg-border'\r\n : 'block h-px w-full bg-border';\r\n });\r\n}\r\n","import { cva } from 'class-variance-authority';\r\n\r\nexport const dropzoneVariants = cva(\r\n 'flex cursor-pointer flex-col items-center justify-center rounded-lg border-2 border-dashed border-border px-6 py-10 text-center ' +\r\n 'transition-colors duration-fast ease-emphasis hover:border-border-strong hover:bg-surface-alt ' +\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring',\r\n {\r\n variants: {\r\n dragOver: {\r\n true: 'border-accent bg-primary-tint',\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: { dragOver: false, disabled: false },\r\n },\r\n);\r\n","import {\r\n Component,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { cn, MF_DROPZONE_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { dropzoneVariants } from './dropzone.variants';\r\n\r\nexport interface DropzoneRejection {\r\n file: File;\r\n reason: 'size' | 'type';\r\n}\r\n\r\n/**\r\n * `<mf-dropzone accept=\"image/*\" [maxSizeBytes]=\"5_000_000\" (filesSelected)=\"upload($event)\" />`\r\n *\r\n * Görsel/dosya yükleme — sürükle-bırak + tıkla-seç, boyut/tip doğrulaması.\r\n * Yükleme İLERLEMESİNİ TAŞIMAZ (bkz. `Progress` primitifi — tüketici kendi\r\n * yükleme state'ini `DropzoneRejection`/`filesSelected`'tan sonra ayrı\r\n * yönetir, bu component sadece \"hangi dosyalar seçildi/reddedildi\"yi bildirir).\r\n */\r\n@Component({\r\n selector: 'mf-dropzone',\r\n host: { class: 'block' },\r\n exportAs: 'mfDropzone',\r\n imports: [Icon],\r\n templateUrl: './dropzone.html',\r\n})\r\nexport class Dropzone {\r\n readonly accept = input('');\r\n readonly multiple = input(false);\r\n readonly maxSizeBytes = input<number | null>(null);\r\n readonly disabled = input(false);\r\n readonly label = input<string>();\r\n\r\n readonly filesSelected = output<File[]>();\r\n readonly rejected = output<DropzoneRejection[]>();\r\n\r\n private readonly dropzoneLabels = inject(MF_DROPZONE_LABELS);\r\n protected readonly effectiveLabel = computed(() => this.label() ?? this.dropzoneLabels().label);\r\n\r\n protected readonly dragOver = signal(false);\r\n protected readonly fileInput = viewChild<ElementRef<HTMLInputElement>>('fileInput');\r\n\r\n protected readonly classes = computed(() =>\r\n cn(dropzoneVariants({ dragOver: this.dragOver(), disabled: this.disabled() })),\r\n );\r\n\r\n protected onDragOver(event: DragEvent): void {\r\n event.preventDefault();\r\n if (this.disabled()) return;\r\n this.dragOver.set(true);\r\n }\r\n\r\n protected onDragLeave(): void {\r\n this.dragOver.set(false);\r\n }\r\n\r\n protected onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n this.dragOver.set(false);\r\n if (this.disabled()) return;\r\n this.handleFiles(Array.from(event.dataTransfer?.files ?? []));\r\n }\r\n\r\n protected onFileInputChange(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n this.handleFiles(Array.from(input.files ?? []));\r\n input.value = '';\r\n }\r\n\r\n protected browse(): void {\r\n if (this.disabled()) return;\r\n this.fileInput()?.nativeElement.click();\r\n }\r\n\r\n private handleFiles(files: File[]): void {\r\n const list = this.multiple() ? files : files.slice(0, 1);\r\n const accepted: File[] = [];\r\n const rejected: DropzoneRejection[] = [];\r\n\r\n for (const file of list) {\r\n const maxSize = this.maxSizeBytes();\r\n if (maxSize != null && file.size > maxSize) {\r\n rejected.push({ file, reason: 'size' });\r\n continue;\r\n }\r\n const accept = this.accept();\r\n if (accept && !this.matchesAccept(file, accept)) {\r\n rejected.push({ file, reason: 'type' });\r\n continue;\r\n }\r\n accepted.push(file);\r\n }\r\n\r\n if (accepted.length > 0) this.filesSelected.emit(accepted);\r\n if (rejected.length > 0) this.rejected.emit(rejected);\r\n }\r\n\r\n private matchesAccept(file: File, accept: string): boolean {\r\n return accept\r\n .split(',')\r\n .map((p) => p.trim())\r\n .some((pattern) => {\r\n if (pattern.endsWith('/*')) return file.type.startsWith(pattern.slice(0, -1));\r\n if (pattern.startsWith('.')) return file.name.toLowerCase().endsWith(pattern.toLowerCase());\r\n return file.type === pattern;\r\n });\r\n }\r\n}\r\n","<div\r\n [class]=\"classes()\"\r\n role=\"button\"\r\n tabindex=\"0\"\r\n [attr.aria-disabled]=\"disabled() || null\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave()\"\r\n (drop)=\"onDrop($event)\"\r\n (click)=\"browse()\"\r\n (keydown.enter)=\"browse()\"\r\n (keydown.space)=\"$event.preventDefault(); browse()\"\r\n>\r\n <span mfIcon [size]=\"28\" class=\"text-fg-subtle\">upload_file</span>\r\n <p class=\"mt-2 text-sm text-fg-muted\">{{ effectiveLabel() }}</p>\r\n</div>\r\n<!--\r\n BİLEREK yukarıdaki role=\"button\" div'inin DIŞINDA, kardeş konumda — axe-core'un\r\n `nested-interactive` kuralı (interaktif bir rol içinde gerçek bir native form\r\n kontrolü barındırmak) `aria-hidden=\"true\"` ile bile tatmin olmuyor (gerçek\r\n bulgu); gerçek dünyadaki dosya-yükleme bileşenlerinin standart çözümü de bu —\r\n native input DOM'da tetikleyicinin dışında durur, `browse()` `#fileInput`\r\n referansıyla programatik olarak tıklatır.\r\n-->\r\n<input\r\n #fileInput\r\n type=\"file\"\r\n class=\"hidden\"\r\n tabindex=\"-1\"\r\n aria-hidden=\"true\"\r\n [accept]=\"accept()\"\r\n [multiple]=\"multiple()\"\r\n [disabled]=\"disabled()\"\r\n (change)=\"onFileInputChange($event)\"\r\n/>\r\n","import { Component, input } from '@angular/core';\r\n\r\n/**\r\n * `<mf-empty-state title=\"...\" description=\"...\">`\r\n * `<svg illustration>...</svg>` (opsiyonel, BÜYÜK bir çizim/grafik slotu —\r\n * `icon`'un yerine geçer, ikisi BİRLİKTE kullanılmaz)\r\n * `<span icon mfIcon>inbox</span>` (opsiyonel küçük ikon slotu)\r\n * `<button mfButton action>...</button>` (opsiyonel aksiyon slotu)\r\n * `</mf-empty-state>`\r\n */\r\n@Component({\r\n selector: 'mf-empty-state',\r\n host: { class: 'block' },\r\n template: `\r\n <div\r\n class=\"flex flex-col items-center justify-center gap-3 rounded-lg border border-dashed border-border p-10 text-center\"\r\n >\r\n <div class=\"max-w-48\">\r\n <ng-content select=\"[illustration]\" />\r\n </div>\r\n <div class=\"text-fg-subtle\">\r\n <ng-content select=\"[icon]\" />\r\n </div>\r\n <div>\r\n <p class=\"font-display text-title text-fg\">{{ title() }}</p>\r\n @if (description()) {\r\n <p class=\"mt-1 text-sm text-fg-subtle\">{{ description() }}</p>\r\n }\r\n </div>\r\n <ng-content select=\"[action]\" />\r\n </div>\r\n `,\r\n})\r\nexport class EmptyState {\r\n readonly title = input.required<string>();\r\n readonly description = input<string>('');\r\n}\r\n","import { Component, input } from '@angular/core';\r\n\r\n/**\r\n * `<mf-field label=\"E-posta\" [error]=\"emailError()\">\r\n * <input mfInput type=\"email\" [id]=\"...\" />\r\n * </mf-field>`\r\n * `for`/`id` eşleşmesi (a11y) ÇAĞIRAN ekranın sorumluluğunda — bu component\r\n * label'ı otomatik bir input'a bağlamıyor (projected content'in id'sini bilmiyor).\r\n *\r\n * `error`, `string | undefined` kabul eder (sadece `string` DEĞİL) — çağıran\r\n * genelde `shared/forms/http-error.ts`'teki `resolveFieldError()`'ı doğrudan\r\n * bağlar, o da hata yokken `undefined` döner (boş string'e zorlamaya gerek yok).\r\n */\r\n@Component({\r\n selector: 'mf-field',\r\n host: { class: 'block' },\r\n templateUrl: './field.html',\r\n})\r\nexport class Field {\r\n readonly label = input<string>('');\r\n readonly for = input<string>('');\r\n readonly hint = input<string>('');\r\n readonly error = input<string | undefined>('');\r\n readonly required = input(false);\r\n /** `true` ise kalan yüksekliği doldurur (`flex-1 min-h-0`) — projected içeriğin kendi tek scroll alanı olduğu durumlar için (ör. uzun bir liste içeren form, bkz. `Dialog.fillBody`). */\r\n readonly grow = input(false);\r\n}\r\n","<div class=\"flex flex-col gap-1.5\" [class.min-h-0]=\"grow()\" [class.flex-1]=\"grow()\">\r\n @if (label()) {\r\n <label [attr.for]=\"for() || null\" class=\"text-label text-fg-muted\">\r\n {{ label() }}\r\n @if (required()) {\r\n <span class=\"text-danger\">*</span>\r\n }\r\n </label>\r\n }\r\n <ng-content />\r\n @if (error()) {\r\n <p class=\"text-xs text-danger\">{{ error() }}</p>\r\n } @else if (hint()) {\r\n <p class=\"text-xs text-fg-subtle\">{{ hint() }}</p>\r\n }\r\n</div>\r\n","import { CdkOverlayOrigin } from '@angular/cdk/overlay';\r\nimport { Component, DestroyRef, Directive, inject, input, model, signal } from '@angular/core';\r\nimport { Popover, type PopoverPlacement } from '@mesgflow/ui-kit/popover';\r\n\r\n/**\r\n * `<a href=\"/u/ayse\" [mfHoverCardTrigger]=\"card\">@ayse</a>\r\n * <mf-hover-card #card>…profil önizlemesi…</mf-hover-card>`\r\n *\r\n * Bir bağlantının üzerine gelince açılan zengin önizleme (profil, bağlantı özeti). Tooltip'ten\r\n * farkı: içerik etkileşimli olabilir (imleç karta geçince açık kalır) ve daha geniştir.\r\n *\r\n * Erişilebilirlik sınırı (Radix/GitHub ile aynı): kart GÖREN kullanıcılar için EK bilgidir —\r\n * tetikleyiciye klavye odağı gelince de açılır, Esc kapatır, ama odak karta taşınmaz ve içerik\r\n * ekran okuyucuya duyurulmaz. Karttaki bilgi/eylem sayfada başka bir yoldan erişilebilir\r\n * olmalı (tetikleyici bağlantının kendisi gibi). Dokunmatikte açılmaz (hover yok).\r\n */\r\n@Component({\r\n selector: 'mf-hover-card',\r\n exportAs: 'mfHoverCard',\r\n imports: [Popover],\r\n host: { class: 'contents' },\r\n template: `\r\n @if (origin(); as origin) {\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [(open)]=\"open\"\r\n [placement]=\"placement()\"\r\n [hasBackdrop]=\"false\"\r\n padding=\"none\"\r\n [panelClass]=\"panelClass()\"\r\n >\r\n <!-- İmleç karta geçince kapanma iptal olur; ayrılınca yeniden zamanlanır. -->\r\n <div class=\"p-4\" (pointerenter)=\"cancelClose()\" (pointerleave)=\"scheduleClose()\">\r\n <ng-content />\r\n </div>\r\n </mf-popover>\r\n }\r\n `,\r\n})\r\nexport class HoverCard {\r\n readonly open = model(false);\r\n readonly placement = input<PopoverPlacement>('bottom-start');\r\n /** Üzerine gelindikten sonra açılma gecikmesi (ms) — imleç geçip giderken kart fırlamasın. */\r\n readonly openDelay = input(500);\r\n /** Ayrıldıktan sonra kapanma gecikmesi (ms) — tetikleyiciden karta geçiş boşluğu için. */\r\n readonly closeDelay = input(200);\r\n readonly panelClass = input('w-72');\r\n\r\n protected readonly origin = signal<CdkOverlayOrigin | null>(null);\r\n private openTimer?: ReturnType<typeof setTimeout>;\r\n private closeTimer?: ReturnType<typeof setTimeout>;\r\n\r\n constructor() {\r\n inject(DestroyRef).onDestroy(() => this.clearTimers());\r\n }\r\n\r\n /** Tetikleyici kendini kaydeder — kart birden çok tetikleyiciyle paylaşılabilir (son etkin olan). */\r\n attach(origin: CdkOverlayOrigin): void {\r\n if (this.origin() !== origin) {\r\n this.open.set(false);\r\n this.origin.set(origin);\r\n }\r\n }\r\n\r\n scheduleOpen(immediate = false): void {\r\n this.cancelClose();\r\n clearTimeout(this.openTimer);\r\n if (immediate || this.open()) {\r\n this.open.set(true);\r\n return;\r\n }\r\n this.openTimer = setTimeout(() => this.open.set(true), this.openDelay());\r\n }\r\n\r\n scheduleClose(): void {\r\n clearTimeout(this.openTimer);\r\n clearTimeout(this.closeTimer);\r\n this.closeTimer = setTimeout(() => this.open.set(false), this.closeDelay());\r\n }\r\n\r\n cancelClose(): void {\r\n clearTimeout(this.closeTimer);\r\n }\r\n\r\n close(): void {\r\n this.clearTimers();\r\n this.open.set(false);\r\n }\r\n\r\n private clearTimers(): void {\r\n clearTimeout(this.openTimer);\r\n clearTimeout(this.closeTimer);\r\n }\r\n}\r\n\r\n/** `:focus-visible` desteklenmeyen ortamda (eski motor/jsdom seçici hatası) odağı klavye sayar. */\r\nfunction isKeyboardFocus(target: Element | null): boolean {\r\n try {\r\n return target?.matches(':focus-visible') ?? true;\r\n } catch {\r\n return true;\r\n }\r\n}\r\n\r\n/** `[mfHoverCardTrigger]=\"card\"` — bkz. `HoverCard`. CDK overlay kökü olarak kendini kaydeder. */\r\n@Directive({\r\n selector: '[mfHoverCardTrigger]',\r\n exportAs: 'mfHoverCardTrigger',\r\n hostDirectives: [CdkOverlayOrigin],\r\n host: {\r\n '(pointerenter)': 'onPointerEnter($event)',\r\n '(pointerleave)': 'onPointerLeave($event)',\r\n '(focus)': 'onFocus($event)',\r\n '(blur)': 'card().scheduleClose()',\r\n '(keydown.escape)': 'card().close()',\r\n },\r\n})\r\nexport class HoverCardTrigger {\r\n readonly card = input.required<HoverCard>({ alias: 'mfHoverCardTrigger' });\r\n private readonly origin = inject(CdkOverlayOrigin);\r\n\r\n protected onPointerEnter(event: PointerEvent): void {\r\n if (event.pointerType === 'touch') return;\r\n this.card().attach(this.origin);\r\n this.card().scheduleOpen();\r\n }\r\n\r\n protected onPointerLeave(event: PointerEvent): void {\r\n if (event.pointerType === 'touch') return;\r\n this.card().scheduleClose();\r\n }\r\n\r\n /** Yalnızca klavye odağı (`:focus-visible`) — fareyle tıklayıp odaklanmak kartı ayrıca açmasın. */\r\n protected onFocus(event: FocusEvent): void {\r\n if (!isKeyboardFocus(event.target as Element | null)) return;\r\n this.card().attach(this.origin);\r\n this.card().scheduleOpen(true);\r\n }\r\n}\r\n","import {\r\n InjectionToken,\r\n inject,\r\n makeEnvironmentProviders,\r\n type EnvironmentProviders,\r\n} from '@angular/core';\r\n\r\n/** SVG alt öğesi — Lucide'ın `IconNode` biçimiyle aynı: `['path', { d: '…' }]`. */\r\nexport type MfIconNode = readonly [tag: string, attrs: Readonly<Record<string, string | number>>];\r\n\r\nexport interface MfSvgIcon {\r\n /** Varsayılan `'0 0 24 24'` (Material Symbols 24px ızgarası, Lucide). */\r\n viewBox?: string;\r\n nodes: readonly MfIconNode[];\r\n /** `[filled]=\"true\"` iken kullanılacak dolu varyant (verilmezse `nodes`). */\r\n filledNodes?: readonly MfIconNode[];\r\n /**\r\n * `'fill'` (varsayılan — Material Symbols gibi dolgulu glifler) ya da `'stroke'` (Lucide gibi\r\n * çizgi ikonlar: `fill=\"none\"`, `stroke=\"currentColor\"`, yuvarlak uçlar).\r\n */\r\n mode?: 'fill' | 'stroke';\r\n /** `mode: 'stroke'` iken çizgi kalınlığı (varsayılan 2). */\r\n strokeWidth?: number;\r\n}\r\n\r\nexport type MfIconSet = Readonly<Record<string, MfSvgIcon>>;\r\n\r\nconst REGISTRATIONS = new InjectionToken<readonly MfIconSet[]>('mesgflow.icon-registrations');\r\n\r\n/**\r\n * Birleştirilmiş SVG ikon kaydı — `provideMfIcons()` uygulama kökünde birden çok kez çağrılabilir\r\n * (ör. temel set + marka ikonları), sonra gelen aynı adı ezer. Kök tekildir: tembel rota\r\n * injector'larındaki kayıtlar görülmez. Kayıt yoksa boş — `mfIcon` Material Symbols fontuna düşer.\r\n */\r\nexport const MF_ICON_REGISTRY = new InjectionToken<ReadonlyMap<string, MfSvgIcon>>(\r\n 'mesgflow.icon-registry',\r\n {\r\n factory: () => {\r\n const sets = inject(REGISTRATIONS, { optional: true }) ?? [];\r\n return new Map(sets.flatMap((set) => Object.entries(set)));\r\n },\r\n },\r\n);\r\n\r\n/**\r\n * `providers: [provideMfIcons({ mail: { nodes: [['path', { d: 'M…' }]] } })]`\r\n *\r\n * İsteğe bağlı SVG ikon kaydı. Kayıtlı bir ad `<span mfIcon>mail</span>` içinde geçtiğinde font\r\n * ligature'ı yerine satır içi SVG çizilir — FOUT'ta ham \"mail\" metni görünmez, yalnızca kullanılan\r\n * glifler pakete girer (tree-shake), özel/marka ikonları eklenebilir. Kaydedilmeyen adlar fontla\r\n * çalışmaya devam eder, yani geçiş kademeli ve kırıcı DEĞİL; tüm adlar kayıtlıysa\r\n * `@material-symbols/font-400` importu tamamen kaldırılabilir.\r\n *\r\n * Güvenlik: işaretleme dizgesi (innerHTML) kabul edilmez; SVG yapısal veriden\r\n * `createElementNS` ile kurulur, yalnızca şekil etiketleri ve sunum öznitelikleri geçer\r\n * (bkz. `icon.ts` `ALLOWED_TAGS`) — kayıt verisi dış kaynaktan gelse bile betik çalıştıramaz.\r\n */\r\nexport function provideMfIcons(icons: MfIconSet): EnvironmentProviders {\r\n return makeEnvironmentProviders([{ provide: REGISTRATIONS, useValue: icons, multi: true }]);\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n type AfterContentChecked,\r\n} from '@angular/core';\r\nimport { MF_ICON_REGISTRY, type MfIconNode, type MfSvgIcon } from './icon-registry';\r\n\r\nconst SVG_NS = 'http://www.w3.org/2000/svg';\r\n/** Yalnızca şekil etiketleri — `script`, `foreignObject`, `use`, `image` vb. hiçbir koşulda. */\r\nconst ALLOWED_TAGS = new Set(['path', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'rect']);\r\n/** Geometri + sunum öznitelikleri; `on*`, `href`, `style` yok. */\r\nconst ALLOWED_ATTRS = new Set([\r\n 'd',\r\n 'cx',\r\n 'cy',\r\n 'r',\r\n 'rx',\r\n 'ry',\r\n 'x',\r\n 'y',\r\n 'x1',\r\n 'y1',\r\n 'x2',\r\n 'y2',\r\n 'width',\r\n 'height',\r\n 'points',\r\n 'transform',\r\n 'fill',\r\n 'fill-rule',\r\n 'clip-rule',\r\n 'fill-opacity',\r\n 'stroke',\r\n 'stroke-width',\r\n 'stroke-linecap',\r\n 'stroke-linejoin',\r\n 'stroke-opacity',\r\n 'opacity',\r\n]);\r\n/** `url(...)` dış kaynağa/tanıma başvurabilir — değerde hiç izin verilmez. */\r\nconst UNSAFE_VALUE = /url\\s*\\(|javascript:/i;\r\n\r\n/**\r\n * `<span mfIcon>mail</span>` — içerik ikonun İNGİLİZCE adı; renk `text-*` ile, boyut `size`\r\n * (px) ile. `aria-hidden` zorunlu — ad metni (\"mail\") ekran okuyucuya SIZMAMALI.\r\n *\r\n * İki çizim yolu, aynı şablon:\r\n * - **Font** (varsayılan): Material Symbols Outlined ligature'ı (weight 400 — BİLEREK 300 değil,\r\n * ince ağırlık Inter gövde metninin yanında soluk duruyordu; bkz. preset.css).\r\n * - **SVG**: ad `provideMfIcons()` ile kaydedildiyse satır içi SVG çizilir, ad metni yerinde\r\n * kalır ama `font-size: 0` ile görünmez (Angular'ın metin düğümüne ve `@if`/`@switch`\r\n * çapalarına dokunulmaz — düğüm taşımak denetim akışını bozardı). Font sınıfı hiç eklenmez;\r\n * tüm kullanılan adlar kayıtlıysa font dosyası HİÇ indirilmez.\r\n *\r\n * Ad, ilk değişiklik algılama turunda (`ngAfterContentChecked` — içerik bağlamaları o anda\r\n * güncel) okunur; `{{ item.icon }}` gibi dinamik adlar her turda yeniden karşılaştırılır.\r\n * Kayıt boşsa bu kanca hemen döner (fontla çalışan uygulamalar için sıfır maliyet).\r\n */\r\n@Directive({\r\n selector: 'span[mfIcon]',\r\n host: {\r\n class: 'pointer-events-none inline-block leading-none select-none',\r\n '[class.material-symbols-outlined]': '!svgIcon()',\r\n '[style.font-size.px]': 'svgIcon() ? 0 : size()',\r\n '[style.font-variation-settings]': 'svgIcon() ? null : variationSettings()',\r\n '[attr.aria-hidden]': 'true',\r\n },\r\n})\r\nexport class Icon implements AfterContentChecked {\r\n readonly size = input(20);\r\n readonly filled = input(false);\r\n\r\n private readonly registry = inject(MF_ICON_REGISTRY);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly name = signal('');\r\n private svg: SVGSVGElement | null = null;\r\n private renderedKey = '';\r\n\r\n protected readonly svgIcon = computed(() => this.registry.get(this.name()) ?? null);\r\n protected readonly variationSettings = computed(() => `'FILL' ${this.filled() ? 1 : 0}`);\r\n\r\n ngAfterContentChecked(): void {\r\n if (this.registry.size === 0) return;\r\n const host = this.host.nativeElement;\r\n // Kendi SVG'miz metin taşımaz — `textContent` yalnızca ad metnidir.\r\n this.name.set((host.textContent ?? '').trim());\r\n\r\n const icon = this.svgIcon();\r\n const key = icon ? `${this.name()}|${this.size()}|${this.filled()}` : '';\r\n if (key === this.renderedKey) return;\r\n this.renderedKey = key;\r\n this.svg?.remove();\r\n this.svg = icon ? this.buildSvg(host.ownerDocument, icon) : null;\r\n if (this.svg) host.appendChild(this.svg);\r\n }\r\n\r\n private buildSvg(doc: Document, icon: MfSvgIcon): SVGSVGElement {\r\n const svg = doc.createElementNS(SVG_NS, 'svg');\r\n const size = String(this.size());\r\n svg.setAttribute('viewBox', icon.viewBox ?? '0 0 24 24');\r\n svg.setAttribute('width', size);\r\n svg.setAttribute('height', size);\r\n svg.setAttribute('aria-hidden', 'true');\r\n svg.setAttribute('focusable', 'false');\r\n svg.setAttribute('class', 'block');\r\n if (icon.mode === 'stroke') {\r\n svg.setAttribute('fill', 'none');\r\n svg.setAttribute('stroke', 'currentColor');\r\n svg.setAttribute('stroke-width', String(icon.strokeWidth ?? 2));\r\n svg.setAttribute('stroke-linecap', 'round');\r\n svg.setAttribute('stroke-linejoin', 'round');\r\n } else {\r\n svg.setAttribute('fill', 'currentColor');\r\n }\r\n const nodes = this.filled() && icon.filledNodes ? icon.filledNodes : icon.nodes;\r\n for (const node of nodes) {\r\n const child = this.buildNode(doc, node);\r\n if (child) svg.appendChild(child);\r\n }\r\n return svg;\r\n }\r\n\r\n private buildNode(doc: Document, [tag, attrs]: MfIconNode): SVGElement | null {\r\n if (!ALLOWED_TAGS.has(tag)) return null;\r\n const el = doc.createElementNS(SVG_NS, tag);\r\n for (const [name, value] of Object.entries(attrs)) {\r\n const text = String(value);\r\n if (ALLOWED_ATTRS.has(name) && !UNSAFE_VALUE.test(text)) el.setAttribute(name, text);\r\n }\r\n return el;\r\n }\r\n}\r\n","import {\r\n Component,\r\n Renderer2,\r\n afterEveryRender,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n linkedSignal,\r\n signal,\r\n} from '@angular/core';\r\nimport { cn, MF_CHARACTER_COUNT_LABELS } from '@mesgflow/ui-kit/core';\r\n\r\nlet characterCountIdSeq = 0;\r\n\r\n/** Kalan karakter bu sayının altına inince her tuşta, üstündeyken 5'in katlarında duyurulur. */\r\nconst ANNOUNCE_EVERY_BELOW = 5;\r\n\r\n/**\r\n * `<textarea mfInput #bio maxlength=\"280\"></textarea>\r\n * <mf-character-count [for]=\"bio\" />`\r\n *\r\n * Görünen metin `12 / 280` (sınır yoksa yalnızca `12`) ekran okuyucudan GİZLİ. Bunun yerine:\r\n * - hedef alanın `aria-describedby`'ına eklenen gizli bir açıklama (\"268 characters remaining\"),\r\n * alana odaklanınca okunur;\r\n * - sınıra yaklaşınca (`warnAt`, varsayılan %90) bir `aria-live` bölgesi, her tuşta DEĞİL\r\n * 5'in katlarında, son 5 karakterde ise her tuşta duyurur — gevezelik etmeden haber verir.\r\n *\r\n * Sınır: `max` verilirse YUMUŞAK sınır (yazmaya izin verir, aşım `danger` ve negatif gösterilir —\r\n * tüketici alanı ayrıca `hasError` ile işaretler); verilmezse hedefin `maxlength`'i (tarayıcı\r\n * zaten engeller). Sayım `value.length` — tarayıcının `maxlength` sayımıyla (UTF-16) birebir.\r\n * Programatik değer değişimleri (form reset, `writeValue`) her render'dan sonra yakalanır.\r\n */\r\n@Component({\r\n selector: 'mf-character-count',\r\n exportAs: 'mfCharacterCount',\r\n host: { '[class]': 'classes()' },\r\n template: `\r\n <span aria-hidden=\"true\">{{ display() }}</span>\r\n <span class=\"sr-only\" [id]=\"descriptionId\">{{ description() }}</span>\r\n <span class=\"sr-only\" aria-live=\"polite\">{{ announcement() }}</span>\r\n `,\r\n})\r\nexport class CharacterCount {\r\n readonly for = input.required<HTMLInputElement | HTMLTextAreaElement>();\r\n /** Yumuşak sınır. Verilmezse hedefin `maxlength` özniteliği kullanılır. */\r\n readonly max = input<number>();\r\n /** Uyarı tonunun başladığı doluluk oranı (0–1). */\r\n readonly warnAt = input(0.9);\r\n\r\n private readonly labels = inject(MF_CHARACTER_COUNT_LABELS);\r\n private readonly renderer = inject(Renderer2);\r\n protected readonly descriptionId = `mf-character-count-${++characterCountIdSeq}`;\r\n\r\n protected readonly length = signal(0);\r\n\r\n protected readonly limit = computed(() => {\r\n const max = this.max();\r\n if (max !== undefined) return max;\r\n const native = this.for().maxLength;\r\n return native > 0 ? native : null;\r\n });\r\n protected readonly remaining = computed(() => {\r\n const limit = this.limit();\r\n return limit === null ? null : limit - this.length();\r\n });\r\n\r\n protected readonly tone = computed<'muted' | 'warning' | 'danger'>(() => {\r\n const limit = this.limit();\r\n const remaining = this.remaining();\r\n if (limit === null || remaining === null) return 'muted';\r\n if (remaining <= 0) return 'danger';\r\n return this.length() >= limit * this.warnAt() ? 'warning' : 'muted';\r\n });\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n 'block text-end text-xs tabular-nums transition-colors duration-fast ease-emphasis',\r\n this.tone() === 'danger'\r\n ? 'font-medium text-danger'\r\n : this.tone() === 'warning'\r\n ? 'text-warning'\r\n : 'text-fg-subtle',\r\n ),\r\n );\r\n\r\n protected readonly display = computed(() => {\r\n const limit = this.limit();\r\n return limit === null ? `${this.length()}` : `${this.length()} / ${limit}`;\r\n });\r\n\r\n protected readonly description = computed(() => {\r\n const labels = this.labels();\r\n const remaining = this.remaining();\r\n if (remaining === null) return `${this.length()} ${labels.characters}`;\r\n return remaining >= 0\r\n ? `${remaining} ${labels.remaining}`\r\n : `${-remaining} ${labels.overLimit}`;\r\n });\r\n\r\n /** Yalnızca uyarı bölgesinde ve kilometre taşlarında güncellenir; aradaki tuşlarda son metin kalır. */\r\n protected readonly announcement = linkedSignal<\r\n { active: boolean; milestone: boolean; text: string },\r\n string\r\n >({\r\n source: () => {\r\n const remaining = this.remaining();\r\n const active = remaining !== null && this.tone() !== 'muted';\r\n const milestone =\r\n active && (remaining <= ANNOUNCE_EVERY_BELOW || remaining % ANNOUNCE_EVERY_BELOW === 0);\r\n return { active, milestone, text: this.description() };\r\n },\r\n computation: ({ active, milestone, text }, previous) => {\r\n if (!active) return '';\r\n return milestone ? text : (previous?.value ?? '');\r\n },\r\n });\r\n\r\n constructor() {\r\n effect((onCleanup) => {\r\n const target = this.for();\r\n this.length.set(target.value.length);\r\n const off = this.renderer.listen(target, 'input', () => this.length.set(target.value.length));\r\n\r\n const ids = (target.getAttribute('aria-describedby') ?? '').split(/\\s+/).filter(Boolean);\r\n if (!ids.includes(this.descriptionId)) {\r\n target.setAttribute('aria-describedby', [...ids, this.descriptionId].join(' '));\r\n }\r\n\r\n onCleanup(() => {\r\n off();\r\n const rest = (target.getAttribute('aria-describedby') ?? '')\r\n .split(/\\s+/)\r\n .filter((id) => id && id !== this.descriptionId);\r\n if (rest.length) target.setAttribute('aria-describedby', rest.join(' '));\r\n else target.removeAttribute('aria-describedby');\r\n });\r\n });\r\n\r\n // `input` olayı atmayan programatik değişimler (form reset, `writeValue`).\r\n afterEveryRender({\r\n read: () => {\r\n const current = this.for().value.length;\r\n if (current !== this.length()) this.length.set(current);\r\n },\r\n });\r\n }\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Bkz. `core/recipes.ts` `controlSurface`/`focusRecipe`/`disabledRecipe`/\r\n * `errorRecipe` — bu dosya onların TEK tüketicisi değil (Select/NumberInput/\r\n * ... aynı reçeteleri paylaşır), form kontrolleri genelinde tek kaynak.\r\n *\r\n * `size` ekseni `min-h-*` KULLANIR, `h-control-*` (sabit yükseklik) DEĞİL:\r\n * selector `textarea[mfInput]`'ı da kapsıyor (bkz. input.ts), sabit yükseklik\r\n * çok satırlı `rows` kullanan bir textarea'yı sıkıştırırdı. Tek satırlık\r\n * `<input>`'ta `py-*` ile birlikte tam kontrol yüksekliğine oturuyor,\r\n * textarea `rows` arttıkça bu tabanın üstüne doğal büyüyor. `min-h-(--control-h-*)`\r\n * — Tailwind v4'ün parantezli kısayolu, `--control-h-*` token'ına (radius.css)\r\n * doğrudan referans, ayrı bir `min-h-control-*` utility'si tanımlamaya gerek yok.\r\n *\r\n * `hasError` (invalid DEĞİL): `@angular/forms/signals`'ın `[formField]`\r\n * directive'i, AYNI native elemandaki başka bir directive'in `invalid`/\r\n * `disabled`/`required`/`pattern`/... adlı input'larını (bkz. signals.mjs\r\n * `FIELD_STATE_KEY_TO_CONTROL_BINDING`) OTOMATİK olarak alanın ham validity\r\n * durumuyla dolduruyor — henüz dokunulmamış (untouched) zorunlu bir alan bile\r\n * anında \"invalid\" oluyor ve kırmızı görünüyordu (gerçek bug, tarayıcıda\r\n * yakalandı). `hasError` bu rezerve isim listesinde YOK, çakışmıyor —\r\n * çağıran ekran görünürlüğü kendi `touched()/errors()` mantığıyla kontrol\r\n * etmeye devam ediyor.\r\n */\r\nexport const inputVariants = cva(\r\n 'w-full rounded-md border border-border bg-surface text-fg shadow-control ' +\r\n 'transition-colors duration-fast ease-emphasis placeholder:text-fg-subtle ' +\r\n 'hover:border-border-strong ' +\r\n 'focus:border-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n 'disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:hover:border-border',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'min-h-(--control-h-sm) px-2.5 py-1 text-sm',\r\n md: 'min-h-(--control-h-md) px-3 py-1.5 text-sm',\r\n lg: 'min-h-(--control-h-lg) px-3.5 py-2 text-base',\r\n },\r\n hasError: {\r\n true: 'border-danger focus:border-danger focus-visible:outline-danger',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { size: 'md', hasError: false },\r\n },\r\n);\r\n\r\nexport type InputSize = VariantProps<typeof inputVariants>['size'];\r\nexport type InputHasError = VariantProps<typeof inputVariants>['hasError'];\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n InjectionToken,\r\n afterEveryRender,\r\n afterNextRender,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { cn, type MfSize } from '@mesgflow/ui-kit/core';\r\nimport { inputVariants } from './input.variants';\r\n\r\n/**\r\n * `field-sizing: content` desteği — içerik boyunda büyüyen native kontrol (Chromium 123+;\r\n * desteklemeyen tarayıcıda JS yedeği). Token olarak: testler iki yolu da açıkça seçebilsin.\r\n */\r\nexport const MF_FIELD_SIZING_SUPPORTED = new InjectionToken<boolean>('mesgflow.field-sizing', {\r\n factory: () => typeof CSS !== 'undefined' && CSS.supports?.('field-sizing', 'content') === true,\r\n});\r\n\r\n/**\r\n * `<input mfInput>` / `<textarea mfInput>` — checkbox/radio hariç (bkz.\r\n * `Checkbox`, `@mesgflow/ui-kit/checkbox`). Karakter sayacı için `<mf-character-count>`.\r\n *\r\n * `autosize`/`minRows`/`maxRows` SADECE `textarea[mfInput]`'ta anlamlı — içerik büyüdükçe\r\n * yükseklik artar, `maxRows`'ta durup kaydırmaya geçer. İki yol:\r\n * - **`field-sizing: content` destekleniyorsa** büyüme tamamen CSS'te — yazma, yapıştırma,\r\n * programatik değer (form reset) ve genişlik değişimi tarayıcının kendi yerleşiminde;\r\n * JS yalnızca `min/max-height`'ı satır sayısından bir kez hesaplar.\r\n * - **Değilse** ölçerek: `input` olayı + her render sonrası değer karşılaştırması (olay atmayan\r\n * programatik değişimler) + `ResizeObserver` ile genişlik değişimi (satır kırılımı değişir).\r\n *\r\n * Satır yüksekliğine dolgu VE kenarlık eklenir (`box-sizing: border-box`) — eskiden yalnızca\r\n * `rows × line-height` alınıyordu; `minRows=2` alan iki satırdan kısa, son satır kırpık çıkıyordu.\r\n */\r\n@Directive({\r\n selector: 'input[mfInput]:not([type=checkbox]):not([type=radio]), textarea[mfInput]',\r\n host: {\r\n '[class]': 'classes()',\r\n '[attr.rows]': 'autosize() ? minRows() : null',\r\n '(input)': 'onInput()',\r\n },\r\n})\r\nexport class Input {\r\n readonly size = input<MfSize>('md');\r\n /** Field'ın `error` input'u dolu olduğunda çağıran ekran bunu true geçer. */\r\n readonly hasError = input(false);\r\n readonly autosize = input(false);\r\n readonly minRows = input(2);\r\n readonly maxRows = input<number | null>(null);\r\n\r\n private readonly elementRef = inject<ElementRef<HTMLTextAreaElement>>(ElementRef);\r\n private readonly nativeSizing = inject(MF_FIELD_SIZING_SUPPORTED);\r\n private lastValue: string | null = null;\r\n private lastWidth = 0;\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n inputVariants({ size: this.size(), hasError: this.hasError() }),\r\n this.autosize() && 'resize-none',\r\n this.autosize() && this.nativeSizing && '[field-sizing:content]',\r\n ),\r\n );\r\n\r\n constructor() {\r\n // Kuruluşta (önceden dolu bir değerle) VE minRows/maxRows/size değişince yeniden hesapla.\r\n effect(() => {\r\n if (!this.autosize()) return;\r\n this.minRows();\r\n this.maxRows();\r\n this.size();\r\n this.resize();\r\n });\r\n\r\n if (this.nativeSizing) return;\r\n\r\n afterEveryRender({\r\n read: () => {\r\n if (!this.autosize()) return;\r\n const value = this.elementRef.nativeElement.value;\r\n if (value !== this.lastValue) this.resize();\r\n },\r\n });\r\n\r\n const destroyRef = inject(DestroyRef);\r\n afterNextRender(() => {\r\n if (typeof ResizeObserver === 'undefined') return;\r\n const el = this.elementRef.nativeElement;\r\n const observer = new ResizeObserver(([entry]) => {\r\n const width = entry?.contentRect.width ?? 0;\r\n // Yalnızca GENİŞLİK — kendi yükseklik yazımımız gözlemciyi yeniden tetiklemesin.\r\n if (!this.autosize() || width === this.lastWidth) return;\r\n this.lastWidth = width;\r\n this.resize();\r\n });\r\n observer.observe(el);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n }\r\n\r\n protected onInput(): void {\r\n if (this.autosize() && !this.nativeSizing) this.resize();\r\n }\r\n\r\n private resize(): void {\r\n const el = this.elementRef.nativeElement;\r\n const style = getComputedStyle(el);\r\n const lineHeight = parseFloat(style.lineHeight) || 20;\r\n const padding = parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) || 0;\r\n const border = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth) || 0;\r\n const chrome = padding + (style.boxSizing === 'border-box' ? border : 0);\r\n const min = this.minRows() * lineHeight + chrome;\r\n const maxRows = this.maxRows();\r\n const max = maxRows ? maxRows * lineHeight + chrome : Infinity;\r\n\r\n if (this.nativeSizing) {\r\n el.style.minHeight = `${min}px`;\r\n el.style.maxHeight = Number.isFinite(max) ? `${max}px` : '';\r\n return;\r\n }\r\n\r\n this.lastValue = el.value;\r\n el.style.height = 'auto';\r\n // `scrollHeight` dolguyu içerir ama kenarlığı içermez.\r\n const content = el.scrollHeight + (style.boxSizing === 'border-box' ? border : 0);\r\n el.style.height = `${Math.min(Math.max(content, min), max)}px`;\r\n el.style.overflowY = content > max ? 'auto' : 'hidden';\r\n }\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\nimport {\r\n cn,\r\n controlSize,\r\n controlSurface,\r\n disabledRecipe,\r\n type MfSize,\r\n} from '@mesgflow/ui-kit/core';\r\n\r\nconst FOCUS_RING_BASE =\r\n 'has-[:focus-visible]:outline has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2';\r\n\r\n/**\r\n * `<mf-input-group>\r\n * <span mfInputPrefix><span mfIcon>search</span></span>\r\n * <input mfInput class=\"border-0 bg-transparent shadow-none focus-visible:outline-none\" />\r\n * <span mfInputSuffix><button type=\"button\">×</button></span>\r\n * </mf-input-group>`\r\n *\r\n * `SearchInput`/`NumberInput`/`DateRangePicker`'ın HER BİRİNİN kendi elle\r\n * yazdığı \"kabuk\" reçetesini (bkz. plan Faz 2 P0) `core/recipes.ts`'in\r\n * `controlSurface`/`controlSize`'ına indirger — üç ayrı kopya yerine TEK\r\n * kaynak. İçindeki `input[mfInput]` KENDİ border/shadow/outline'ını\r\n * KAPATMALI (yukarıdaki örnekteki class'lar) — kabuk artık bunları BURADAN\r\n * sağlıyor, \"çift kenarlık\" olmasın diye (bkz. `DateRangePicker`'ın eski\r\n * `wrapperClasses` notu, aynı gerekçe).\r\n *\r\n * Odak halkası `has-[:focus-visible]:outline` ile İÇ elemanlardan HERHANGİ\r\n * biri klavye-odaklandığında TÜM kabuğun etrafında TEK bir halka çizer\r\n * (`DateRangePicker`'ın iki input'u arasında geçişte \"zıplayan\" iki ayrı\r\n * halka yerine) — `input[mfInput]`'un KENDİ `focus-visible:outline`'ı\r\n * BİLEREK kapatılmalı (yukarıdaki örnek), aksi halde İKİ halka üst üste biner.\r\n */\r\n@Component({\r\n selector: 'mf-input-group',\r\n exportAs: 'mfInputGroup',\r\n host: {\r\n '[class]': 'classes()',\r\n '[attr.aria-disabled]': 'disabled() || null',\r\n // `addon` ekler kabuğun yatay dolgusunu bu değişkenle geri alıp kenara oturur (bkz. InputPrefix).\r\n '[style.--mf-input-group-px]': 'edgePadding()',\r\n },\r\n template: `\r\n <ng-content select=\"[mfInputPrefix]\" />\r\n <ng-content />\r\n <ng-content select=\"[mfInputSuffix]\" />\r\n `,\r\n})\r\nexport class InputGroup {\r\n readonly size = input<MfSize>('md');\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n /**\r\n * `false` → iç dolgu/aralık (`px-*`/`gap-*`) KALKAR, çocuklar `items-stretch`\r\n * ile TAM yüksekliği doldurur — kenardan kenara oturan (dış kabuğun\r\n * `rounded-*`sini birebir paylaşan) düğmeler için (ör. `NumberInput`'un\r\n * azalt/artır düğmeleri). Varsayılan `true` — ikon/metin gibi \"nefes payı\"\r\n * isteyen eklerin (ör. `DateRangePicker`'ın takvim ikonu) olağan hali.\r\n */\r\n readonly padded = input(true);\r\n /**\r\n * `true` → sabit `h-control-*` yerine `h-auto` + `flex-wrap` — içerik\r\n * (ör. `TagInput`'un çoğalan Chip'leri) tek satıra sığmadığında kabuk\r\n * BÜYÜR, taşırmaz. Varsayılan `false` (tek satırlık kontroller — ESKİ\r\n * davranış birebir korunur).\r\n */\r\n readonly wrap = input(false);\r\n\r\n /** `controlSize`'ın `px-*` değerleriyle birebir (sm 2.5 · md 3 · lg 3.5). */\r\n protected readonly edgePadding = computed(() =>\r\n this.padded() ? { sm: '0.625rem', md: '0.75rem', lg: '0.875rem' }[this.size()] : '0px',\r\n );\r\n\r\n protected readonly classes = computed(() => {\r\n const error = this.hasError();\r\n const padded = this.padded();\r\n const wrap = this.wrap();\r\n // `h-control-*` özel bir utility — tailwind-merge onu standart `h-*`\r\n // ailesinin bir parçası TANIMIYOR, `cn()`'e `h-auto` ile BİRLİKTE\r\n // verilseler ikisi de çıktıda KALIR (derlenmiş CSS'te hangisinin\r\n // kazanacağı belirsiz kalır, gerçek bulgu — bkz. input-group.spec.ts).\r\n // `wrap=true`'da yükseklik token'ını KAYNAKTA çıkarıyoruz, twMerge'e\r\n // çakışmayı çözmesi için güvenmek yerine.\r\n const sizeClasses = wrap\r\n ? controlSize[this.size()].replace(/\\bh-control-\\w+\\b/, '').trim()\r\n : controlSize[this.size()];\r\n return cn(\r\n 'flex w-full',\r\n wrap ? 'flex-wrap' : '',\r\n padded ? 'items-center gap-1.5' : 'items-stretch',\r\n controlSurface,\r\n sizeClasses,\r\n padded ? '' : 'px-0',\r\n wrap ? 'h-auto py-1.5' : '',\r\n FOCUS_RING_BASE,\r\n error\r\n ? 'border-danger focus-within:border-danger has-[:focus-visible]:outline-danger'\r\n : 'has-[:focus-visible]:outline-focus-ring',\r\n disabledRecipe,\r\n );\r\n });\r\n}\r\n","import { Directive, booleanAttribute, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\n\r\n/** Kabuğun kenarına oturan bitişik bölüm — zemin, ayırıcı ve dış köşe yarıçapı (bkz. `addon`). */\r\nconst INPUT_ADDON_BASE =\r\n 'self-stretch bg-surface-alt px-3 text-sm text-fg-muted border-border ' +\r\n 'ms-[calc(var(--mf-input-group-px,0px)*-1)] rounded-s-[inherit] border-e';\r\n\r\n/**\r\n * `<span mfInputPrefix><span mfIcon>search</span></span>` — bkz. `input-group.ts`'in JSDoc'u.\r\n *\r\n * `addon`: metin/seçim eki (`https://`, `₺`, alan kodu) kabuğun sol kenarına BİTİŞİK bir bölüm\r\n * olur — sönük zemin + ayırıcı çizgi, kabuğun dolgusu `--mf-input-group-px` ile geri alınır.\r\n */\r\n@Directive({\r\n selector: '[mfInputPrefix]',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class InputPrefix {\r\n readonly addon = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly classes = computed(() =>\r\n cn('flex shrink-0 items-center text-fg-subtle', this.addon() && INPUT_ADDON_BASE),\r\n );\r\n}\r\n","import { Directive, booleanAttribute, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\n\r\n/**\r\n * `<span mfInputSuffix><button ...>×</button></span>` — bkz. `input-group.ts`'in JSDoc'u.\r\n * `addon`: sağ kenara bitişik bölüm (`.com`, `kg`, birim seçimi) — bkz. `InputPrefix.addon`.\r\n */\r\n@Directive({\r\n selector: '[mfInputSuffix]',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class InputSuffix {\r\n readonly addon = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n 'flex shrink-0 items-center text-fg-subtle',\r\n this.addon() &&\r\n 'self-stretch bg-surface-alt px-3 text-sm text-fg-muted border-border ' +\r\n 'me-[calc(var(--mf-input-group-px,0px)*-1)] rounded-e-[inherit] border-s',\r\n ),\r\n );\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n/** `<kbd mfKbd>Ctrl</kbd>` — tek bir tuş/kısayol parçasının görsel yongası (chip). Birden fazla tuş için ardışık kullan: `<kbd mfKbd>Ctrl</kbd>+<kbd mfKbd>K</kbd>`. */\r\n@Directive({\r\n selector: 'kbd[mfKbd]',\r\n host: {\r\n class:\r\n 'inline-flex min-w-[1.5em] items-center justify-center rounded-xs border border-border bg-surface-alt px-1.5 py-0.5 font-mono text-xs font-medium text-fg-muted',\r\n },\r\n})\r\nexport class Kbd {}\r\n","import { Directive, computed, input } from '@angular/core';\r\nimport { cn, type MfTone } from '@mesgflow/ui-kit/core';\r\n\r\nexport type LinkUnderline = 'always' | 'hover' | 'none';\r\n\r\nconst TONE_CLASSES: Record<MfTone, string> = {\r\n neutral: 'text-fg-muted hover:text-fg',\r\n primary: 'text-accent hover:text-accent-strong',\r\n success: 'text-success',\r\n warning: 'text-warning',\r\n danger: 'text-danger',\r\n info: 'text-info',\r\n help: 'text-help',\r\n};\r\n\r\nconst UNDERLINE_CLASSES: Record<LinkUnderline, string> = {\r\n always: 'underline underline-offset-2',\r\n hover: 'no-underline underline-offset-2 hover:underline',\r\n none: 'no-underline',\r\n};\r\n\r\n/**\r\n * `<a mfLink href=\"/ayarlar\">Ayarlar</a>` — düz metin içine gömülü bağlantılar\r\n * için (ör. \"Zaten hesabınız var mı? Giriş yapın\"). Navigasyon bağlantıları\r\n * (sidebar, tabs, breadcrumb) KENDİ bileşenlerinin stilini taşır, bu\r\n * directive'i KULLANMAZ — `Link` SADECE metin akışı içindeki bağlantılar için.\r\n */\r\n@Directive({\r\n selector: 'a[mfLink]',\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class Link {\r\n readonly tone = input<MfTone>('primary');\r\n readonly underline = input<LinkUnderline>('hover');\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n 'transition-colors duration-fast ease-emphasis focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring',\r\n TONE_CLASSES[this.tone()],\r\n UNDERLINE_CLASSES[this.underline()],\r\n ),\r\n );\r\n}\r\n","import { Menu as AriaMenu } from '@angular/aria/menu';\r\nimport { Component } from '@angular/core';\r\n\r\n/**\r\n * `<mf-menu #menu=\"ngMenu\" (itemSelected)=\"onSelect($event)\"><button mfMenuItem value=\"a\">A</button></mf-menu>`\r\n * — genelde bir `mf-popover` içine konur, tetikleyici için `mfMenuTrigger`\r\n * kullanılır (bkz. `menu-trigger.ts`). ARIA/klavye (ok tuşu navigasyonu,\r\n * typeahead, alt-menü açma) `@angular/aria/menu`'nün `Menu` pattern'inden\r\n * `hostDirectives` ile geliyor — `Select`'in listbox'ıyla AYNI görsel dil\r\n * (rounded-lg, shadow-2, bg-overlay).\r\n *\r\n * `hostDirectives` uygulanan bir directive'in KENDİ `exportAs`'ı (`ngMenu`)\r\n * host elemanda hâlâ kullanılabilir (Angular directive composition API'sinin\r\n * dokümante edilmiş davranışı) — bu yüzden `MenuTrigger`'ın `[menu]`\r\n * girdisine doğrudan `#menu=\"ngMenu\"` verilebiliyor, ayrı bir forward'a\r\n * gerek yok.\r\n */\r\n@Component({\r\n selector: 'mf-menu',\r\n exportAs: 'mfMenu',\r\n hostDirectives: [\r\n {\r\n directive: AriaMenu,\r\n inputs: ['wrap', 'disabled', 'typeaheadDelay'],\r\n outputs: ['itemSelected'],\r\n },\r\n ],\r\n host: {\r\n class:\r\n 'block max-h-64 min-w-[10rem] overflow-auto rounded-lg border border-hairline bg-overlay p-1 text-sm shadow-2',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class Menu {}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const menuItemVariants = cva(\r\n 'flex cursor-pointer items-center gap-2 rounded-sm px-2.5 py-1.5 text-fg-muted transition-colors duration-fast ease-emphasis active:scale-[0.99]',\r\n {\r\n variants: {\r\n active: {\r\n true: 'bg-surface-alt text-fg',\r\n false: '',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50 active:scale-100',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { active: false, disabled: false },\r\n },\r\n);\r\n\r\nexport type MenuItemActive = VariantProps<typeof menuItemVariants>['active'];\r\n","import { MenuItem as AriaMenuItem } from '@angular/aria/menu';\r\nimport { Directive, computed, inject } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { menuItemVariants } from './menu.variants';\r\n\r\n/** `<button mfMenuItem value=\"delete\">Sil</button>` — `mf-menu` içine konur. */\r\n@Directive({\r\n selector: 'button[mfMenuItem], div[mfMenuItem]',\r\n hostDirectives: [{ directive: AriaMenuItem, inputs: ['value', 'disabled', 'id'] }],\r\n host: { '[class]': 'classes()' },\r\n})\r\nexport class MenuItem<V> {\r\n private readonly ariaMenuItem = inject<AriaMenuItem<V>>(AriaMenuItem);\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n menuItemVariants({\r\n active: this.ariaMenuItem.active(),\r\n disabled: this.ariaMenuItem.disabled(),\r\n }),\r\n ),\r\n );\r\n}\r\n","import { MenuTrigger as AriaMenuTrigger } from '@angular/aria/menu';\r\nimport { Directive } from '@angular/core';\r\n\r\n/**\r\n * `<button mfMenuTrigger [menu]=\"menuRef\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">Aç</button>`\r\n * — `[menu]`'ye `mf-menu`'nün `#ref=\"ngMenu\"` template referansını ver.\r\n * Pozisyonlama (floating panel) bu directive'in İŞİ DEĞİL — `@angular/aria/menu`\r\n * headless, konum bilgisi taşımıyor; `mf-popover`'ın `[open]=\"trigger.expanded()\"`\r\n * ile beslenmesi gerekiyor (bkz. playground'daki Menu demosu, `(closed)`\r\n * çıktısında `trigger.close()` çağırarak iki state'i senkron tutma deseni).\r\n */\r\n@Directive({\r\n selector: '[mfMenuTrigger]',\r\n exportAs: 'mfMenuTrigger',\r\n hostDirectives: [{ directive: AriaMenuTrigger, inputs: ['menu', 'disabled'] }],\r\n})\r\nexport class MenuTrigger {}\r\n","import { Component, computed, forwardRef, input, model, signal } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Input, InputGroup, InputPrefix, InputSuffix } from '@mesgflow/ui-kit/input';\r\n\r\n/** Sürükleyerek değiştirmede kaç piksel sürüklemenin BİR `step()` ilerlemeye karşılık geldiği — Figma/After Effects gibi araçlardaki yaygın \"scrubber\" deseniyle AYNI kaba değer. */\r\nconst DRAG_PIXELS_PER_STEP = 4;\r\n\r\n/**\r\n * `<mf-number-input [(value)]=\"padding\" [min]=\"0\" [max]=\"64\" [step]=\"4\" unit=\"px\" />`\r\n *\r\n * `Select`'in `ControlValueAccessor` deseni tekrarlanıyor (bkz. select.ts\r\n * üstündeki not) — native değil, `NG_VALUE_ACCESSOR`'ı KENDİSİ sağlamak\r\n * zorunda. Klavye (yukarı/aşağı ok, PageUp/PageDown ±10×step) + stepper\r\n * butonları (mouse-only, `tabindex=\"-1\"` — gerçek `spinbutton` semantiği\r\n * input'un kendisinde) HER ZAMAN TAM işlevsellik sağlıyor.\r\n *\r\n * Sürükleyerek değiştirme (Kademe 12 paket BV — önceden \"v1 kapsamı dışı\"\r\n * bırakılmıştı) — SADECE `unit()` VERİLMİŞSE (`px` etiketi gibi) o etiket\r\n * yatay sürüklenebilir bir \"scrubber\" olur (`pointerdown`+`setPointerCapture`\r\n * ile sürükleme YAKALANIR, imleç `ew-resize` olur). `unit` YOKSA (boş\r\n * string) sürükleme EKLENMEDİ — dekoratif bir tutamaç elementi olmadan\r\n * kullanıcının \"burayı sürükleyebilirim\" sezgisi YOK, YENİ bir görsel\r\n * eleman eklemek gerekirdi (kapsam dışı). Bu, ERİŞİLEBİLİRLİK açısından\r\n * bir GERİLEME DEĞİL — klavye ZATEN aynı işlevselliği (yukarı/aşağı ok)\r\n * tam olarak sağlıyor, sürükleme SADECE mouse kullanıcıları için EK bir\r\n * kısayol (stepper butonlarının `tabindex=\"-1\"` olmasıyla AYNI ilke).\r\n */\r\n@Component({\r\n selector: 'mf-number-input',\r\n exportAs: 'mfNumberInput',\r\n host: { class: 'inline-flex' },\r\n imports: [Icon, Input, InputGroup, InputPrefix, InputSuffix],\r\n templateUrl: './number-input.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => NumberInput), multi: true },\r\n ],\r\n})\r\nexport class NumberInput implements ControlValueAccessor {\r\n readonly value = model<number | null>(null);\r\n readonly min = input<number | null>(null);\r\n readonly max = input<number | null>(null);\r\n readonly step = input(1);\r\n readonly unit = input('');\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n readonly ariaLabel = input('');\r\n\r\n private onChange: (value: number | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected readonly canDecrement = computed(\r\n () => !this.disabled() && (this.min() == null || (this.value() ?? 0) > this.min()!),\r\n );\r\n protected readonly canIncrement = computed(\r\n () => !this.disabled() && (this.max() == null || (this.value() ?? 0) < this.max()!),\r\n );\r\n\r\n protected readonly dragging = signal(false);\r\n private dragStartClientX = 0;\r\n private dragStartValue = 0;\r\n\r\n writeValue(value: number | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n registerOnChange(fn: (value: number | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n protected clamp(next: number): number {\r\n let v = next;\r\n if (this.min() != null) v = Math.max(this.min()!, v);\r\n if (this.max() != null) v = Math.min(this.max()!, v);\r\n return v;\r\n }\r\n\r\n protected adjust(delta: number): void {\r\n if (this.disabled()) return;\r\n const next = this.clamp((this.value() ?? 0) + delta);\r\n this.value.set(next);\r\n this.onChange(next);\r\n }\r\n\r\n protected onInputChange(raw: string): void {\r\n const parsed = raw.trim() === '' ? null : Number(raw);\r\n const next = parsed === null || Number.isNaN(parsed) ? null : this.clamp(parsed);\r\n this.value.set(next);\r\n this.onChange(next);\r\n }\r\n\r\n protected onBlur(): void {\r\n this.onTouched();\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.adjust(this.step());\r\n break;\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.adjust(-this.step());\r\n break;\r\n case 'PageUp':\r\n event.preventDefault();\r\n this.adjust(this.step() * 10);\r\n break;\r\n case 'PageDown':\r\n event.preventDefault();\r\n this.adjust(-this.step() * 10);\r\n break;\r\n }\r\n }\r\n\r\n // --- Sürükleyerek değiştirme (Kademe 12 paket BV) — bkz. class üstündeki not. ---\r\n protected onUnitPointerDown(event: PointerEvent): void {\r\n if (this.disabled()) return;\r\n event.preventDefault();\r\n this.dragging.set(true);\r\n this.dragStartClientX = event.clientX;\r\n this.dragStartValue = this.value() ?? 0;\r\n (event.currentTarget as HTMLElement).setPointerCapture(event.pointerId);\r\n }\r\n\r\n protected onUnitPointerMove(event: PointerEvent): void {\r\n if (!this.dragging()) return;\r\n const deltaSteps = Math.round((event.clientX - this.dragStartClientX) / DRAG_PIXELS_PER_STEP);\r\n const next = this.clamp(this.dragStartValue + deltaSteps * this.step());\r\n if (next !== this.value()) {\r\n this.value.set(next);\r\n this.onChange(next);\r\n }\r\n }\r\n\r\n protected onUnitPointerUp(event: PointerEvent): void {\r\n if (!this.dragging()) return;\r\n this.dragging.set(false);\r\n (event.currentTarget as HTMLElement).releasePointerCapture(event.pointerId);\r\n this.onTouched();\r\n }\r\n}\r\n","<mf-input-group [padded]=\"false\" [hasError]=\"hasError()\" [disabled]=\"disabled()\">\r\n <button\r\n type=\"button\"\r\n mfInputPrefix\r\n class=\"w-8 justify-center rounded-s-md text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-surface-alt hover:text-fg disabled:pointer-events-none disabled:opacity-50\"\r\n [disabled]=\"!canDecrement()\"\r\n (click)=\"adjust(-step())\"\r\n tabindex=\"-1\"\r\n aria-hidden=\"true\"\r\n >\r\n <span mfIcon [size]=\"16\">remove</span>\r\n </button>\r\n <input\r\n mfInput\r\n type=\"text\"\r\n inputmode=\"decimal\"\r\n role=\"spinbutton\"\r\n class=\"min-w-0 flex-1 border-0 bg-transparent px-1 py-1.5 text-center shadow-none focus-visible:outline-none disabled:cursor-not-allowed\"\r\n [value]=\"value() ?? ''\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [attr.aria-valuenow]=\"value()\"\r\n (input)=\"onInputChange($any($event.target).value)\"\r\n (blur)=\"onBlur()\"\r\n (keydown)=\"onKeydown($event)\"\r\n />\r\n @if (unit()) {\r\n <span\r\n class=\"number-input-unit flex shrink-0 items-center pe-2 text-sm text-fg-subtle select-none\"\r\n [class.cursor-ew-resize]=\"!disabled()\"\r\n aria-hidden=\"true\"\r\n (pointerdown)=\"onUnitPointerDown($event)\"\r\n (pointermove)=\"onUnitPointerMove($event)\"\r\n (pointerup)=\"onUnitPointerUp($event)\"\r\n >{{ unit() }}</span\r\n >\r\n }\r\n <button\r\n type=\"button\"\r\n mfInputSuffix\r\n class=\"w-8 justify-center rounded-e-md text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-surface-alt hover:text-fg disabled:pointer-events-none disabled:opacity-50\"\r\n [disabled]=\"!canIncrement()\"\r\n (click)=\"adjust(step())\"\r\n tabindex=\"-1\"\r\n aria-hidden=\"true\"\r\n >\r\n <span mfIcon [size]=\"16\">add</span>\r\n </button>\r\n</mf-input-group>\r\n","import {\r\n Component,\r\n ElementRef,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n viewChildren,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { MF_OTP_INPUT_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Input } from '@mesgflow/ui-kit/input';\r\n\r\n/**\r\n * `<mf-otp-input [(value)]=\"code\" [length]=\"6\" />` — her biri TEK bir\r\n * hane taşıyan `length()` kadar kutu. Değer İÇSEL olarak `length()`\r\n * uzunluğa boşlukla (\"henüz doldurulmadı\") doldurulur, SADECE SONDAKİ\r\n * boşluklar `value` model'ine yazılırken kesilir — ARADAKİ bir boşluk\r\n * (ör. kullanıcı 3. kutuya tıklayıp DOĞRUDAN yazarsa, 1-2 boş kalır)\r\n * teknik olarak MÜMKÜN ama normal sıralı doldurma/yapıştırma akışında\r\n * hiç OLUŞMAZ.\r\n *\r\n * Çoklu karakter TEK bir kutuya girerse (mobil SMS OTP otomatik doldurma\r\n * — işletim sistemi TÜM kodu ilk kutunun `input` event'ine basar) VEYA\r\n * yapıştırılırsa, `fillFrom(0, ...)` TÜM kutuları doldurur — ikisi de\r\n * AYNI yardımcıyı paylaşıyor.\r\n */\r\n@Component({\r\n selector: 'mf-otp-input',\r\n exportAs: 'mfOtpInput',\r\n imports: [Input],\r\n host: { class: 'inline-flex gap-2' },\r\n template: `\r\n @for (i of indexes(); track i) {\r\n <input\r\n mfInput\r\n #boxEl\r\n type=\"text\"\r\n inputmode=\"numeric\"\r\n autocomplete=\"one-time-code\"\r\n maxlength=\"1\"\r\n class=\"h-11 w-11 text-center text-lg\"\r\n [value]=\"digitAt(i)\"\r\n [disabled]=\"disabled()\"\r\n [hasError]=\"hasError()\"\r\n [attr.aria-label]=\"effectiveAriaLabel() + ' ' + (i + 1) + '/' + length()\"\r\n (input)=\"onInput(i, $event)\"\r\n (keydown)=\"onKeydown(i, $event)\"\r\n (paste)=\"onPaste($event)\"\r\n (focus)=\"onFocus($event)\"\r\n />\r\n }\r\n `,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => OtpInput), multi: true }],\r\n})\r\nexport class OtpInput extends ValueAccessorBase<string> implements ControlValueAccessor {\r\n readonly value = model('');\r\n readonly length = input(6);\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly otpLabels = inject(MF_OTP_INPUT_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.otpLabels().ariaLabel,\r\n );\r\n\r\n protected readonly indexes = computed(() => Array.from({ length: this.length() }, (_, i) => i));\r\n\r\n private readonly boxes = viewChildren<ElementRef<HTMLInputElement>>('boxEl');\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value ?? '');\r\n }\r\n\r\n protected digitAt(i: number): string {\r\n const c = this.value()[i];\r\n return c && c !== ' ' ? c : '';\r\n }\r\n\r\n protected onInput(i: number, event: Event): void {\r\n const raw = (event.target as HTMLInputElement).value;\r\n const digits = raw.replace(/\\D/g, '');\r\n if (digits.length > 1) {\r\n // Mobil SMS otomatik doldurma — tüm kod tek bir input event'inde gelir.\r\n this.fillFrom(0, digits);\r\n return;\r\n }\r\n this.setDigit(i, digits);\r\n if (digits && i < this.length() - 1) this.focusBox(i + 1);\r\n }\r\n\r\n protected onKeydown(i: number, event: KeyboardEvent): void {\r\n if (event.key === 'Backspace' && !this.digitAt(i) && i > 0) {\r\n event.preventDefault();\r\n this.setDigit(i - 1, '');\r\n this.focusBox(i - 1);\r\n } else if (event.key === 'ArrowLeft' && i > 0) {\r\n event.preventDefault();\r\n this.focusBox(i - 1);\r\n } else if (event.key === 'ArrowRight' && i < this.length() - 1) {\r\n event.preventDefault();\r\n this.focusBox(i + 1);\r\n }\r\n }\r\n\r\n protected onPaste(event: ClipboardEvent): void {\r\n event.preventDefault();\r\n const digits = (event.clipboardData?.getData('text') ?? '').replace(/\\D/g, '');\r\n if (digits) this.fillFrom(0, digits);\r\n }\r\n\r\n /** Odaklanınca mevcut haneyi SEÇER — yazmak EKLEMEK yerine DEĞİŞTİRİR (standart OTP kutusu davranışı). */\r\n protected onFocus(event: FocusEvent): void {\r\n (event.target as HTMLInputElement).select();\r\n }\r\n\r\n private setDigit(i: number, digit: string): void {\r\n const chars = this.value().padEnd(this.length(), ' ').split('');\r\n chars[i] = digit || ' ';\r\n this.commit(chars.join('').replace(/ +$/, ''));\r\n }\r\n\r\n private fillFrom(startIndex: number, digits: string): void {\r\n const chars = this.value().padEnd(this.length(), ' ').split('');\r\n for (let j = 0; j < digits.length && startIndex + j < this.length(); j++) {\r\n chars[startIndex + j] = digits[j]!;\r\n }\r\n this.commit(chars.join('').replace(/ +$/, ''));\r\n this.focusBox(Math.min(startIndex + digits.length, this.length() - 1));\r\n }\r\n\r\n private commit(next: string): void {\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n private focusBox(i: number): void {\r\n this.boxes()[i]?.nativeElement.focus();\r\n }\r\n}\r\n","import { Component, input } from '@angular/core';\r\nimport { Breadcrumb, type BreadcrumbItem } from '@mesgflow/ui-kit/breadcrumb';\r\n\r\n/**\r\n * `<mf-page-header title=\"Ekip\" [breadcrumbItems]=\"[...]\">\r\n * <div mfPageHeaderActions><button mfButton>Davet et</button></div>\r\n * </mf-page-header>`\r\n *\r\n * `breadcrumbItems` boşsa (varsayılan) `mf-breadcrumb` HİÇ render EDİLMEZ —\r\n * tek seviyeli sayfalarda (ör. \"Ayarlar\") gereksiz bir tek-öğeli iz\r\n * gösterilmesin diye.\r\n *\r\n * Yerleşim KAPSAYICI sorgusuyla (`@container`) — viewport'a değil başlığın\r\n * kendi genişliğine bakar: 32rem'den dar bir kapsayıcıda (kenar çubuğu açık\r\n * tablet, bölünmüş panel) aksiyonlar başlığın ALTINA iner, başlığı ezmez.\r\n */\r\n@Component({\r\n selector: 'mf-page-header',\r\n exportAs: 'mfPageHeader',\r\n imports: [Breadcrumb],\r\n host: { class: 'block @container' },\r\n template: `\r\n @if (breadcrumbItems().length > 0) {\r\n <mf-breadcrumb [items]=\"breadcrumbItems()\" class=\"mb-2 block\" />\r\n }\r\n <div class=\"flex flex-col gap-3 @lg:flex-row @lg:items-start @lg:justify-between @lg:gap-4\">\r\n <div class=\"min-w-0\">\r\n <h1 class=\"text-title-lg font-display truncate text-fg\">{{ title() }}</h1>\r\n @if (description()) {\r\n <p class=\"mt-1 text-sm text-fg-muted\">{{ description() }}</p>\r\n }\r\n </div>\r\n <ng-content select=\"[mfPageHeaderActions]\" />\r\n </div>\r\n `,\r\n})\r\nexport class PageHeader {\r\n readonly title = input.required<string>();\r\n readonly description = input('');\r\n readonly breadcrumbItems = input<BreadcrumbItem[]>([]);\r\n}\r\n","import { Directive } from '@angular/core';\r\n\r\n/** `<div mfPageHeaderActions><button mfButton>...</button></div>` — bkz. `page-header.ts`'in JSDoc'u. */\r\n@Directive({\r\n selector: '[mfPageHeaderActions]',\r\n host: { class: 'flex shrink-0 items-center gap-2' },\r\n})\r\nexport class PageHeaderActions {}\r\n","export type PaginationItem = number | 'ellipsis-start' | 'ellipsis-end';\r\n\r\n/**\r\n * Görünen sayfa öğeleri — SABİT uzunlukta: `2 × boundaries + 2 × siblings + 3` (sayfa sayısı\r\n * bundan azsa hepsi). Böylece sayfa değiştikçe öğe sayısı oynamaz, düğmeler zıplamaz (Table\r\n * sayfalamasındaki değişken uzunluklu listenin aksine). Üç nokta tek bir sayfanın yerini\r\n * tutuyorsa üç nokta yerine o sayfa gösterilir (… yalnızca ≥2 sayfayı gizler).\r\n *\r\n * `paginationRange(6, 20)` → `[1, 'ellipsis-start', 5, 6, 7, 'ellipsis-end', 20]`\r\n */\r\nexport function paginationRange(\r\n current: number,\r\n pageCount: number,\r\n siblings = 1,\r\n boundaries = 1,\r\n): PaginationItem[] {\r\n const range = (from: number, to: number) =>\r\n Array.from({ length: Math.max(0, to - from + 1) }, (_, i) => from + i);\r\n\r\n const slots = 2 * boundaries + 2 * siblings + 3;\r\n if (pageCount <= slots) return range(1, pageCount);\r\n\r\n const page = Math.min(Math.max(current, 1), pageCount);\r\n const startPages = range(1, boundaries);\r\n const endPages = range(pageCount - boundaries + 1, pageCount);\r\n\r\n // Kardeş penceresi kenarlara yaklaşınca kayar — toplam uzunluk sabit kalsın.\r\n const siblingsStart = Math.max(\r\n Math.min(page - siblings, pageCount - boundaries - siblings * 2 - 1),\r\n boundaries + 2,\r\n );\r\n const siblingsEnd = Math.min(\r\n Math.max(page + siblings, boundaries + siblings * 2 + 2),\r\n pageCount - boundaries - 1,\r\n );\r\n\r\n return [\r\n ...startPages,\r\n siblingsStart > boundaries + 2 ? 'ellipsis-start' : boundaries + 1,\r\n ...range(siblingsStart, siblingsEnd),\r\n siblingsEnd < pageCount - boundaries - 1 ? 'ellipsis-end' : pageCount - boundaries,\r\n ...endPages,\r\n ] as PaginationItem[];\r\n}\r\n","import { Component, booleanAttribute, computed, inject, input, model } from '@angular/core';\r\nimport { MF_PAGINATION_LABELS, cn } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { paginationRange } from './pagination-range';\r\n\r\nconst CELL_BASE =\r\n 'relative inline-flex shrink-0 cursor-pointer appearance-none items-center justify-center rounded-md border-0 bg-transparent px-2 ' +\r\n 'font-medium tabular-nums transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\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:opacity-50 disabled:active:scale-100';\r\n\r\nconst SIZE = { sm: 'h-8 min-w-8 text-xs', md: 'h-9 min-w-9 text-sm' } as const;\r\n\r\n/**\r\n * `<mf-pagination [pageCount]=\"20\" [(page)]=\"page\" />`\r\n *\r\n * Tablo dışı listeler (kart ızgarası, arama sonuçları) için bağımsız sayfalama. Table'ın\r\n * kendi sayfalamasıyla AYNI görsel dil: aktif sayfa nötr zemin + alt kenarda 2px marka rayı\r\n * (\"buradasın\" motifi), dolu blok değil.\r\n *\r\n * Öğe sayısı sabittir (bkz. `paginationRange`) — sayfa değiştikçe düğmeler kaymaz. `compact`:\r\n * sayı listesi yerine \"Sayfa 3 / 20\" (dar alanlar, mobil). `<nav>` landmark'ı + aktif sayfada\r\n * `aria-current=\"page\"`; sayfa düğmeleri \"Page 3\" gibi tam adla duyurulur; üç nokta gizlidir.\r\n */\r\n@Component({\r\n selector: 'mf-pagination',\r\n exportAs: 'mfPagination',\r\n imports: [Icon],\r\n host: { class: 'block' },\r\n templateUrl: './pagination.html',\r\n})\r\nexport class Pagination {\r\n readonly page = model(1);\r\n readonly pageCount = input.required<number>();\r\n /** Aktif sayfanın iki yanında gösterilecek sayfa sayısı. */\r\n readonly siblings = input(1);\r\n /** İlk/son sayfaya atlama düğmeleri. */\r\n readonly showEdges = input(false, { transform: booleanAttribute });\r\n readonly compact = input(false, { transform: booleanAttribute });\r\n readonly size = input<'sm' | 'md'>('md');\r\n /** Verilmezse `MfLabels.pagination.navAriaLabel` — sayfada birden çok sayfalama varsa ayırt edin. */\r\n readonly ariaLabel = input<string>();\r\n\r\n protected readonly labels = inject(MF_PAGINATION_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.labels().navAriaLabel,\r\n );\r\n protected readonly safeCount = computed(() => Math.max(1, Math.floor(this.pageCount())));\r\n protected readonly current = computed(() => Math.min(Math.max(1, this.page()), this.safeCount()));\r\n protected readonly items = computed(() =>\r\n paginationRange(this.current(), this.safeCount(), this.siblings()),\r\n );\r\n\r\n protected cell(active = false): string {\r\n return cn(\r\n CELL_BASE,\r\n SIZE[this.size()],\r\n active\r\n ? 'bg-surface-alt font-semibold text-fg'\r\n : 'text-fg-muted hover:bg-surface-alt hover:text-fg',\r\n active &&\r\n \"after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full after:bg-accent-fill after:content-['']\",\r\n );\r\n }\r\n\r\n protected goTo(page: number): void {\r\n const next = Math.min(Math.max(1, page), this.safeCount());\r\n if (next !== this.current()) this.page.set(next);\r\n }\r\n}\r\n","<nav class=\"flex items-center gap-0.5\" [attr.aria-label]=\"effectiveAriaLabel()\">\r\n @if (showEdges()) {\r\n <button\r\n type=\"button\"\r\n [class]=\"cell()\"\r\n [disabled]=\"current() === 1\"\r\n [attr.aria-label]=\"labels().first\"\r\n (click)=\"goTo(1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">first_page</span>\r\n </button>\r\n }\r\n <button\r\n type=\"button\"\r\n [class]=\"cell()\"\r\n [disabled]=\"current() === 1\"\r\n [attr.aria-label]=\"labels().previous\"\r\n (click)=\"goTo(current() - 1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_left</span>\r\n </button>\r\n\r\n @if (compact()) {\r\n <span class=\"px-2 text-sm text-fg-muted tabular-nums\" aria-live=\"polite\">\r\n {{ labels().page }} {{ current() }} / {{ safeCount() }}\r\n </span>\r\n } @else {\r\n @for (item of items(); track item) {\r\n @if (item === 'ellipsis-start' || item === 'ellipsis-end') {\r\n <span\r\n aria-hidden=\"true\"\r\n class=\"inline-flex min-w-8 items-center justify-center text-sm text-fg-subtle select-none\"\r\n >…</span\r\n >\r\n } @else {\r\n <button\r\n type=\"button\"\r\n [class]=\"cell(item === current())\"\r\n [attr.aria-current]=\"item === current() ? 'page' : null\"\r\n [attr.aria-label]=\"labels().page + ' ' + item\"\r\n (click)=\"goTo(item)\"\r\n >\r\n {{ item }}\r\n </button>\r\n }\r\n }\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n [class]=\"cell()\"\r\n [disabled]=\"current() === safeCount()\"\r\n [attr.aria-label]=\"labels().next\"\r\n (click)=\"goTo(current() + 1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_right</span>\r\n </button>\r\n @if (showEdges()) {\r\n <button\r\n type=\"button\"\r\n [class]=\"cell()\"\r\n [disabled]=\"current() === safeCount()\"\r\n [attr.aria-label]=\"labels().last\"\r\n (click)=\"goTo(safeCount())\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">last_page</span>\r\n </button>\r\n }\r\n</nav>\r\n","import { Component, computed, forwardRef, inject, input, model, signal } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { MF_PASSWORD_INPUT_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Input, InputGroup, InputSuffix } from '@mesgflow/ui-kit/input';\r\n\r\n/**\r\n * `<mf-password-input [(value)]=\"password\" />` — `InputGroup` üstüne kompoze\r\n * edilmiş, sağda göster/gizle düğmesi taşıyan parola alanı (emsal:\r\n * `NumberInput`/`DateRangePicker`'ın AYNI `mf-input-group` kabuğunu\r\n * kullanma deseni). `type=\"password\"`/`\"text\"` arasında geçiş SADECE\r\n * görünürlük içindir — değer her zaman `value` model'inde düz metin olarak\r\n * tutulur.\r\n */\r\n@Component({\r\n selector: 'mf-password-input',\r\n exportAs: 'mfPasswordInput',\r\n imports: [Icon, Input, InputGroup, InputSuffix],\r\n host: { class: 'inline-flex', '[class.w-full]': 'fullWidth()' },\r\n template: `\r\n <mf-input-group [hasError]=\"hasError()\" [disabled]=\"disabled()\">\r\n <input\r\n mfInput\r\n [type]=\"visible() ? 'text' : 'password'\"\r\n class=\"border-0 bg-transparent p-0 shadow-none focus-visible:outline-none\"\r\n [value]=\"value()\"\r\n [disabled]=\"disabled()\"\r\n [placeholder]=\"placeholder()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n <button\r\n mfInputSuffix\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"visible() ? effectiveHideLabel() : effectiveShowLabel()\"\r\n (click)=\"toggle()\"\r\n >\r\n <span mfIcon [size]=\"16\">{{ visible() ? 'visibility_off' : 'visibility' }}</span>\r\n </button>\r\n </mf-input-group>\r\n `,\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => PasswordInput), multi: true },\r\n ],\r\n})\r\nexport class PasswordInput extends ValueAccessorBase<string> implements ControlValueAccessor {\r\n readonly value = model('');\r\n readonly placeholder = input('');\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n readonly ariaLabel = input('');\r\n readonly fullWidth = input(false);\r\n readonly showLabel = input<string>();\r\n readonly hideLabel = input<string>();\r\n\r\n private readonly passwordLabels = inject(MF_PASSWORD_INPUT_LABELS);\r\n protected readonly effectiveShowLabel = computed(\r\n () => this.showLabel() ?? this.passwordLabels().show,\r\n );\r\n protected readonly effectiveHideLabel = computed(\r\n () => this.hideLabel() ?? this.passwordLabels().hide,\r\n );\r\n\r\n protected readonly visible = signal(false);\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value);\r\n }\r\n\r\n protected toggle(): void {\r\n this.visible.update((v) => !v);\r\n }\r\n\r\n protected onInput(raw: string): void {\r\n this.value.set(raw);\r\n this.onChange(raw);\r\n }\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const popoverPanelVariants = cva(\r\n 'overflow-auto rounded-lg border border-hairline bg-overlay shadow-2',\r\n {\r\n variants: {\r\n padding: {\r\n none: 'p-0',\r\n sm: 'p-1',\r\n md: 'p-2',\r\n lg: 'p-3',\r\n },\r\n },\r\n defaultVariants: { padding: 'sm' },\r\n },\r\n);\r\n\r\nexport type PopoverPadding = VariantProps<typeof popoverPanelVariants>['padding'];\r\n","import { CdkOverlayOrigin, OverlayModule, type ConnectedPosition } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { popoverPanelVariants, type PopoverPadding } from './popover.variants';\r\n\r\nexport type PopoverPlacement =\r\n | 'bottom-start'\r\n | 'bottom-end'\r\n | 'top-start'\r\n | 'top-end'\r\n | 'top'\r\n | 'bottom'\r\n | 'left'\r\n | 'right'\r\n | 'right-start';\r\n\r\n/** `--duration-fast` (tokens/motion.css) ile birebir — `animate-overlay-out`un süresi. */\r\nconst EXIT_MS = 120;\r\n\r\nconst PLACEMENTS: Record<PopoverPlacement, ConnectedPosition[]> = {\r\n 'bottom-start': [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\r\n ],\r\n 'bottom-end': [\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\r\n ],\r\n 'top-start': [\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\r\n ],\r\n 'top-end': [\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\r\n ],\r\n /** Ortalanmış dört yön — köşe hizalı değişkenlerin aksine tetikleyicinin TAM ortasına hizalanır (ör. Tooltip'in gelecekteki Popover geçişi için, bkz. plan Faz 1c). */\r\n top: [\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -4 },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 },\r\n ],\r\n bottom: [\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -4 },\r\n ],\r\n left: [\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -4 },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 4 },\r\n ],\r\n right: [\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 4 },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -4 },\r\n ],\r\n /** Sağda, tetikleyicinin ÜSTÜYLE hizalı (ortalanmış DEĞİL) — Sidebar daraltılmış nav satırının flyout'u gibi çok satırlı panellerde `right`in dikey ortalaması paneli beklenmedik yönde kaydırır. */\r\n 'right-start': [\r\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 8 },\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -8 },\r\n ],\r\n};\r\n\r\n/**\r\n * `<button cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" (click)=\"open.set(true)\">...</button>`\r\n * `<mf-popover [origin]=\"trigger\" [(open)]=\"open\">...içerik (ng-content)...</mf-popover>`\r\n *\r\n * `Select`/`TableColumnsMenu`/`TableFilterMenu`/`DatePicker`'ın HER BİRİNİN\r\n * ayrı ayrı yazdığı `cdkConnectedOverlay` + pozisyon dizisi + backdrop/ESC\r\n * kapama iskeletini TEK yerde toplayan genel amaçlı panel primitifi (bkz.\r\n * README \"Yeni bir primitif gerektiğinde\"). YENİ kullanım noktaları bunu\r\n * kullanmalı — mevcut dört bileşenin buna taşınması BİLEREK bu değişiklikle\r\n * birlikte yapılmadı: her biri kendi klavye/vurgu (highlight) mantığını\r\n * Popover'ın panel içeriğiyle nasıl kompoze edeceğine karar vermeli, ayrı ve\r\n * her ekranın tarayıcıda tek tek doğrulanmasını gerektiren bir iş.\r\n *\r\n * `origin`, CDK'nın `cdkOverlayOrigin` directive'inin `exportAs` referansı —\r\n * ayrı bir wrapper directive'e gerek yok, CDK zaten sağlıyor.\r\n */\r\n@Component({\r\n selector: 'mf-popover',\r\n exportAs: 'mfPopover',\r\n imports: [OverlayModule],\r\n host: { class: 'contents' },\r\n template: `\r\n <ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"origin()\"\r\n [cdkConnectedOverlayOpen]=\"attached()\"\r\n [cdkConnectedOverlayPositions]=\"positions()\"\r\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop()\"\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n [cdkConnectedOverlayMinWidth]=\"\r\n matchTriggerWidth() ? origin().elementRef.nativeElement.offsetWidth : null\r\n \"\r\n (backdropClick)=\"close()\"\r\n (detach)=\"close()\"\r\n >\r\n <!--\r\n Panel sarmalayıcısı BİLEREK odaklanabilir değil — Escape'i içindeki\r\n odaklanmış elemandan yukarı taşıyan bir olay-delegasyon kapsayıcısı,\r\n kendisi bir etkileşim hedefi değil.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <div [class]=\"classes()\" (keydown.escape)=\"close()\">\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n `,\r\n})\r\nexport class Popover {\r\n readonly origin = input.required<CdkOverlayOrigin>();\r\n readonly open = model(false);\r\n readonly placement = input<PopoverPlacement>('bottom-start');\r\n readonly padding = input<PopoverPadding>('sm');\r\n /** Backdrop şeffaf ama TIKLANABİLİR — dışarı tıklayınca kapanması için var, görsel karartma YOK. */\r\n readonly hasBackdrop = input(true);\r\n /** `true` ise panel tetikleyiciden DAR olamaz (min-width) — genişleyebilir, küçülemez. */\r\n readonly matchTriggerWidth = input(false);\r\n readonly panelClass = input('');\r\n\r\n readonly closed = output<void>();\r\n\r\n /**\r\n * `open()` MANTIKSAL durumu taşır (tüketici `[(open)]` ile doğrudan\r\n * yazabilir — ör. `Select`'in bir seçenek tıklamasında `this.open.set(false)`\r\n * çağırması). `attached()` ise CDK'ya bağlanan GERÇEK durum: `open()`\r\n * `false`'a düştüğünde panel ANINDA kaldırılmaz, `closing` işaretlenip\r\n * `animate-overlay-out` oynatılır, `EXIT_MS` sonra `attached` da `false`\r\n * olur. Bu ikili, `DialogService.open()`'daki `closePredicate` gecikmesiyle\r\n * AYNI doktrini CDK Overlay tarafında uyguluyor (CDK'nın `cdkConnectedOverlay`'i\r\n * Dialog'un aksine bir \"kapanışı ertele\" kancası SUNMUYOR, bu yüzden\r\n * `effect()` tabanlı bu yaklaşım gerekiyor).\r\n */\r\n protected readonly attached = signal(false);\r\n protected readonly closing = signal(false);\r\n private exitTimer?: ReturnType<typeof setTimeout>;\r\n\r\n protected readonly positions = computed(() => PLACEMENTS[this.placement()]);\r\n protected readonly classes = computed(() =>\r\n cn(\r\n popoverPanelVariants({ padding: this.padding() }),\r\n this.closing() ? 'animate-overlay-out' : 'animate-overlay-in',\r\n this.panelClass(),\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const shouldBeOpen = this.open();\r\n clearTimeout(this.exitTimer);\r\n\r\n if (shouldBeOpen) {\r\n this.closing.set(false);\r\n this.attached.set(true);\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n if (!this.attached()) return;\r\n\r\n const reducedMotion =\r\n typeof matchMedia !== 'undefined' &&\r\n matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n if (reducedMotion) {\r\n this.attached.set(false);\r\n return;\r\n }\r\n\r\n this.closing.set(true);\r\n this.exitTimer = setTimeout(() => {\r\n this.attached.set(false);\r\n this.closing.set(false);\r\n }, EXIT_MS);\r\n });\r\n });\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.closed.emit();\r\n }\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const progressTrackVariants = cva(\r\n 'relative block w-full overflow-hidden rounded-full bg-primary-tint',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'h-1',\r\n md: 'h-1.5',\r\n },\r\n },\r\n defaultVariants: { size: 'md' },\r\n },\r\n);\r\n\r\nexport type ProgressSize = VariantProps<typeof progressTrackVariants>['size'];\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { cn, MF_PROGRESS_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { progressTrackVariants, type ProgressSize } from './progress.variants';\r\n\r\n/**\r\n * `<mf-progress [value]=\"42\" />` (belirlenmiş) veya `<mf-progress\r\n * indeterminate />` (belirsiz — yükleme/tarama gibi süresi bilinmeyen\r\n * işlemler). `animate-progress-slide` keyframe'i `Table`'ın `showStaleOverlay`\r\n * şeridiyle AYNI (tokens.css'te tek tanım, bkz. table.html) — iki yerde ayrı\r\n * ayrı animasyon TANIMLANMADI.\r\n */\r\n@Component({\r\n selector: 'mf-progress',\r\n host: {\r\n role: 'progressbar',\r\n '[attr.aria-valuenow]': 'indeterminate() ? null : clampedValue()',\r\n '[attr.aria-valuemin]': '0',\r\n '[attr.aria-valuemax]': '100',\r\n '[attr.aria-label]': 'effectiveAriaLabel()',\r\n '[class]': 'trackClasses()',\r\n },\r\n template: `\r\n @if (indeterminate()) {\r\n <div class=\"h-full w-1/3 animate-progress-slide bg-accent-fill\" aria-hidden=\"true\"></div>\r\n } @else {\r\n <div\r\n class=\"h-full rounded-full bg-accent-fill transition-[width] duration-base ease-out\"\r\n [style.width.%]=\"clampedValue()\"\r\n ></div>\r\n }\r\n `,\r\n})\r\nexport class Progress {\r\n readonly value = input(0);\r\n readonly indeterminate = input(false);\r\n readonly size = input<ProgressSize>('md');\r\n /** `role=\"progressbar\"` için ARIA gerektirdiği erişilebilir ad — bağlamına göre (ör. \"Loading\", \"File upload\") override edilmeli; verilmezse `MF_PROGRESS_LABELS`. */\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly progressLabels = inject(MF_PROGRESS_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.progressLabels().ariaLabel,\r\n );\r\n\r\n protected readonly clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\r\n protected readonly trackClasses = computed(() =>\r\n cn(progressTrackVariants({ size: this.size() })),\r\n );\r\n}\r\n","import { Component, computed, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { nextId } from '@mesgflow/ui-kit/core';\r\n\r\nexport type RadioGroupOrientation = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * `<mf-radio-group [(value)]=\"plan\"><label><input type=\"radio\" mfRadio\r\n * [value]=\"'pro'\" /> Pro</label>...</mf-radio-group>`\r\n *\r\n * Projekte edilen `input[mfRadio]` öğeleri DI ile bu bileşene bağlanır\r\n * (`Radio`'nun `inject(RadioGroup)`'u — bkz. `radio.ts`), `name`/`checked`/\r\n * `disabled` GRUPTAN gelir; her `mfRadio` KENDİ `mf-radio-group` atası\r\n * DIŞINDA kullanılamaz.\r\n *\r\n * Ok tuşu navigasyonu/roving tabindex için ÖZEL bir odak yöneticisi\r\n * (`@angular/aria`'da radio pattern'i olmadığı için akla gelen CDK\r\n * `FocusKeyManager`) BİLEREK YOK — hepsi AYNI native `name` attribute'unu\r\n * paylaşan gerçek `<input type=\"radio\">` öğeleri olduğu için tarayıcı bunu\r\n * ZATEN ücretsiz sağlıyor (native radio grubu semantiği). Üstüne bir odak\r\n * yöneticisi eklemek gerçek davranışı TEKRARLAYIP çakıştırırdı.\r\n */\r\n@Component({\r\n selector: 'mf-radio-group',\r\n exportAs: 'mfRadioGroup',\r\n host: {\r\n role: 'radiogroup',\r\n '[class]': 'hostClasses()',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.aria-orientation]': 'orientation()',\r\n },\r\n template: '<ng-content />',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => RadioGroup), multi: true },\r\n ],\r\n})\r\nexport class RadioGroup<T = unknown> implements ControlValueAccessor {\r\n readonly value = model<T | null>(null);\r\n readonly name = input(nextId('mf-radio-group'));\r\n readonly orientation = input<RadioGroupOrientation>('vertical');\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input('');\r\n\r\n private onChange: (value: T | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected readonly hostClasses = computed(() =>\r\n this.orientation() === 'horizontal' ? 'flex items-center gap-4' : 'flex flex-col gap-2',\r\n );\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n registerOnChange(fn: (value: T | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /** `Radio`'nun `(change)` işleyicisinden çağrılır — bkz. `radio.ts`. */\r\n onRadioChange(value: T): void {\r\n this.value.set(value);\r\n this.onChange(value);\r\n this.onTouched();\r\n }\r\n}\r\n","import { Directive, computed, inject, input } from '@angular/core';\r\nimport { cn, type MfSize } from '@mesgflow/ui-kit/core';\r\nimport { RadioGroup } from './radio-group';\r\n\r\nconst SIZE_CLASSES: Record<MfSize, string> = { sm: 'h-3.5 w-3.5', md: 'h-4 w-4', lg: 'h-5 w-5' };\r\n\r\n/**\r\n * `<input type=\"radio\" mfRadio [value]=\"'pro'\" />` — `Checkbox` (bkz.\r\n * checkbox.ts) ile AYNI \"native accent-color\" deseni, `rounded-full` dışında\r\n * fark yok. Bir `mf-radio-group` ATASI ZORUNLU — `name`/`checked`/`disabled`\r\n * DI ile ondan okunur (bkz. `radio-group.ts`'in JSDoc'u); grup dışında\r\n * kullanılırsa `inject(RadioGroup)` hata fırlatır (fail-fast).\r\n */\r\n@Directive({\r\n selector: 'input[type=radio][mfRadio]',\r\n host: {\r\n '[class]': 'classes()',\r\n '[attr.name]': 'group.name()',\r\n '[checked]': 'group.value() === value()',\r\n '[disabled]': 'group.disabled() || disabled()',\r\n '(change)': 'onChange()',\r\n },\r\n})\r\nexport class Radio<T = unknown> {\r\n protected readonly group = inject<RadioGroup<T>>(RadioGroup);\r\n\r\n readonly size = input<MfSize>('md');\r\n readonly value = input<T | undefined>(undefined);\r\n readonly disabled = input(false);\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n SIZE_CLASSES[this.size()],\r\n 'shrink-0 rounded-full border-border accent-primary-600 dark:accent-primary-400 transition-colors duration-fast ease-emphasis ' +\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\r\n ),\r\n );\r\n\r\n protected onChange(): void {\r\n const value = this.value();\r\n if (value !== undefined) {\r\n this.group.onRadioChange(value);\r\n }\r\n }\r\n}\r\n","import {\r\n Component,\r\n booleanAttribute,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { MF_RATING_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\n\r\nlet ratingIdSeq = 0;\r\n\r\n/**\r\n * `<mf-rating [(value)]=\"score\" />` · salt okunur ortalama: `<mf-rating [value]=\"3.7\" readonly />`\r\n *\r\n * Etkileşimli mod yerel `<input type=\"radio\">`'lar üzerine kurulu (görsel olarak gizli): ok tuşu\r\n * gezinmesi, tek sekme durağı, form davranışı tarayıcıdan gelir — `role=\"radiogroup\"` + her\r\n * yıldız \"3 out of 5\" gibi adlı bir radyo. Üzerine gelince önizleme; seçili yıldıza tekrar\r\n * tıklamak temizler (`allowClear`). Salt okunur mod tek bir `role=\"img\"` (\"3.7 out of 5\");\r\n * ondalıklar yıldızın kısmen dolmasıyla gösterilir (ortalama puanlar için).\r\n */\r\n@Component({\r\n selector: 'mf-rating',\r\n exportAs: 'mfRating',\r\n imports: [Icon, NgTemplateOutlet],\r\n host: {\r\n class: 'inline-flex',\r\n '[attr.role]': \"readonly() ? 'img' : 'radiogroup'\",\r\n '[attr.aria-label]': 'hostLabel()',\r\n '[attr.aria-disabled]': 'isDisabled() || null',\r\n '(pointerleave)': 'hover.set(null)',\r\n },\r\n templateUrl: './rating.html',\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Rating), multi: true }],\r\n})\r\nexport class Rating extends ValueAccessorBase<number> implements ControlValueAccessor {\r\n readonly value = model(0);\r\n readonly max = input(5);\r\n readonly readonly = input(false, { transform: booleanAttribute });\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n /** Seçili yıldıza tekrar tıklamak değeri 0'a çeker. */\r\n readonly allowClear = input(true, { transform: booleanAttribute });\r\n readonly size = input(20);\r\n /** Verilmezse `MfLabels.rating.ariaLabel`. */\r\n readonly ariaLabel = input<string>();\r\n\r\n protected readonly labels = inject(MF_RATING_LABELS);\r\n protected readonly name = `mf-rating-${++ratingIdSeq}`;\r\n protected readonly hover = signal<number | null>(null);\r\n private readonly formDisabled = signal(false);\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\r\n protected readonly stars = computed(() => Array.from({ length: this.max() }, (_, i) => i + 1));\r\n /** Görüntülenen değer — önizleme varsa o, yoksa gerçek değer. */\r\n protected readonly shown = computed(() => this.hover() ?? this.value());\r\n\r\n protected readonly hostLabel = computed(() => {\r\n const base = this.ariaLabel() ?? this.labels().ariaLabel;\r\n if (!this.readonly()) return base;\r\n const rounded = Math.round(this.value() * 10) / 10;\r\n return `${base}: ${rounded} ${this.labels().outOf} ${this.max()}`;\r\n });\r\n\r\n /** Yıldızın doluluk yüzdesi (0–100) — salt okunur ondalıklar için kısmi. */\r\n protected fill(star: number): number {\r\n const amount = this.shown() - (star - 1);\r\n return Math.round(Math.min(1, Math.max(0, amount)) * 100);\r\n }\r\n\r\n protected starLabel(star: number): string {\r\n return `${star} ${this.labels().outOf} ${this.max()}`;\r\n }\r\n\r\n /**\r\n * TEK giriş noktası `click`: tarayıcı ok tuşuyla radyo seçiminde de `click` üretir. `change`\r\n * ayrıca dinlenmez — seçili radyoya tıklamak `change` üretmediğinden temizleme yalnızca\r\n * click'te yakalanabiliyor, ikisini birden dinlemek ise yeni seçimde çift tetiklenirdi.\r\n */\r\n protected choose(star: number): void {\r\n if (this.readonly() || this.isDisabled()) return;\r\n const next = this.allowClear() && star === this.value() ? 0 : star;\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n /**\r\n * Klavyeyle temizleme: Delete/Backspace. Seçili radyoda Space tarayıcıda `click` üretmez\r\n * (radyo zaten seçili — gerçek tarayıcıda doğrulandı), bu yüzden fareyle yeniden tıklamanın\r\n * klavye karşılığı ayrı bir tuş.\r\n */\r\n protected clear(event: Event): void {\r\n if (this.readonly() || this.isDisabled() || !this.allowClear() || this.value() === 0) return;\r\n event.preventDefault();\r\n this.value.set(0);\r\n this.onChange(0);\r\n this.onTouched();\r\n }\r\n\r\n protected preview(star: number | null): void {\r\n if (!this.readonly() && !this.isDisabled()) this.hover.set(star);\r\n }\r\n\r\n writeValue(value: number | null): void {\r\n this.value.set(value ?? 0);\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.formDisabled.set(disabled);\r\n }\r\n}\r\n","@for (star of stars(); track star) {\r\n <!-- Görsel yıldız: boş taban + üstte doluluk yüzdesi kadar kırpılmış dolu yıldız. -->\r\n <ng-template #glyph>\r\n <span\r\n aria-hidden=\"true\"\r\n class=\"relative block\"\r\n [style.width.px]=\"size()\"\r\n [style.height.px]=\"size()\"\r\n >\r\n <span mfIcon [size]=\"size()\" class=\"absolute inset-0 text-fg-subtle\">star</span>\r\n <span class=\"absolute inset-y-0 start-0 overflow-hidden\" [style.width.%]=\"fill(star)\">\r\n <span mfIcon [size]=\"size()\" [filled]=\"true\" class=\"text-warning\">star</span>\r\n </span>\r\n </span>\r\n </ng-template>\r\n\r\n @if (readonly()) {\r\n <span class=\"p-0.5\"><ng-container [ngTemplateOutlet]=\"glyph\" /></span>\r\n } @else {\r\n <label\r\n class=\"cursor-pointer rounded-sm p-0.5 transition-transform duration-fast ease-spring has-[:focus-visible]:outline has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-1 has-[:focus-visible]:outline-focus-ring hover:scale-110\"\r\n [class.opacity-50]=\"isDisabled()\"\r\n [class.pointer-events-none]=\"isDisabled()\"\r\n (pointerenter)=\"preview(star)\"\r\n >\r\n <input\r\n type=\"radio\"\r\n class=\"sr-only\"\r\n [name]=\"name\"\r\n [value]=\"star\"\r\n [checked]=\"value() === star\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"starLabel(star)\"\r\n (click)=\"choose(star)\"\r\n (keydown.delete)=\"clear($event)\"\r\n (keydown.backspace)=\"clear($event)\"\r\n (blur)=\"onTouched()\"\r\n />\r\n <ng-container [ngTemplateOutlet]=\"glyph\" />\r\n </label>\r\n }\r\n}\r\n","import {\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { cn, isRtl, scrollFromInlineStart } from '@mesgflow/ui-kit/core';\r\n\r\nexport type ScrollAreaOrientation = 'vertical' | 'horizontal';\r\n\r\n/**\r\n * `<mf-scroll-area class=\"max-h-64\"><div class=\"p-4\">...uzun içerik...</div></mf-scroll-area>`\r\n * — kenar \"solma\" maskesi (`mask-image`, `TabScroller`'ın AYNI tekniği —\r\n * bkz. `tabs/tab-scroller.ts` — ama ok-düğmesi/`scrollByDir` YOK, burada\r\n * gerek yok) kaydırılabilir olduğunu ima eder. Native scrollbar GİZLENMİYOR\r\n * (`TabScroller`'ın aksine) — `tokens/color.css`'teki global\r\n * `scrollbar-width:thin` sayesinde ZATEN ince/tema-uyumlu, kullanıcının\r\n * scrollbar'ı GÖRMESİ genel amaçlı bir kaydırma alanında faydalı.\r\n */\r\n@Component({\r\n selector: 'mf-scroll-area',\r\n exportAs: 'mfScrollArea',\r\n host: {\r\n '[class]': 'hostClasses()',\r\n '(scroll)': 'updateEdges()',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class ScrollArea {\r\n readonly orientation = input<ScrollAreaOrientation>('vertical');\r\n\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private readonly vertical = computed(() => this.orientation() === 'vertical');\r\n\r\n protected readonly canScrollStart = signal(false);\r\n protected readonly canScrollEnd = signal(false);\r\n\r\n protected readonly hostClasses = computed(() =>\r\n cn('block', this.vertical() ? 'min-h-0 overflow-y-auto' : 'flex min-w-0 overflow-x-auto'),\r\n );\r\n\r\n constructor() {\r\n const destroyRef = inject(DestroyRef);\r\n\r\n afterNextRender(() => {\r\n this.updateEdges();\r\n if (typeof ResizeObserver === 'undefined') return;\r\n const observer = new ResizeObserver(() => this.updateEdges());\r\n observer.observe(this.elementRef.nativeElement);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n\r\n effect(() => {\r\n const start = this.canScrollStart() ? 24 : 0;\r\n const end = this.canScrollEnd() ? 24 : 0;\r\n // Maske satır başından sonuna — RTL'de başlangıç sağ kenar.\r\n const direction = this.vertical()\r\n ? 'to bottom'\r\n : isRtl(this.elementRef.nativeElement)\r\n ? 'to left'\r\n : 'to right';\r\n const mask = `linear-gradient(${direction}, transparent, black ${start}px, black calc(100% - ${end}px), transparent 100%)`;\r\n this.elementRef.nativeElement.style.setProperty('mask-image', mask);\r\n this.elementRef.nativeElement.style.setProperty('-webkit-mask-image', mask);\r\n });\r\n }\r\n\r\n protected updateEdges(): void {\r\n const node = this.elementRef.nativeElement;\r\n if (this.vertical()) {\r\n const max = node.scrollHeight - node.clientHeight;\r\n this.canScrollStart.set(node.scrollTop > 1);\r\n this.canScrollEnd.set(max > 1 && node.scrollTop < max - 1);\r\n return;\r\n }\r\n const max = node.scrollWidth - node.clientWidth;\r\n const offset = scrollFromInlineStart(node); // RTL'de scrollLeft negatif\r\n this.canScrollStart.set(offset > 1);\r\n this.canScrollEnd.set(max > 1 && offset < max - 1);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n computed,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { MF_SEARCH_INPUT_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Input } from '@mesgflow/ui-kit/input';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\n\r\n/**\r\n * `<mf-search-input [(value)]=\"term\" [loading]=\"fetching()\" placeholder=\"Ara...\" />`\r\n *\r\n * Kapalıyken sadece bir ikon-buton genişliğinde (ikon tıklanabilir/odaklanabilir\r\n * — hem mouse hem klavye ile genişliyor), odak alınca/tıklanınca genişliyor.\r\n * Yazarken debounce süresi boyunca VE (varsa) dışarıdan verilen `loading`\r\n * true olduğu sürece dönen bir spinner gösteriyor — \"arıyor\" hissi debounce\r\n * bitiminde kaybolmuyor, gerçek sorgu sonucu gelene kadar sürüyor.\r\n *\r\n * Component (directive değil) — Field/Switch gibi gerçek iç yapı (ikon+input+\r\n * temizle butonu+genişleme animasyonu) gerektiriyor (bkz. projects/ui-kit/README.md\r\n * \"Directive mi, component mi?\").\r\n */\r\n@Component({\r\n selector: 'mf-search-input',\r\n exportAs: 'mfSearchInput',\r\n imports: [Icon, Input, Tooltip],\r\n host: { class: 'inline-block', '[class.w-full]': 'fullWidth()' },\r\n templateUrl: './search-input.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SearchInput), multi: true },\r\n ],\r\n})\r\nexport class SearchInput extends ValueAccessorBase<string> implements ControlValueAccessor {\r\n readonly value = model('');\r\n readonly placeholder = input<string>();\r\n readonly ariaLabel = input<string>();\r\n readonly tooltipLabel = input<string>();\r\n /** Tüketicinin gerçek veri çekme durumu — debounce bittikten sonra da spinner'ı sürdürür. */\r\n readonly loading = input(false);\r\n readonly debounceMs = input(300);\r\n /**\r\n * `false` → her zaman tam genişlikte açık, ikon tıklanabilir bir \"kapı\"\r\n * değil (bkz. `table/table.ts` — bir VERİ TABLOSUNDA arama gizlenmez,\r\n * bu bir navbar deseni; Table `[collapsible]=\"false\"` geçiyor).\r\n * Varsayılan `true` — bu bileşenin bugünkü tek gerçek davranışı, henüz\r\n * başka bir tüketici yok ama gelecekte navbar/toolbar gibi dar bağlamlarda\r\n * ihtiyaç olabilir diye korunuyor.\r\n */\r\n readonly collapsible = input(true);\r\n /**\r\n * `true` → kutu sabit `w-64` (256px) yerine kapsayıcısının TAM genişliğinde\r\n * açılır — kutunun panelin geri kalanıyla (ör. yan yana duran bir sekme\r\n * listesiyle) aynı genişlikte hizalanması gereken bağlamlar için.\r\n * `collapsible` ile birlikte anlamlı (`[collapsible]=\"false\"` olmadan\r\n * daralmış hâl `w-10` sabit kalır, `fullWidth` sadece GENİŞLEMİŞ genişliği\r\n * değiştirir). Varsayılan `false` — navbar/toolbar'daki bugünkü sabit\r\n * genişlik davranışı değişmez.\r\n */\r\n readonly fullWidth = input(false);\r\n\r\n private readonly searchInputLabels = inject(MF_SEARCH_INPUT_LABELS);\r\n protected readonly effectivePlaceholder = computed(\r\n () => this.placeholder() ?? this.searchInputLabels().placeholder,\r\n );\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.searchInputLabels().ariaLabel,\r\n );\r\n protected readonly effectiveTooltipLabel = computed(\r\n () => this.tooltipLabel() ?? this.searchInputLabels().ariaLabel,\r\n );\r\n protected readonly effectiveClearAriaLabel = computed(\r\n () => this.searchInputLabels().clearAriaLabel,\r\n );\r\n\r\n private readonly expandedState = signal(false);\r\n /** `collapsible()` false ise HER ZAMAN true — genişleme mekaniği devre dışı kalır ama `expandedState` yine de \"odaklanınca tooltip'i kapat\" gibi yan mantık için iç durumu takip etmeye devam eder. */\r\n protected readonly expanded = computed(() => !this.collapsible() || this.expandedState());\r\n /** `w-64`/`w-10` yerine `w-full` — bkz. `fullWidth` doc yorumu. */\r\n protected readonly inputWidthClass = computed(() =>\r\n this.fullWidth()\r\n ? 'w-full cursor-text pe-8 ps-9'\r\n : this.expanded()\r\n ? 'w-64 cursor-text pe-8 ps-9'\r\n : 'w-10 cursor-pointer caret-transparent pe-2 ps-9',\r\n );\r\n protected readonly draft = signal('');\r\n protected readonly pending = signal(false);\r\n protected readonly showSpinner = computed(() => this.pending() || this.loading());\r\n\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\r\n private readonly tooltipRef = viewChild(Tooltip);\r\n private debounceHandle?: ReturnType<typeof setTimeout>;\r\n\r\n constructor() {\r\n super();\r\n // Dışarıdan (ör. \"Filtreleri temizle\") value() sıfırlanırsa draft de eşlensin.\r\n effect(() => {\r\n const current = this.value();\r\n untracked(() => this.draft.set(current));\r\n });\r\n }\r\n\r\n writeValue(value: string): void {\r\n this.value.set(value);\r\n }\r\n\r\n protected expand(): void {\r\n this.expandedState.set(true);\r\n // Tooltip'in kendi `(focus)` dinleyicisi AYNI olayda tetiklendiğinden\r\n // (\"Ara...\" balonu) genişlemiş, placeholder'ı zaten aynı metni gösteren\r\n // input'un üstünde gereksiz kalıyordu — anında kapatılıyor (gerçek bulgu).\r\n this.tooltipRef()?.hide();\r\n }\r\n\r\n protected collapseIfEmpty(): void {\r\n if (!this.draft().trim()) this.expandedState.set(false);\r\n }\r\n\r\n protected onInput(raw: string): void {\r\n this.draft.set(raw);\r\n this.pending.set(true);\r\n this.onTouched();\r\n clearTimeout(this.debounceHandle);\r\n this.debounceHandle = setTimeout(() => {\r\n this.pending.set(false);\r\n this.value.set(raw);\r\n this.onChange(raw);\r\n }, this.debounceMs());\r\n }\r\n\r\n protected clear(): void {\r\n clearTimeout(this.debounceHandle);\r\n this.pending.set(false);\r\n this.draft.set('');\r\n this.value.set('');\r\n this.onChange('');\r\n this.onTouched();\r\n this.inputEl()?.nativeElement.focus();\r\n }\r\n\r\n protected onEscape(): void {\r\n if (this.draft()) this.clear();\r\n else this.inputEl()?.nativeElement.blur();\r\n }\r\n}\r\n","<div class=\"relative inline-flex items-center\" [class.w-full]=\"fullWidth()\">\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"pointer-events-none absolute top-1/2 start-2.5 -translate-y-1/2 text-fg-subtle\"\r\n [class.animate-spin]=\"showSpinner()\"\r\n >{{ showSpinner() ? 'progress_activity' : 'search' }}</span\r\n >\r\n <input\r\n mfInput\r\n #inputEl\r\n type=\"text\"\r\n [class]=\"inputWidthClass()\"\r\n class=\"transition-[width] duration-base ease-out\"\r\n [value]=\"draft()\"\r\n [placeholder]=\"expanded() ? effectivePlaceholder() : ''\"\r\n [attr.aria-label]=\"effectiveAriaLabel()\"\r\n [mfTooltip]=\"expanded() ? '' : effectiveTooltipLabel()\"\r\n (focus)=\"expand()\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (blur)=\"collapseIfEmpty()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (expanded() && draft()) {\r\n <button\r\n type=\"button\"\r\n class=\"absolute top-1/2 end-2 -translate-y-1/2 appearance-none border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"clear()\"\r\n [attr.aria-label]=\"effectiveClearAriaLabel()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n</div>\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const segmentedTrackVariants = cva(\r\n 'inline-flex items-center gap-0.5 rounded-md bg-surface-alt p-0.5',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'text-xs',\r\n md: 'text-sm',\r\n },\r\n },\r\n defaultVariants: { size: 'md' },\r\n },\r\n);\r\n\r\nexport const segmentedItemVariants = cva(\r\n 'cursor-pointer appearance-none whitespace-nowrap rounded-sm border-0 bg-transparent px-2.5 py-1 text-fg-muted transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring',\r\n {\r\n variants: {\r\n selected: {\r\n true: 'bg-surface text-fg shadow-1',\r\n false: 'hover:text-fg',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50 active:scale-100',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { selected: false, disabled: false },\r\n },\r\n);\r\n\r\nexport type SegmentedControlSize = VariantProps<typeof segmentedTrackVariants>['size'];\r\n","import {\r\n Toolbar as AriaToolbar,\r\n ToolbarWidget as AriaToolbarWidget,\r\n ToolbarWidgetGroup as AriaToolbarWidgetGroup,\r\n} from '@angular/aria/toolbar';\r\nimport { Component, computed, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { ValueAccessorBase, cn } from '@mesgflow/ui-kit/core';\r\nimport {\r\n segmentedItemVariants,\r\n segmentedTrackVariants,\r\n type SegmentedControlSize,\r\n} from './segmented-control.variants';\r\n\r\nexport interface SegmentedOption<T> {\r\n label: string;\r\n value: T;\r\n}\r\n\r\n/**\r\n * `<mf-segmented-control [options]=\"opts\" [(value)]=\"mode\" />` — hizalama,\r\n * cihaz önizlemesi gibi KISA/tek-seçimli seçenek kümeleri için. `Tabs`'tan\r\n * farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving\r\n * tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın\r\n * `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —\r\n * dokümantasyondaki kompozisyon şekli birebir izlendi (dıştaki `ngToolbar`,\r\n * içteki `ngToolbarWidgetGroup [multi]=\"false\"`).\r\n */\r\n@Component({\r\n selector: 'mf-segmented-control',\r\n exportAs: 'mfSegmentedControl',\r\n imports: [AriaToolbar, AriaToolbarWidgetGroup, AriaToolbarWidget],\r\n host: { class: 'inline-block' },\r\n templateUrl: './segmented-control.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SegmentedControl), multi: true },\r\n ],\r\n})\r\nexport class SegmentedControl<T>\r\n extends ValueAccessorBase<T | null>\r\n implements ControlValueAccessor\r\n{\r\n readonly options = input.required<SegmentedOption<T>[]>();\r\n readonly value = model<T | null>(null);\r\n readonly size = input<SegmentedControlSize>('md');\r\n readonly ariaLabel = input('');\r\n readonly disabled = input(false);\r\n\r\n protected readonly toolbarValue = computed<T[]>(() =>\r\n this.value() == null ? [] : [this.value() as T],\r\n );\r\n protected readonly trackClasses = computed(() =>\r\n cn(segmentedTrackVariants({ size: this.size() })),\r\n );\r\n\r\n writeValue(value: T | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n /**\r\n * `@angular/aria/toolbar`'ın kendi widget-kayıt döngüsü, gerçek bir tıklama\r\n * OLMADAN da BOŞ bir dizi ile (`values: []`) tetiklenebiliyor (gerçek bulgu\r\n * — bir seçeneğe tıklarken bile araya giren, seçimle ilgisiz iç kayıt\r\n * event'leri). `this.value` her event'te güncellenir (görsel durum ETKİLENMEZ,\r\n * zaten `values[0]` genelde mevcut değerle AYNI), ama CVA `onChange`/`onTouched`\r\n * SADECE dolu bir dizi (gerçek bir seçim) geldiğinde tetiklenir — aksi halde\r\n * Reactive Forms'a sahte \"null'a değişti\" bildirimleri sızardı.\r\n */\r\n protected onToolbarValueChange(values: readonly T[]): void {\r\n this.value.set(values[0] ?? null);\r\n if (values.length > 0) {\r\n this.onChange(values[0]!);\r\n this.onTouched();\r\n }\r\n }\r\n\r\n protected itemClasses(option: SegmentedOption<T>): string {\r\n return cn(\r\n segmentedItemVariants({ selected: option.value === this.value(), disabled: this.disabled() }),\r\n );\r\n }\r\n}\r\n","<div\r\n ngToolbar\r\n [disabled]=\"disabled()\"\r\n [value]=\"toolbarValue()\"\r\n (valueChange)=\"onToolbarValueChange($event)\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [class]=\"trackClasses()\"\r\n>\r\n <div ngToolbarWidgetGroup [multi]=\"false\" [disabled]=\"disabled()\" class=\"contents\">\r\n @for (option of options(); track option.value) {\r\n <button type=\"button\" ngToolbarWidget [value]=\"option.value\" [class]=\"itemClasses(option)\">\r\n {{ option.label }}\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Bkz. `core/recipes.ts` `controlSurface` — aynı kabuk, tetikleyici bir\r\n * <button>'a uygulanıyor. `focus:border-accent` — Input/Combobox'ın ZATEN\r\n * sahip olduğu odak kenarlığı burada eksikti (gerçek bulgu): odaklı bir\r\n * select yalnızca outline ile belli oluyordu, kenarlık aksanlanmıyordu.\r\n */\r\nexport const selectTriggerVariants = cva(\r\n /*\r\n * `appearance-none`: bkz. button.variants.ts'teki aynı gerekçe — sıfırlamazsan\r\n * tarayıcının varsayılan `<button>` kenarlığı+dolgusu bu cva'nın\r\n * border/padding'iyle ÜST ÜSTE biner (gerçek bulgu, ilk ekran görüntüsünde\r\n * kolon başlıklarındaki sıralama butonları yanlışlıkla select kutusu gibi\r\n * göründü).\r\n */\r\n 'inline-flex w-full appearance-none items-center justify-between gap-2 rounded-md border border-border bg-surface text-fg shadow-control ' +\r\n 'transition-colors duration-fast ease-emphasis ' +\r\n 'hover:border-border-strong ' +\r\n 'focus:border-accent ' +\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n 'disabled:cursor-not-allowed disabled:pointer-events-none disabled:opacity-50 disabled:shadow-none disabled:hover:border-border',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'h-control-sm px-2.5 text-sm',\r\n md: 'h-control-md px-3 text-sm',\r\n lg: 'h-control-lg px-3.5 text-base',\r\n },\r\n /** Input/NumberInput ile aynı emsal — `@angular/forms/signals` rezerve `invalid` yerine `hasError`. */\r\n hasError: {\r\n true: 'border-danger focus-visible:outline-danger',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { size: 'md', hasError: false },\r\n },\r\n);\r\n\r\nexport type SelectSize = VariantProps<typeof selectTriggerVariants>['size'];\r\nexport type SelectHasError = VariantProps<typeof selectTriggerVariants>['hasError'];\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, forwardRef, inject, input, model, signal } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { Chip } from '@mesgflow/ui-kit/chip';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { cn, MF_SELECT_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { selectTriggerVariants, type SelectSize } from './select.variants';\r\n\r\nexport interface SelectOption<T> {\r\n label: string;\r\n value: T;\r\n}\r\n\r\n/**\r\n * `<mf-select [options]=\"opts\" [(value)]=\"chosen\" placeholder=\"Seç\" />`\r\n * (tek-seçimli, varsayılan) veya `<mf-select multiple [options]=\"opts\"\r\n * [(values)]=\"chosen\" />` (çoklu-seçim — tetikleyici seçilenleri Chip\r\n * özeti olarak gösterir, bir seçeneğe tıklamak paneli KAPATMAZ, tekrar\r\n * tıklamak seçimi KALDIRIR).\r\n *\r\n * `multiple` AÇIKKEN `value`/`(valueChange)` KULLANILMAZ — ayrı bir\r\n * `values: model<T[]>` var (bkz. aşağıda). İkisini AYIRMANIN sebebi:\r\n * `value`'nun TİPİNİ (`T | null`) tek-seçimli kullanım için DEĞİŞTİRMEDEN\r\n * bırakmak — mevcut tüm `[(value)]=\"tekTip\"` tüketicileri (Table'ın alan/\r\n * operatör/sayfa-boyutu seçicileri, TableFilterBar'ın VE/VEYA seçicisi)\r\n * BİREBİR aynı tipte kalıyor, çoklu-seçim EKLENTİ, DEĞİŞİKLİK değil.\r\n *\r\n * Bu kitin ilk overlay tabanlı primitifi — native `<select>` değil,\r\n * çünkü açılır panelin kendisi (arka plan/kenarlık/hover rengi) native\r\n * `<select>` popup'ında tarayıcı-bağımlı ve stillenemez kalıyordu; CDK Overlay\r\n * + kendi listbox'ımız panel dahil her pikseli bizim token sistemimizle\r\n * boyayabiliyor. `@angular/cdk` zaten bağımlı, ek paket gerekmedi — pozisyonlama\r\n * CSS'i `styles.css`'teki resmi `@angular/cdk/overlay-prebuilt.css`\r\n * import'undan geliyor (bkz. o import'un yanındaki not).\r\n *\r\n * Arama/virtual-scroll YOK — Table'ın alan/operatör/sayfa-boyutu\r\n * seçicileri gibi kısa listeler için kasıtlı olarak minimal.\r\n */\r\n@Component({\r\n selector: 'mf-select',\r\n exportAs: 'mfSelect',\r\n imports: [OverlayModule, Icon, Popover, Chip],\r\n host: { class: 'block' },\r\n templateUrl: './select.html',\r\n // `@angular/forms/signals`'ın `FormField` directive'i `[formField]` uygulandığı elemanda\r\n // `NG_VALUE_ACCESSOR`'ı `{self: true}` ile arıyor (bkz. signals.mjs `FormField.controlValueAccessors`)\r\n // — bulamazsa native form elemanı VARSAYIYOR. `mf-select` native değil (kendi CDK Overlay\r\n // panelini çizen bir component), o yüzden `invite-user-form`/`user-form`'daki\r\n // `[formField]=\"...roleId\"` bağlamasının çalışması için bu sözleşmeyi KENDİMİZ uygulamak\r\n // gerekiyor.\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Select), multi: true }],\r\n})\r\nexport class Select<T> implements ControlValueAccessor {\r\n readonly options = input.required<SelectOption<T>[]>();\r\n readonly value = model<T | null>(null);\r\n readonly multiple = input(false);\r\n /** SADECE `multiple=true`'da kullanılır — bkz. sınıf üstündeki JSDoc. */\r\n readonly values = model<T[]>([]);\r\n readonly maxVisibleChips = input(3);\r\n readonly placeholder = input<string>();\r\n readonly disabled = input(false);\r\n readonly size = input<SelectSize>('md');\r\n readonly hasError = input(false);\r\n readonly ariaLabel = input('');\r\n\r\n // `ControlValueAccessor`'ın gerçek Angular arayüzü `any` kullanıyor (bkz.\r\n // `@angular/forms`'un kendi tip tanımı) — burada `T | T[] | null` YAZMAK bu\r\n // sözleşmeyi İHLAL ETMİYOR, sadece tek/çoklu iki modu TEK bir callback\r\n // çiftinde (onChange/onTouched) taşımayı mümkün kılıyor.\r\n private onChange: (value: T | T[] | null) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n private readonly selectLabels = inject(MF_SELECT_LABELS);\r\n protected readonly effectivePlaceholder = computed(\r\n () => this.placeholder() ?? this.selectLabels().placeholder,\r\n );\r\n\r\n protected readonly open = signal(false);\r\n protected readonly highlighted = signal(0);\r\n\r\n protected readonly triggerClasses = computed(() =>\r\n cn(selectTriggerVariants({ size: this.size(), hasError: this.hasError() })),\r\n );\r\n\r\n protected readonly selectedLabel = computed(() => {\r\n const current = this.value();\r\n return this.options().find((option) => option.value === current)?.label ?? '';\r\n });\r\n\r\n protected readonly selectedOptions = computed(() => {\r\n if (!this.multiple()) return [];\r\n const selected = new Set(this.values());\r\n return this.options().filter((o) => selected.has(o.value));\r\n });\r\n protected readonly visibleChips = computed(() =>\r\n this.selectedOptions().slice(0, this.maxVisibleChips()),\r\n );\r\n protected readonly overflowChipCount = computed(() =>\r\n Math.max(0, this.selectedOptions().length - this.maxVisibleChips()),\r\n );\r\n\r\n protected toggle(): void {\r\n if (this.disabled()) return;\r\n if (!this.open())\r\n this.highlighted.set(\r\n Math.max(\r\n 0,\r\n this.options().findIndex((o) => o.value === this.value()),\r\n ),\r\n );\r\n this.open.update((v) => !v);\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.onTouched();\r\n }\r\n\r\n /** Tek-seçimli modda seçeneği commit eder VE paneli kapatır; çoklu-seçim modunda `toggleValue`'ya devreder (panel AÇIK kalır — bkz. `toggleValue`). */\r\n protected select(option: SelectOption<T>): void {\r\n if (this.multiple()) {\r\n this.toggleValue(option.value);\r\n return;\r\n }\r\n this.value.set(option.value);\r\n this.onChange(option.value);\r\n this.close();\r\n }\r\n\r\n /** Çoklu-seçimde bir değeri ekler/çıkarır — panel KAPANMAZ, kullanıcı birden fazla seçim yapabilir (Escape/dışarı tıklama ile kapatır). */\r\n private toggleValue(v: T): void {\r\n const current = this.values();\r\n const next = current.includes(v) ? current.filter((x) => x !== v) : [...current, v];\r\n this.values.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n writeValue(value: T | T[] | null): void {\r\n if (this.multiple()) {\r\n this.values.set(Array.isArray(value) ? value : []);\r\n } else {\r\n this.value.set(Array.isArray(value) ? null : value);\r\n }\r\n }\r\n\r\n registerOnChange(fn: (value: T | T[] | null) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n protected isSelected(option: SelectOption<T>): boolean {\r\n if (this.multiple()) return this.values().includes(option.value);\r\n return option.value === this.value();\r\n }\r\n\r\n protected optionClasses(option: SelectOption<T>, index: number): string {\r\n return cn(\r\n // `rounded-sm`(6px) — panelin kendi `rounded-lg`(12px) kapsayıcısı\r\n // içindeki İÇ İÇE (nested) daha küçük radius, bkz. styles.css radius\r\n // notu: menü öğesi gibi kontrol-içi satırlar bir kademe küçük kalıyor.\r\n 'flex cursor-pointer items-center justify-between gap-2 rounded-sm px-2.5 py-1.5 text-fg-muted transition-colors duration-fast ease-emphasis',\r\n index === this.highlighted() && !this.isSelected(option) && 'bg-surface-alt',\r\n // Seçili satır Badge/Avatar'daki aynı tonal işaret rol token'ını\r\n // konuşuyor (`color-mix()` tabanlı) — tutarlı \"tint fill\" imzası.\r\n this.isSelected(option) && 'bg-primary-tint text-primary-tint-fg',\r\n );\r\n }\r\n\r\n protected onTriggerKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n if (!this.open()) this.toggle();\r\n }\r\n }\r\n\r\n protected onPanelKeydown(event: KeyboardEvent): void {\r\n const options = this.options();\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.close();\r\n return;\r\n }\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n this.highlighted.update((i) => Math.min(options.length - 1, i + 1));\r\n return;\r\n }\r\n if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n this.highlighted.update((i) => Math.max(0, i - 1));\r\n return;\r\n }\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n const option = options[this.highlighted()];\r\n if (option) this.select(option);\r\n }\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"triggerClasses()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n @if (multiple()) {\r\n @if (selectedOptions().length > 0) {\r\n <span class=\"flex min-w-0 flex-1 flex-wrap items-center gap-1\">\r\n @for (option of visibleChips(); track option.label) {\r\n <mf-chip size=\"sm\">{{ option.label }}</mf-chip>\r\n }\r\n @if (overflowChipCount() > 0) {\r\n <mf-chip size=\"sm\">+{{ overflowChipCount() }}</mf-chip>\r\n }\r\n </span>\r\n } @else {\r\n <span class=\"truncate text-fg-subtle\">{{ effectivePlaceholder() }}</span>\r\n }\r\n } @else {\r\n <span class=\"truncate\" [class.text-fg-subtle]=\"!selectedLabel()\">\r\n {{ selectedLabel() || effectivePlaceholder() }}\r\n </span>\r\n }\r\n <span mfIcon [size]=\"18\" class=\"shrink-0 text-fg-subtle\">unfold_more</span>\r\n</button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [matchTriggerWidth]=\"true\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-multiselectable]=\"multiple() || null\"\r\n class=\"w-full max-h-64 min-w-[8rem] text-sm\"\r\n (keydown)=\"onPanelKeydown($event)\"\r\n >\r\n @for (option of options(); track option.label; let i = $index) {\r\n <!-- role=\"option\" BİLEREK odaklanabilir değil — klavye gezinmesi yukarıdaki listbox (keydown)'da merkezi. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <li\r\n role=\"option\"\r\n [attr.aria-selected]=\"isSelected(option)\"\r\n [class]=\"optionClasses(option, i)\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(option)\"\r\n >\r\n <span class=\"truncate\">{{ option.label }}</span>\r\n @if (isSelected(option)) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Kök panel: kart değil, yapısal/kenar-kenara chrome — `shadow-*`/`rounded-*`\r\n * YOK. `bg-chrome` (styles.css'te tanımlı, moda göre 975/950 basamağı arasında\r\n * takas olan yüzey rolü) — dark modda uygulamanın EN KOYU tonu, \"chrome her\r\n * zaman içerikten koyu\" kuralının kaynağı. Kenar artık `border-hairline`\r\n * (border-first depth, 2026-09 Deep Emerald geçişi) — `border-e` UZUN-EL\r\n * yazıldı (`border-e-hairline`, kısaltma DEĞİL) ki `appearance=\"brand\"`'ın\r\n * `border-e-transparent`'ı AYNI özgüllükte, cascade sırasına bağlı olmadan\r\n * güvenle üstüne yazabilsin.\r\n *\r\n * `appearance: 'chrome' | 'brand' | 'brand-light'` — `group/sidebar` + kök\r\n * elementteki `data-appearance` ATTRIBUTE'u (bkz. sidebar.html), alt\r\n * bileşenler kendi class'larına yeni bir input EKLEMEDEN\r\n * `group-data-[appearance=brand]/sidebar:`/`group-data-[appearance=brand-light]/sidebar:`\r\n * varyantıyla opt-in eder — CDK overlay'e (flyout/tenant listesi) taşınan\r\n * içerik bu grubun TORUNU DEĞİLDİR, bu yüzden overlay panelleri bilerek\r\n * katı `chrome` kalır (istenen: aşırı marka rengi overlay'lerde yorucu olur).\r\n *\r\n * `brand-light` — kullanıcı isteğiyle eklendi (varsayılan HÂLÂ `chrome`,\r\n * `brand`'in KENDİSİ birebir korunuyor — bu SADECE üçüncü bir seçenek):\r\n * `brand`in \"her adımda bir basamak açığa doğru\" desenini primary rampasının\r\n * AÇIK ucuna yansıtır (900→100, 800→200, 300→700, beyaz→900 gibi) — aynı\r\n * \"iki modda AYNI, marka her zaman sabit\" felsefesi, sadece açık zeminde.\r\n * `primary-100` `neutral-100` canvas'a karşı yalnızca 1.08:1 (saf L farkı) —\r\n * `brand`in aksine (900 her zeminden zaten kopuyor) burada kenarlık BİLEREK\r\n * KORUNUYOR (`border-e-primary-200`) ki blok net ayrışsın.\r\n */\r\nexport const sidebarVariants = cva(\r\n /*\r\n * `overflow-hidden` BİLEREK yok — kenar toggle butonu bu kutunun dışına\r\n * taşarak (`-end-3`) sınırı \"kucaklıyor\" (Notion/Linear deseni), kırpma\r\n * kök elementte olsaydı kendi toggle'ını keserdi. İç içerik (tenant/nav/\r\n * kullanıcı sütunu) genişlik geçişi sırasında taşma göstermesin diye kendi\r\n * `overflow-hidden`'ını sidebar.html'de ayrı bir iç wrapper'da taşıyor.\r\n */\r\n 'group/sidebar relative flex h-full flex-col border-e border-e-hairline bg-chrome transition-[width] duration-base ease-out',\r\n {\r\n variants: {\r\n collapsed: {\r\n true: 'w-[72px]',\r\n false: 'w-64',\r\n },\r\n appearance: {\r\n chrome: '',\r\n /** Marka kenar çubuğu — kök zemini iki modda da primary-900 (#062c22, kullanıcının \"primer\"i), kenarlık gizlenir (zemin zaten belirgin bir blok). */\r\n brand: 'border-e-transparent bg-primary-900',\r\n /** Marka kenar çubuğu, AÇIK — kök zemini iki modda da primary-100, kenarlık KORUNUR (bkz. yukarıdaki doc). */\r\n 'brand-light': 'border-e-primary-200 bg-primary-100',\r\n },\r\n },\r\n defaultVariants: { collapsed: false, appearance: 'chrome' },\r\n },\r\n);\r\n\r\n/**\r\n * Nav satırı (leaf veya parent-toggle) — `rounded-sm`(6px, menü öğesi kademesi,\r\n * bkz. styles.css radius notu), panel değil kontrol. `border-s-2 border-s-\r\n * transparent` BASE'te HER ZAMAN rezerve — aktif olunca sadece rengi değişir,\r\n * yoksa 2px'lik ray aktifleşirken satırın geri kalanı kayardı (layout shift).\r\n *\r\n * Brand sınıfları (`group-data-[appearance=brand]/sidebar:…`) özgüllükte\r\n * (0,2,0) — düz `text-fg-muted`/`hover:bg-surface-alt` (0,1,0) ve `dark:`\r\n * (0,1,0) varyantlarının HER İKİSİNİ de cascade sırasından bağımsız yener,\r\n * bu yüzden ayrı bir `dark:` ikizi yazmaya gerek yok (brand görünümü iki\r\n * modda da AYNI).\r\n */\r\nexport const sidebarNavItemVariants = cva(\r\n 'group flex w-full appearance-none items-center gap-3 rounded-sm border-0 border-s-2 border-s-transparent bg-transparent px-3 py-2 text-start text-sm font-medium ' +\r\n 'text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt hover:text-fg ' +\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n 'group-data-[appearance=brand]/sidebar:text-primary-200 ' +\r\n 'group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:hover:text-primary-50 ' +\r\n 'group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-800 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:hover:text-primary-900 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700',\r\n {\r\n variants: {\r\n /*\r\n * \"Ray\" — bu tazelemenin imza motiflerinden biri (bkz. plan): dolu\r\n * yeşil sol çizgi + tonal işaret zemini, SADECE \"buradasın\" anlamında\r\n * kullanılıyor (sidebar aktif öğe, aktif sekme, seçili tablo satırı —\r\n * başka HİÇBİR yerde). Rol token'ı (`bg-primary-tint text-primary-tint-fg`,\r\n * badge/avatar ile aynı dil) — `color-mix()` her iki modu da TEK satırda\r\n * çözer, ayrı bir `dark:` ikizi YOK.\r\n */\r\n active: {\r\n true:\r\n 'border-s-accent-fill bg-primary-tint text-primary-tint-fg hover:bg-primary-tint hover:text-primary-tint-fg ' +\r\n 'group-data-[appearance=brand]/sidebar:border-s-primary-300 group-data-[appearance=brand]/sidebar:bg-primary-800 ' +\r\n 'group-data-[appearance=brand]/sidebar:text-white group-data-[appearance=brand]/sidebar:hover:bg-primary-800 ' +\r\n 'group-data-[appearance=brand]/sidebar:hover:text-white ' +\r\n 'group-data-[appearance=brand-light]/sidebar:border-s-primary-700 group-data-[appearance=brand-light]/sidebar:bg-primary-200 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-900 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:hover:text-primary-900',\r\n false: '',\r\n },\r\n collapsed: {\r\n true: 'justify-center px-0',\r\n false: '',\r\n },\r\n },\r\n compoundVariants: [\r\n // Daraltılmış (icon-only, 72px) haldeyken ray bastırılıyor — ikonu\r\n // merkeze göre 2px kaydırırdı, dar/simetrik bir rayda yeri yok. Tonal\r\n // zemin (bg-primary-tint, brand'de primary-800) tek başına yeterli\r\n // \"aktif\" sinyali veriyor.\r\n {\r\n active: true,\r\n collapsed: true,\r\n class:\r\n 'border-s-transparent group-data-[appearance=brand]/sidebar:border-s-transparent ' +\r\n 'group-data-[appearance=brand-light]/sidebar:border-s-transparent',\r\n },\r\n ],\r\n defaultVariants: { active: false, collapsed: false },\r\n },\r\n);\r\n\r\nexport type SidebarCollapsedVariant = VariantProps<typeof sidebarVariants>['collapsed'];\r\nexport type SidebarAppearance = NonNullable<VariantProps<typeof sidebarVariants>['appearance']>;\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, input, output, signal } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport { sidebarNavItemVariants } from './sidebar.variants';\r\nimport type { SidebarNavItem as SidebarNavItemModel } from './sidebar.model';\r\n\r\n/** Genişkenken akordeonda açılan çocuk satırı — brand görünümde metin/hover/odak marka tonlu (bkz. sidebar.variants.ts doc'u, aynı özgüllük mantığı). */\r\nconst CHILD_ROW_BASE =\r\n 'flex w-full appearance-none items-center gap-3 rounded-sm border-0 bg-transparent py-1.5 pe-3 ps-9 text-start text-label text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt hover:text-fg focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n 'group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 ' +\r\n 'group-data-[appearance=brand]/sidebar:hover:text-primary-50 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-700 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 ' +\r\n 'group-data-[appearance=brand-light]/sidebar:hover:text-primary-900 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700';\r\n\r\n/**\r\n * Tek nav satırı — yaprak veya çocuklu (parent). Sadece 1 seviye nesting\r\n * (çocuğun çocuğu render edilmiyor, YAGNI). Genişkenken parent'a tıklayınca\r\n * çocuklar CSS-only grid-rows akordeonuyla İÇERİDE açılır (her grup bağımsız,\r\n * root `Sidebar`'ın `expandedIds` set'i tarafından yönetilir). Daraltılmışken\r\n * aynı satıra TIKLAYINCA (hover değil — kullanıcı kararı) sağda bir `Popover`\r\n * flyout paneli çocukları listeler (bkz. plan Faz 1c).\r\n */\r\n@Component({\r\n selector: 'mf-sidebar-nav-item',\r\n imports: [Icon, OverlayModule, Popover, Tooltip],\r\n host: { class: 'contents' },\r\n templateUrl: './sidebar-nav-item.html',\r\n})\r\nexport class SidebarNavItemRow {\r\n readonly item = input.required<SidebarNavItemModel>();\r\n readonly collapsed = input(false);\r\n readonly activeItemId = input<string | null>(null);\r\n /** Genişkenken akordeon açık/kapalı durumu — root Sidebar tarafından kontrol edilir. */\r\n readonly expanded = input(false);\r\n\r\n readonly activate = output<SidebarNavItemModel>();\r\n readonly toggleExpand = output<string>();\r\n\r\n protected readonly hasChildren = computed(() => (this.item().children?.length ?? 0) > 0);\r\n protected readonly isActive = computed(() => {\r\n const id = this.activeItemId();\r\n return this.item().id === id || (this.item().children?.some((c) => c.id === id) ?? false);\r\n });\r\n\r\n protected readonly rowClasses = computed(() =>\r\n cn(sidebarNavItemVariants({ active: this.isActive(), collapsed: this.collapsed() })),\r\n );\r\n\r\n protected readonly flyoutOpen = signal(false);\r\n\r\n protected onRowClick(): void {\r\n if (this.hasChildren()) {\r\n if (this.collapsed()) {\r\n this.flyoutOpen.update((v) => !v);\r\n } else {\r\n this.toggleExpand.emit(this.item().id);\r\n }\r\n return;\r\n }\r\n this.activate.emit(this.item());\r\n }\r\n\r\n protected childRowClasses(child: SidebarNavItemModel): string {\r\n return cn(\r\n CHILD_ROW_BASE,\r\n child.id === this.activeItemId() &&\r\n 'text-accent group-data-[appearance=brand]/sidebar:text-white ' +\r\n 'group-data-[appearance=brand-light]/sidebar:text-primary-900',\r\n );\r\n }\r\n\r\n protected onChildClick(child: SidebarNavItemModel): void {\r\n this.activate.emit(child);\r\n this.closeFlyout();\r\n }\r\n\r\n protected closeFlyout(): void {\r\n this.flyoutOpen.set(false);\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"rowClasses()\"\r\n [attr.aria-expanded]=\"hasChildren() && !collapsed() ? expanded() : null\"\r\n [attr.aria-current]=\"isActive() && !hasChildren() ? 'page' : null\"\r\n [attr.aria-label]=\"collapsed() ? item().label : null\"\r\n [mfTooltip]=\"collapsed() ? item().label : ''\"\r\n tooltipPosition=\"right\"\r\n (click)=\"onRowClick()\"\r\n>\r\n <span mfIcon [size]=\"20\" [filled]=\"isActive()\">{{ item().icon }}</span>\r\n\r\n @if (!collapsed()) {\r\n <span class=\"min-w-0 flex-1 truncate\">{{ item().label }}</span>\r\n @if (item().badge !== undefined) {\r\n <span\r\n class=\"rounded-full bg-primary-tint px-1.5 py-0.5 font-mono text-eyebrow text-primary-tint-fg group-data-[appearance=brand]/sidebar:bg-primary-800 group-data-[appearance=brand]/sidebar:text-primary-100 group-data-[appearance=brand-light]/sidebar:bg-primary-200 group-data-[appearance=brand-light]/sidebar:text-primary-800\"\r\n >\r\n {{ item().badge }}\r\n </span>\r\n }\r\n @if (hasChildren()) {\r\n <span\r\n mfIcon\r\n [size]=\"16\"\r\n class=\"shrink-0 text-fg-subtle transition-transform duration-base group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700 rtl:-scale-x-100\"\r\n [class.rotate-90]=\"expanded()\"\r\n [class.rtl:-rotate-90]=\"expanded()\"\r\n >\r\n chevron_right\r\n </span>\r\n }\r\n }\r\n</button>\r\n\r\n@if (hasChildren() && !collapsed()) {\r\n <div\r\n class=\"grid overflow-hidden transition-[grid-template-rows] duration-base ease-out\"\r\n [style.grid-template-rows]=\"expanded() ? '1fr' : '0fr'\"\r\n [attr.inert]=\"expanded() ? null : true\"\r\n >\r\n <ul class=\"m-0 min-h-0 list-none overflow-hidden p-0\">\r\n @for (child of item().children; track child.id) {\r\n <li>\r\n <button type=\"button\" [class]=\"childRowClasses(child)\" (click)=\"onChildClick(child)\">\r\n <span mfIcon [size]=\"16\">{{ child.icon }}</span>\r\n <span class=\"truncate\">{{ child.label }}</span>\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n}\r\n\r\n@if (hasChildren() && collapsed()) {\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"flyoutOpen()\"\r\n placement=\"right-start\"\r\n padding=\"sm\"\r\n panelClass=\"min-w-48\"\r\n (closed)=\"closeFlyout()\"\r\n >\r\n <div role=\"menu\" [attr.aria-label]=\"item().label\">\r\n <p class=\"truncate px-2.5 py-1.5 text-eyebrow text-fg-subtle\">{{ item().label }}</p>\r\n @for (child of item().children; track child.id) {\r\n <button\r\n type=\"button\"\r\n role=\"menuitem\"\r\n class=\"flex w-full appearance-none items-center gap-2.5 rounded-sm border-0 bg-transparent px-2.5 py-1.5 text-start text-sm font-medium text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n (click)=\"onChildClick(child)\"\r\n >\r\n <span mfIcon [size]=\"16\">{{ child.icon }}</span>\r\n <span class=\"truncate\">{{ child.label }}</span>\r\n </button>\r\n }\r\n </div>\r\n </mf-popover>\r\n}\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, inject, input, output, signal } from '@angular/core';\r\nimport { Avatar } from '@mesgflow/ui-kit/avatar';\r\nimport { cn, MF_SIDEBAR_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport type { SidebarTenant } from './sidebar.model';\r\n\r\n/**\r\n * Sidebar'ın üst bloğu — panel iskeleti `Popover`'a devredildi (bkz. plan\r\n * Faz 1c). Panel genişliği daraltılmışken trigger genişliğine değil SABİT\r\n * 240px'e bağlı (`matchTriggerWidth` kapalı, `panelClass` ile `min-w-60`\r\n * veriliyor) — daralmışken trigger sadece 72px, tenant adları sığmaz.\r\n */\r\n@Component({\r\n selector: 'mf-sidebar-tenant-switcher',\r\n imports: [Avatar, Icon, OverlayModule, Popover, Tooltip],\r\n host: { class: 'contents' },\r\n templateUrl: './sidebar-tenant-switcher.html',\r\n})\r\nexport class SidebarTenantSwitcher {\r\n readonly tenants = input<SidebarTenant[]>([]);\r\n readonly activeTenantId = input<string | null>(null);\r\n readonly collapsed = input(false);\r\n readonly label = input<string>();\r\n readonly noTenantsLabel = input<string>();\r\n\r\n readonly tenantChange = output<SidebarTenant>();\r\n\r\n private readonly sidebarLabels = inject(MF_SIDEBAR_LABELS);\r\n protected readonly effectiveLabel = computed(\r\n () => this.label() ?? this.sidebarLabels().switchTenant,\r\n );\r\n protected readonly effectiveNoTenantsLabel = computed(\r\n () => this.noTenantsLabel() ?? this.sidebarLabels().noTenants,\r\n );\r\n\r\n protected readonly cn = cn;\r\n protected readonly open = signal(false);\r\n protected readonly highlighted = signal(0);\r\n\r\n // `.at(0)` BİLEREK `[0]` yerine — `noUncheckedIndexedAccess` kapalıyken TS `arr[0]`'ı\r\n // her zaman tanımlı sayar (boş dizide çalışma zamanında `undefined` olsa bile), bu da\r\n // `?? null`'ı statik olarak \"asla tetiklenmez\" gösterip strictTemplates'in şablondaki\r\n // savunmacı `?.`/`??`'yi hatalı biçimde gereksiz işaretlemesine yol açıyordu. `.at()`\r\n // dizinden bağımsız her zaman `T | undefined` döner, tür çıkarımı gerçek davranışla eşleşir.\r\n protected readonly activeTenant = computed(\r\n () =>\r\n this.tenants().find((t) => t.id === this.activeTenantId()) ?? this.tenants().at(0) ?? null,\r\n );\r\n\r\n protected toggle(): void {\r\n if (this.tenants().length === 0) return;\r\n if (!this.open())\r\n this.highlighted.set(\r\n Math.max(\r\n 0,\r\n this.tenants().findIndex((t) => t.id === this.activeTenantId()),\r\n ),\r\n );\r\n this.open.update((v) => !v);\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n }\r\n\r\n protected select(tenant: SidebarTenant): void {\r\n this.tenantChange.emit(tenant);\r\n this.close();\r\n }\r\n\r\n protected optionClasses(tenant: SidebarTenant, index: number): string {\r\n const isSelected = tenant.id === this.activeTenantId();\r\n return cn(\r\n 'flex cursor-pointer items-center gap-2.5 rounded-sm px-2 py-1.5 transition-colors duration-fast ease-emphasis',\r\n index === this.highlighted() && !isSelected && 'bg-surface-alt',\r\n isSelected && 'bg-primary-tint text-primary-tint-fg',\r\n );\r\n }\r\n\r\n protected onTriggerKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n if (!this.open()) this.toggle();\r\n }\r\n }\r\n\r\n protected onPanelKeydown(event: KeyboardEvent): void {\r\n const tenants = this.tenants();\r\n if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.close();\r\n return;\r\n }\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n this.highlighted.update((i) => Math.min(tenants.length - 1, i + 1));\r\n return;\r\n }\r\n if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n this.highlighted.update((i) => Math.max(0, i - 1));\r\n return;\r\n }\r\n if (event.key === 'Enter' || event.key === ' ') {\r\n event.preventDefault();\r\n const tenant = tenants[this.highlighted()];\r\n if (tenant) this.select(tenant);\r\n }\r\n }\r\n}\r\n","<button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-x-0 border-t-0 border-b border-border bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-surface-alt focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:border-primary-200 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? (activeTenant()?.name ?? effectiveLabel()) : null\"\r\n [mfTooltip]=\"collapsed() ? (activeTenant()?.name ?? effectiveLabel()) : ''\"\r\n tooltipPosition=\"right\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"listbox\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n <mf-avatar [name]=\"activeTenant()?.name ?? '?'\" shape=\"square\" size=\"md\" [colorful]=\"true\" />\r\n @if (!collapsed()) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span\r\n class=\"truncate font-display text-sm font-semibold text-fg group-data-[appearance=brand]/sidebar:text-primary-50 group-data-[appearance=brand-light]/sidebar:text-primary-900\"\r\n >\r\n {{ activeTenant()?.name ?? effectiveNoTenantsLabel() }}\r\n </span>\r\n <span\r\n class=\"truncate text-xs text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >{{ effectiveLabel() }}</span\r\n >\r\n </span>\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"shrink-0 text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >unfold_more</span\r\n >\r\n }\r\n</button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [matchTriggerWidth]=\"!collapsed()\"\r\n [panelClass]=\"cn('max-h-72', collapsed() ? 'min-w-60' : '')\"\r\n (closed)=\"close()\"\r\n>\r\n <ul\r\n role=\"listbox\"\r\n tabindex=\"0\"\r\n [attr.aria-label]=\"effectiveLabel()\"\r\n class=\"w-full text-sm\"\r\n (keydown)=\"onPanelKeydown($event)\"\r\n >\r\n @for (tenant of tenants(); track tenant.id; let i = $index) {\r\n <!-- role=\"option\" BİLEREK odaklanabilir değil — klavye gezinmesi yukarıdaki listbox (keydown)'da merkezi. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events, @angular-eslint/template/interactive-supports-focus -->\r\n <li\r\n role=\"option\"\r\n [attr.aria-selected]=\"tenant.id === activeTenantId()\"\r\n [class]=\"optionClasses(tenant, i)\"\r\n (mouseenter)=\"highlighted.set(i)\"\r\n (click)=\"select(tenant)\"\r\n >\r\n <mf-avatar [name]=\"tenant.name\" shape=\"square\" size=\"sm\" [colorful]=\"true\" />\r\n <span class=\"min-w-0 flex-1 truncate text-fg-muted\">{{ tenant.name }}</span>\r\n @if (tenant.id === activeTenantId()) {\r\n <span mfIcon [size]=\"16\">check</span>\r\n }\r\n </li>\r\n } @empty {\r\n <li class=\"px-2.5 py-1.5 text-fg-subtle\">{{ effectiveNoTenantsLabel() }}</li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n","import { Component, computed, inject, input, output } from '@angular/core';\r\nimport { Avatar } from '@mesgflow/ui-kit/avatar';\r\nimport { MF_SIDEBAR_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport type { SidebarUser } from './sidebar.model';\r\n\r\n/**\r\n * Sidebar'ın alt bloğu — menü AÇMIYOR, tek bir satır: tıklanınca `profileClick`\r\n * emit ediyor, gerçek \"profile git\" navigasyonu tüketicinin sorumluluğu\r\n * (ör. `(profileClick)=\"router.navigate(['/profile'])\"`).\r\n */\r\n@Component({\r\n selector: 'mf-sidebar-user-menu',\r\n imports: [Avatar, Icon, Tooltip],\r\n host: { class: 'contents' },\r\n templateUrl: './sidebar-user-menu.html',\r\n})\r\nexport class SidebarUserMenu {\r\n readonly user = input<SidebarUser | null>(null);\r\n readonly collapsed = input(false);\r\n readonly noUserLabel = input<string>();\r\n\r\n readonly profileClick = output<void>();\r\n\r\n private readonly sidebarLabels = inject(MF_SIDEBAR_LABELS);\r\n protected readonly effectiveNoUserLabel = computed(\r\n () => this.noUserLabel() ?? this.sidebarLabels().noUser,\r\n );\r\n}\r\n","@if (user(); as current) {\r\n <button\r\n type=\"button\"\r\n class=\"flex h-16 w-full shrink-0 appearance-none items-center gap-2.5 border-0 bg-transparent px-3 text-start transition-colors duration-fast ease-emphasis hover:bg-surface-alt focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [class.justify-center]=\"collapsed()\"\r\n [attr.aria-label]=\"collapsed() ? current.name : null\"\r\n [mfTooltip]=\"collapsed() ? current.name : ''\"\r\n tooltipPosition=\"right\"\r\n (click)=\"profileClick.emit()\"\r\n >\r\n <mf-avatar [name]=\"current.name\" tone=\"info\" size=\"md\" />\r\n @if (!collapsed()) {\r\n <span class=\"flex min-w-0 flex-1 flex-col\">\r\n <span\r\n class=\"truncate text-sm font-semibold text-fg group-data-[appearance=brand]/sidebar:text-primary-50 group-data-[appearance=brand-light]/sidebar:text-primary-900\"\r\n >{{ current.name }}</span\r\n >\r\n <span\r\n class=\"truncate text-xs text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >{{ current.role ?? current.email }}</span\r\n >\r\n </span>\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"shrink-0 text-fg-subtle group-data-[appearance=brand]/sidebar:text-primary-300 group-data-[appearance=brand-light]/sidebar:text-primary-700\"\r\n >settings</span\r\n >\r\n }\r\n </button>\r\n} @else {\r\n <div\r\n class=\"flex h-16 shrink-0 items-center gap-2.5 px-3 text-fg-subtle\"\r\n [class.justify-center]=\"collapsed()\"\r\n >\r\n <span mfIcon [size]=\"20\">person_off</span>\r\n @if (!collapsed()) {\r\n <span class=\"truncate text-sm\">{{ effectiveNoUserLabel() }}</span>\r\n }\r\n </div>\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n model,\r\n input,\r\n output,\r\n untracked,\r\n} from '@angular/core';\r\nimport { cn, MF_SIDEBAR_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport { sidebarVariants, type SidebarAppearance } from './sidebar.variants';\r\nimport { SidebarNavItemRow } from './sidebar-nav-item';\r\nimport { SidebarTenantSwitcher } from './sidebar-tenant-switcher';\r\nimport { SidebarUserMenu } from './sidebar-user-menu';\r\nimport type {\r\n SidebarNavItem as SidebarNavItemModel,\r\n SidebarTenant,\r\n SidebarUser,\r\n} from './sidebar.model';\r\n\r\n/**\r\n * `<mf-sidebar [navItems]=\"items\" [tenants]=\"tenants\" [user]=\"user\" [(collapsed)]=\"collapsed\" />`\r\n *\r\n * Tamamen generic/yeniden kullanılabilir bir premium sidebar — Table'daki gibi,\r\n * gerçek veriye değil `input()`lara bağlı (bkz. layout/shell/shell.ts'in bunu\r\n * gerçek veriyle beslemesi). Üç bölge: tenant switcher (üst), navigasyon\r\n * (orta, açılır gruplu), kullanıcı satırı (alt, tıklanınca `profileClick`\r\n * emit eder — menü AÇMAZ) — hepsi tek bir dikey panelde.\r\n */\r\n@Component({\r\n selector: 'mf-sidebar',\r\n exportAs: 'mfSidebar',\r\n host: { class: 'flex h-full' },\r\n imports: [Icon, Tooltip, SidebarTenantSwitcher, SidebarNavItemRow, SidebarUserMenu],\r\n templateUrl: './sidebar.html',\r\n})\r\nexport class Sidebar {\r\n readonly tenants = input<SidebarTenant[]>([]);\r\n readonly activeTenantId = model<string | null>(null);\r\n readonly navItems = input.required<SidebarNavItemModel[]>();\r\n readonly activeItemId = model<string | null>(null);\r\n readonly user = input<SidebarUser | null>(null);\r\n /**\r\n * `false` -- kullanıcı satırı VE üstündeki ayraç HİÇ render edilmez.\r\n * Varsayılan `true` (mevcut davranış korunur): `user()` `null` olsa bile\r\n * `SidebarUserMenu` kendi \"oturum açılmadı\" boş-durumunu gösterir (bilinçli,\r\n * bkz. `sidebar-user-menu.ts`) — bu, kullanıcı kavramı OLMAYAN tüketiciler\r\n * (ör. salt-dokümantasyon/showcase kabukları) için YANLIŞ bir sinyal\r\n * olabiliyordu (gerçek bulgu). `false` geçmek o tüketicilerin kaçış yolu.\r\n */\r\n readonly showUserMenu = input(true);\r\n readonly collapsed = model(false);\r\n /**\r\n * Sidebar'ın kendi kenarındaki yuvarlak daralt/genişlet butonu. Varsayılan\r\n * `true` — tetikleyiciyi kendi navbar'ına taşıyan tüketiciler `false` geçer,\r\n * aksi halde masaüstünde İKİ ayrı daraltma kontrolü olurdu.\r\n */\r\n readonly showCollapseToggle = input(true);\r\n /**\r\n * `'chrome'` (varsayılan, mevcut nötr görünüm) | `'brand'` (kök zemini\r\n * `primary-900`, nav metni/aktif ray marka tonlu — iki modda AYNI, bkz.\r\n * `sidebar.variants.ts` doc'u) | `'brand-light'` (AYNI marka kimliği,\r\n * kök zemini `primary-100` — koyu yerine açık bir marka bloğu, yine iki\r\n * modda AYNI). CDK overlay'e taşınan flyout/tenant listesi bu grubun\r\n * TORUNU olmadığından her zaman katı `chrome` kalır.\r\n */\r\n readonly appearance = input<SidebarAppearance>('chrome');\r\n\r\n /** Verilmezse `MF_SIDEBAR_LABELS`'a düşer — `SidebarTenantSwitcher`/`SidebarUserMenu`'nün KENDİ etiketleri artık AYRICA buradan prop-drilling YAPILMIYOR, ikisi de `MF_SIDEBAR_LABELS`'ı doğrudan inject ediyor. */\r\n readonly collapseLabel = input<string>();\r\n readonly expandLabel = input<string>();\r\n readonly navAriaLabel = input<string>();\r\n\r\n readonly tenantChange = output<SidebarTenant>();\r\n readonly itemClick = output<SidebarNavItemModel>();\r\n /** Kullanıcı satırına tıklanınca — profile navigasyonu tüketicinin sorumluluğu. */\r\n readonly profileClick = output<void>();\r\n\r\n private readonly sidebarLabels = inject(MF_SIDEBAR_LABELS);\r\n protected readonly effectiveCollapseLabel = computed(\r\n () => this.collapseLabel() ?? this.sidebarLabels().collapse,\r\n );\r\n protected readonly effectiveExpandLabel = computed(\r\n () => this.expandLabel() ?? this.sidebarLabels().expand,\r\n );\r\n protected readonly effectiveNavAriaLabel = computed(\r\n () => this.navAriaLabel() ?? this.sidebarLabels().nav,\r\n );\r\n\r\n protected readonly rootClasses = computed(() =>\r\n cn(sidebarVariants({ collapsed: this.collapsed(), appearance: this.appearance() })),\r\n );\r\n\r\n /** Genişkenken hangi gruplar açık — her grup BAĞIMSIZ açılır/kapanır (akordeon değil, kullanıcı kararı). `model()` — tüketici okuyabilir/yazabilir (ör. \"hepsini aç\" bir buton). */\r\n readonly expandedIds = model<ReadonlySet<string>>(new Set());\r\n /**\r\n * `activeItemId()` bir alt öğeye (children içinde) eşleşince o öğenin\r\n * EBEVEYN grubunu otomatik açar — YALNIZCA aktif öğe DEĞİŞİNCE (kullanıcının\r\n * sonradan elle kapatması korunur, tekrar zorla açılmaz). Öncesinde derin\r\n * bir bağlantıya (ör. `/components/button`) DOĞRUDAN gidildiğinde tüm\r\n * gruplar kapalı geliyor, aktif öğe görünmüyordu (gerçek bulgu).\r\n */\r\n readonly autoExpandActive = input(true);\r\n\r\n protected isExpanded(id: string): boolean {\r\n return this.expandedIds().has(id);\r\n }\r\n\r\n protected onToggleExpand(id: string): void {\r\n this.expandedIds.update((current) => {\r\n const next = new Set(current);\r\n if (next.has(id)) next.delete(id);\r\n else next.add(id);\r\n return next;\r\n });\r\n }\r\n\r\n constructor() {\r\n // `expandedIds()` BİLEREK `untracked()` içinde okunuyor — aksi halde bu\r\n // effect KENDİ yazdığı sinyale de bağımlı olurdu ve kullanıcı grubu elle\r\n // kapattığında (`expandedIds` değişince, `activeItemId` AYNI kalsa bile)\r\n // yeniden tetiklenip anında geri açardı (gerçek bulgu, ilk denemede\r\n // yakalandı). Bu effect SADECE `autoExpandActive`/`activeItemId`/\r\n // `navItems` değişince çalışmalı.\r\n effect(() => {\r\n if (!this.autoExpandActive()) return;\r\n const activeId = this.activeItemId();\r\n if (!activeId) return;\r\n const parent = this.navItems().find((item) =>\r\n item.children?.some((child) => child.id === activeId),\r\n );\r\n if (!parent) return;\r\n untracked(() => {\r\n if (this.expandedIds().has(parent.id)) return;\r\n this.expandedIds.update((current) => new Set(current).add(parent.id));\r\n });\r\n });\r\n }\r\n\r\n protected onItemActivate(item: SidebarNavItemModel): void {\r\n this.activeItemId.set(item.id);\r\n this.itemClick.emit(item);\r\n }\r\n\r\n protected onTenantSelect(tenant: SidebarTenant): void {\r\n this.activeTenantId.set(tenant.id);\r\n this.tenantChange.emit(tenant);\r\n }\r\n\r\n protected toggleCollapse(): void {\r\n this.collapsed.update((v) => !v);\r\n }\r\n}\r\n","<aside [class]=\"rootClasses()\" [attr.data-appearance]=\"appearance()\">\r\n <div class=\"flex h-full min-h-0 w-full flex-col overflow-hidden\">\r\n @if (tenants().length > 0) {\r\n <mf-sidebar-tenant-switcher\r\n [tenants]=\"tenants()\"\r\n [activeTenantId]=\"activeTenantId()\"\r\n [collapsed]=\"collapsed()\"\r\n (tenantChange)=\"onTenantSelect($event)\"\r\n />\r\n } @else {\r\n <!--\r\n Tenant kavramı olmayan tüketiciler `tenants` input'unu hiç geçmez — bu\r\n durumda tenant switcher'ın \"Kiracı bulunamadı\" boş-durumunu göstermek\r\n yerine (kafa karıştırıcı, gerçek bir hata gibi okunur) çağıranın kendi\r\n marka başlığını buraya projekte etmesi bekleniyor (ör. `<mf-brand />`).\r\n -->\r\n <div\r\n class=\"flex h-16 shrink-0 items-center gap-2 border-b border-border px-4 group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand-light]/sidebar:border-primary-200\"\r\n [class.justify-center]=\"collapsed()\"\r\n >\r\n <ng-content select=\"[brand]\" />\r\n </div>\r\n }\r\n\r\n <nav\r\n class=\"flex-1 overflow-x-hidden overflow-y-auto px-2 py-3\"\r\n [attr.aria-label]=\"effectiveNavAriaLabel()\"\r\n >\r\n <ul class=\"m-0 flex list-none flex-col gap-1 p-0\">\r\n @for (item of navItems(); track item.id) {\r\n <li>\r\n <mf-sidebar-nav-item\r\n [item]=\"item\"\r\n [collapsed]=\"collapsed()\"\r\n [activeItemId]=\"activeItemId()\"\r\n [expanded]=\"isExpanded(item.id)\"\r\n (activate)=\"onItemActivate($event)\"\r\n (toggleExpand)=\"onToggleExpand($event)\"\r\n />\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n\r\n @if (showUserMenu()) {\r\n <div\r\n class=\"border-t border-border group-data-[appearance=brand]/sidebar:border-primary-800 group-data-[appearance=brand-light]/sidebar:border-primary-200\"\r\n ></div>\r\n\r\n <mf-sidebar-user-menu\r\n [user]=\"user()\"\r\n [collapsed]=\"collapsed()\"\r\n (profileClick)=\"profileClick.emit()\"\r\n />\r\n }\r\n </div>\r\n\r\n @if (showCollapseToggle()) {\r\n <button\r\n type=\"button\"\r\n class=\"absolute top-14 -end-3 z-10 flex h-6 w-6 appearance-none items-center justify-center rounded-full border border-hairline bg-chrome p-0 text-fg-subtle shadow-1 transition-colors duration-fast ease-emphasis hover:bg-surface-alt hover:text-fg active:scale-[0.99] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring group-data-[appearance=brand]/sidebar:bg-primary-900 group-data-[appearance=brand]/sidebar:text-primary-200 group-data-[appearance=brand]/sidebar:hover:bg-primary-800 group-data-[appearance=brand]/sidebar:hover:text-primary-50 group-data-[appearance=brand]/sidebar:focus-visible:outline-primary-300 group-data-[appearance=brand-light]/sidebar:bg-primary-100 group-data-[appearance=brand-light]/sidebar:text-primary-800 group-data-[appearance=brand-light]/sidebar:hover:bg-primary-200 group-data-[appearance=brand-light]/sidebar:hover:text-primary-900 group-data-[appearance=brand-light]/sidebar:focus-visible:outline-primary-700\"\r\n [mfTooltip]=\"collapsed() ? effectiveExpandLabel() : effectiveCollapseLabel()\"\r\n tooltipPosition=\"right\"\r\n [attr.aria-label]=\"collapsed() ? effectiveExpandLabel() : effectiveCollapseLabel()\"\r\n (click)=\"toggleCollapse()\"\r\n >\r\n <span mfIcon [size]=\"14\" class=\"rtl:-scale-x-100\">{{\r\n collapsed() ? 'chevron_right' : 'chevron_left'\r\n }}</span>\r\n </button>\r\n }\r\n</aside>\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\n\r\nexport type SkeletonVariant = 'text' | 'circle' | 'rect';\r\n\r\n/**\r\n * `animate-pulse` (opaklık titreşimi) yerine soldan sağa kayan bir parıltı\r\n * (bkz. `tokens/motion.css` `animate-shimmer`, plan Faz 1c) — taban rengin\r\n * üstüne `background-size:200%` bir gradient bindirilip pozisyonu animasyonla\r\n * kaydırılıyor. `border-strong` bant rengi HER İKİ modda da taban `surface-\r\n * active`'ten AYIRT EDİLEBİLİR bir basamak.\r\n */\r\nconst SHIMMER =\r\n 'bg-surface-active bg-[linear-gradient(90deg,transparent,var(--color-border-strong),transparent)] bg-[length:200%_100%] animate-shimmer';\r\n\r\n/**\r\n * `<div mfSkeleton class=\"h-4 w-32\"></div>` (varsayılan `variant=\"rect\"` —\r\n * boyutu tüketici `class` ile verir, ESKİ davranış BİREBİR korunur) veya\r\n * `<div mfSkeleton variant=\"circle\" class=\"h-10 w-10\"></div>` (`rounded-full`\r\n * eklenir) veya `<div mfSkeleton variant=\"text\" [lines]=\"3\"></div>`\r\n * (`lines > 1` iken alt alta `lines` kadar satır render eder — SON satır\r\n * bilerek `w-3/4`, bir paragrafın düzensiz son satırını taklit eder).\r\n *\r\n * `lines > 1` YALNIZCA `variant=\"text\"`'te anlamlı — bu durumda host\r\n * kendisi bir shimmer kutusu OLMAKTAN çıkıp satırları dikey dizen bir\r\n * `flex flex-col` kabına dönüşür (directive'ten component'e yükseltilmesinin\r\n * TEK sebebi — bkz. `Button`'ın aynı yükseltme deseni, `button.ts`).\r\n */\r\n@Component({\r\n // eslint-disable-next-line @angular-eslint/component-selector -- BİLEREK native eleman + attribute (bkz. Button'daki AYNI desen)\r\n selector: '[mfSkeleton]',\r\n host: { '[class]': 'hostClasses()' },\r\n template: `\r\n @if (multiline()) {\r\n @for (line of lineIndexes(); track line; let last = $last) {\r\n <span [class]=\"lineClasses(last)\"></span>\r\n }\r\n }\r\n `,\r\n})\r\nexport class Skeleton {\r\n readonly variant = input<SkeletonVariant>('rect');\r\n readonly lines = input(1);\r\n\r\n protected readonly multiline = computed(() => this.variant() === 'text' && this.lines() > 1);\r\n protected readonly lineIndexes = computed(() =>\r\n Array.from({ length: this.lines() }, (_, i) => i),\r\n );\r\n\r\n protected readonly hostClasses = computed(() => {\r\n if (this.multiline()) return 'flex flex-col gap-2';\r\n return cn('block', SHIMMER, this.variant() === 'circle' ? 'rounded-full' : 'rounded-xs');\r\n });\r\n\r\n protected lineClasses(last: boolean): string {\r\n return cn('block h-4 rounded-xs', SHIMMER, last ? 'w-3/4' : 'w-full');\r\n }\r\n}\r\n","import { cva } from 'class-variance-authority';\r\n\r\nexport const sliderHostVariants = cva(\r\n 'relative block h-4 w-full cursor-pointer touch-none rounded-full select-none ' +\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-focus-ring',\r\n {\r\n variants: {\r\n disabled: {\r\n true: 'pointer-events-none opacity-50',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { disabled: false },\r\n },\r\n);\r\n","import { Component, ElementRef, computed, forwardRef, inject, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { ValueAccessorBase, cn, inlineStartRatio, isRtl } from '@mesgflow/ui-kit/core';\r\nimport { sliderHostVariants } from './slider.variants';\r\n\r\n/**\r\n * `<mf-slider [(value)]=\"opacity\" [min]=\"0\" [max]=\"100\" [step]=\"5\" />` —\r\n * `@angular/aria`'da hazır bir slider pattern'i YOK (sadece accordion/\r\n * combobox/grid/listbox/menu/tabs/toolbar/tree var), bu yüzden ARIA\r\n * `role=\"slider\"` ve klavye (ok tuşları/Home/End/PageUp/PageDown) + pointer\r\n * sürükleme ELLE kuruldu — kodda hand-rolled ARIA'nın ikinci örneği\r\n * (ilki `Calendar`, bkz. README \"Takvim ızgarası bilerek grid KULLANMADI\").\r\n */\r\n@Component({\r\n selector: 'mf-slider',\r\n exportAs: 'mfSlider',\r\n host: {\r\n role: 'slider',\r\n tabindex: '0',\r\n '[attr.aria-valuemin]': 'min()',\r\n '[attr.aria-valuemax]': 'max()',\r\n '[attr.aria-valuenow]': 'value()',\r\n '[attr.aria-disabled]': 'disabled() || null',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[class]': 'hostClasses()',\r\n '(keydown)': 'onKeydown($event)',\r\n '(pointerdown)': 'onPointerDown($event)',\r\n '(pointermove)': 'onPointerMove($event)',\r\n '(pointerup)': 'onPointerUp($event)',\r\n },\r\n template: `\r\n <div\r\n class=\"pointer-events-none absolute inset-x-0 top-1/2 h-1.5 -translate-y-1/2 rounded-full bg-surface-alt\"\r\n >\r\n <div\r\n class=\"absolute inset-y-0 start-0 rounded-full bg-accent-fill\"\r\n [style.width.%]=\"percent()\"\r\n ></div>\r\n </div>\r\n <div\r\n class=\"pointer-events-none absolute top-1/2 h-4 w-4 -translate-y-1/2 rounded-full border-2 border-accent bg-surface shadow-1\"\r\n [style.inset-inline-start.%]=\"percent()\"\r\n style=\"margin-inline-start: -8px\"\r\n ></div>\r\n `,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Slider), multi: true }],\r\n})\r\nexport class Slider extends ValueAccessorBase<number> implements ControlValueAccessor {\r\n readonly value = model(0);\r\n readonly min = input(0);\r\n readonly max = input(100);\r\n readonly step = input(1);\r\n readonly disabled = input(false);\r\n readonly ariaLabel = input('');\r\n\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n protected readonly percent = computed(() => {\r\n const range = this.max() - this.min();\r\n if (range <= 0) return 0;\r\n return ((this.value() - this.min()) / range) * 100;\r\n });\r\n\r\n protected readonly hostClasses = computed(() =>\r\n cn(sliderHostVariants({ disabled: this.disabled() })),\r\n );\r\n\r\n writeValue(value: number): void {\r\n this.value.set(value);\r\n }\r\n\r\n private clamp(raw: number): number {\r\n const stepped = Math.round((raw - this.min()) / this.step()) * this.step() + this.min();\r\n return Math.min(this.max(), Math.max(this.min(), stepped));\r\n }\r\n\r\n private setValue(next: number): void {\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (this.disabled()) return;\r\n const s = this.step();\r\n // Yatay oklar GÖRSEL yöne göre: RTL'de dolgu sağdan başladığı için → azaltır.\r\n const key = isRtl(this.elementRef.nativeElement)\r\n ? (({ ArrowRight: 'ArrowLeft', ArrowLeft: 'ArrowRight' } as Record<string, string>)[\r\n event.key\r\n ] ?? event.key)\r\n : event.key;\r\n switch (key) {\r\n case 'ArrowRight':\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this.setValue(this.clamp(this.value() + s));\r\n break;\r\n case 'ArrowLeft':\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this.setValue(this.clamp(this.value() - s));\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.setValue(this.min());\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.setValue(this.max());\r\n break;\r\n case 'PageUp':\r\n event.preventDefault();\r\n this.setValue(this.clamp(this.value() + s * 10));\r\n break;\r\n case 'PageDown':\r\n event.preventDefault();\r\n this.setValue(this.clamp(this.value() - s * 10));\r\n break;\r\n }\r\n }\r\n\r\n protected onPointerDown(event: PointerEvent): void {\r\n if (this.disabled()) return;\r\n this.elementRef.nativeElement.setPointerCapture(event.pointerId);\r\n this.elementRef.nativeElement.focus();\r\n this.updateFromPointer(event);\r\n }\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n if (this.disabled() || event.buttons !== 1) return;\r\n this.updateFromPointer(event);\r\n }\r\n\r\n protected onPointerUp(event: PointerEvent): void {\r\n this.elementRef.nativeElement.releasePointerCapture(event.pointerId);\r\n }\r\n\r\n private updateFromPointer(event: PointerEvent): void {\r\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const ratio = inlineStartRatio(event.clientX, rect, isRtl(this.elementRef.nativeElement));\r\n const raw = this.min() + ratio * (this.max() - this.min());\r\n this.setValue(this.clamp(raw));\r\n }\r\n}\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { cn, MF_COMMON_LABELS, type MfSize, type MfTone } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\n\r\nexport type SpinnerSize = 'xs' | MfSize;\r\nexport type SpinnerTone = MfTone | 'current';\r\n\r\nconst SIZE_PX: Record<SpinnerSize, number> = { xs: 14, sm: 16, md: 20, lg: 24 };\r\n\r\nconst TONE_CLASS: Record<SpinnerTone, string> = {\r\n /** Ambient metin rengini MİRAS ALIR — ör. dolu bir butonun içine gömülü spinner, butonun kendi `text-fg-on-accent`'ini otomatik kullanır. Varsayılan. */\r\n current: 'text-current',\r\n neutral: 'text-fg-subtle',\r\n primary: 'text-accent',\r\n success: 'text-success',\r\n warning: 'text-warning',\r\n danger: 'text-danger',\r\n info: 'text-info',\r\n help: 'text-help',\r\n};\r\n\r\n/**\r\n * `<mf-spinner size=\"sm\" />` — dönen yüklenme göstergesi. Ayrı bir SVG/CSS\r\n * animasyonu ÇİZMEK yerine kitin zaten her yerde kullandığı `progress_activity`\r\n * Material Symbol'ü + `animate-spin` deseni tekrar kullanılıyor (bkz.\r\n * `ConfirmDialog`'un onay butonu) — tüm \"yükleniyor\" göstergeleri tek bir\r\n * görsel dil konuşuyor.\r\n *\r\n * `role=\"status\"` + `aria-label` HOST'ta (ikonun kendisi `Icon` directive'i\r\n * gereği her zaman `aria-hidden` — bkz. icon.ts) — ekran okuyucu ligature\r\n * kaynak metnini (\"progress_activity\") DEĞİL, buradaki anlamlı etiketi anons eder.\r\n */\r\n@Component({\r\n selector: 'mf-spinner',\r\n exportAs: 'mfSpinner',\r\n imports: [Icon],\r\n host: {\r\n class: 'inline-flex',\r\n role: 'status',\r\n '[attr.aria-label]': 'effectiveAriaLabel()',\r\n },\r\n template: `<span mfIcon [size]=\"sizePx()\" [class]=\"iconClasses()\">progress_activity</span>`,\r\n})\r\nexport class Spinner {\r\n readonly size = input<SpinnerSize>('md');\r\n readonly tone = input<SpinnerTone>('current');\r\n /** Verilmezse `MF_COMMON_LABELS`'ın `loading`'i kullanılır (bkz. `provideMesgflowUi`). */\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly commonLabels = inject(MF_COMMON_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.commonLabels().loading,\r\n );\r\n\r\n protected readonly sizePx = computed(() => SIZE_PX[this.size()]);\r\n protected readonly iconClasses = computed(() => cn('animate-spin', TONE_CLASS[this.tone()]));\r\n}\r\n","import { Component, ElementRef, computed, inject, input, linkedSignal } from '@angular/core';\r\nimport { cn, inlineStartRatio, isRtl } from '@mesgflow/ui-kit/core';\r\n\r\n/**\r\n * `<mf-splitter><div splitterPane1>Sol</div><div splitterPane2>Sağ</div></mf-splitter>`\r\n *\r\n * Tuvalin iki yanındaki yeniden boyutlanabilir paneller için — `@angular/aria`'da\r\n * hazır bir splitter pattern'i YOK, `role=\"separator\"` + klavye (ok tuşları/\r\n * Home/End) + pointer sürükleme ELLE kuruldu (Slider'daki AYNI hand-rolled\r\n * ARIA yaklaşımı). Yüzde tabanlı bölünme (`flex-basis: %`) — piksel değil,\r\n * konteyner yeniden boyutlandığında oran korunur.\r\n *\r\n * `currentSplit` BİLEREK `linkedSignal(() => this.initialSplit())` — düz bir\r\n * `signal(50)` + constructor'da `.set(this.initialSplit())` YERİNE (BULUNAN\r\n * GERÇEK HATA: constructor çalıştığı anda `input()` sinyali HENÜZ bağlanan\r\n * değere sahip DEĞİL, `initialSplit()` varsayılana — 50 — düşüyor ve\r\n * `currentSplit` bir daha ASLA güncellenmiyordu; `[split]=\"20\"` gibi\r\n * varsayılan-DIŞI bir değer SESSİZCE yok sayılıyordu, gerçek tarayıcıda\r\n * `aria-valuenow` okununca ortaya çıktı). `linkedSignal` hem `initialSplit()`\r\n * değiştiğinde YENİDEN hesaplanıyor HEM DE sürükleme/klavye ile YEREL\r\n * `.set()`'e izin veriyor (CLAUDE.md: \"birden çok reaktif kaynaktan türeyen\r\n * VE senkron kalması gereken durum için `linkedSignal()`\").\r\n */\r\n@Component({\r\n selector: 'mf-splitter',\r\n exportAs: 'mfSplitter',\r\n host: { '[class]': 'hostClasses()' },\r\n templateUrl: './splitter.html',\r\n})\r\nexport class Splitter {\r\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\r\n readonly min = input(10);\r\n readonly max = input(90);\r\n // Alias `split` mevcut public API — yeniden adlandırma kırıcı, ileri bir sürümde ele alınacak.\r\n // eslint-disable-next-line @angular-eslint/no-input-rename\r\n readonly initialSplit = input(50, { alias: 'split' });\r\n\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n protected readonly currentSplit = linkedSignal(() => this.initialSplit());\r\n\r\n protected readonly hostClasses = computed(() =>\r\n cn('flex h-full w-full', this.orientation() === 'vertical' ? 'flex-col' : 'flex-row'),\r\n );\r\n\r\n private clamp(v: number): number {\r\n return Math.min(this.max(), Math.max(this.min(), v));\r\n }\r\n\r\n protected onPointerDown(event: PointerEvent): void {\r\n const handle = event.currentTarget as HTMLElement;\r\n handle.setPointerCapture(event.pointerId);\r\n }\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n if (event.buttons !== 1) return;\r\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const isVertical = this.orientation() === 'vertical';\r\n // Yatayda ilk panel satır başında durur — RTL'de sağda; oran oradan ölçülür.\r\n const ratio = isVertical\r\n ? (event.clientY - rect.top) / rect.height\r\n : inlineStartRatio(event.clientX, rect, isRtl(this.elementRef.nativeElement));\r\n this.currentSplit.set(this.clamp(Math.round(ratio * 100)));\r\n }\r\n\r\n protected onPointerUp(event: PointerEvent): void {\r\n (event.currentTarget as HTMLElement).releasePointerCapture(event.pointerId);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const isVertical = this.orientation() === 'vertical';\r\n // Yatay oklar görsel yöne göre: RTL'de ← ayırıcıyı satır sonuna (sola) iter, ilk paneli büyütür.\r\n const rtl = !isVertical && isRtl(this.elementRef.nativeElement);\r\n const increaseKey = isVertical ? 'ArrowDown' : rtl ? 'ArrowLeft' : 'ArrowRight';\r\n const decreaseKey = isVertical ? 'ArrowUp' : rtl ? 'ArrowRight' : 'ArrowLeft';\r\n if (event.key === increaseKey) {\r\n event.preventDefault();\r\n this.currentSplit.update((v) => this.clamp(v + 2));\r\n } else if (event.key === decreaseKey) {\r\n event.preventDefault();\r\n this.currentSplit.update((v) => this.clamp(v - 2));\r\n } else if (event.key === 'Home') {\r\n event.preventDefault();\r\n this.currentSplit.set(this.min());\r\n } else if (event.key === 'End') {\r\n event.preventDefault();\r\n this.currentSplit.set(this.max());\r\n }\r\n }\r\n}\r\n","<div class=\"min-h-0 min-w-0 overflow-auto\" [style.flex]=\"currentSplit() + '% 0 0'\">\r\n <ng-content select=\"[splitterPane1]\" />\r\n</div>\r\n\r\n<div\r\n role=\"separator\"\r\n tabindex=\"0\"\r\n [attr.aria-orientation]=\"orientation() === 'vertical' ? 'horizontal' : 'vertical'\"\r\n [attr.aria-valuenow]=\"currentSplit()\"\r\n [attr.aria-valuemin]=\"min()\"\r\n [attr.aria-valuemax]=\"max()\"\r\n [class]=\"\r\n 'shrink-0 touch-none bg-border transition-colors duration-fast ease-emphasis hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-focus-ring ' +\r\n (orientation() === 'vertical' ? 'h-1 w-full cursor-row-resize' : 'w-1 cursor-col-resize')\r\n \"\r\n (pointerdown)=\"onPointerDown($event)\"\r\n (pointermove)=\"onPointerMove($event)\"\r\n (pointerup)=\"onPointerUp($event)\"\r\n (keydown)=\"onKeydown($event)\"\r\n></div>\r\n\r\n<div class=\"min-h-0 min-w-0 flex-1 overflow-auto\">\r\n <ng-content select=\"[splitterPane2]\" />\r\n</div>\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/** Tonal ikon dolgusu — Badge/Avatar'daki AYNI tonal işaret rol token'ı (`bg-X-tint text-X-tint-fg`, `color-mix()` tabanlı), bkz. projects/ui-kit/README.md \"Token mimarisi\". */\r\nexport const statTileIconVariants = cva(\r\n 'flex h-10 w-10 shrink-0 items-center justify-center rounded-md',\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 },\r\n defaultVariants: { tone: 'neutral' },\r\n },\r\n);\r\n\r\nexport type StatTileTone = VariantProps<typeof statTileIconVariants>['tone'];\r\n","import { Component, booleanAttribute, computed, input } from '@angular/core';\r\nimport { Card } from '@mesgflow/ui-kit/card';\r\nimport { Sparkline } from '@mesgflow/ui-kit/chart';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { statTileIconVariants, type StatTileTone } from './stat-tile.variants';\r\n\r\nexport type StatTileDeltaDirection = 'up' | 'down' | 'flat';\r\n\r\nconst DELTA_ICON: Record<StatTileDeltaDirection, string> = {\r\n up: 'trending_up',\r\n down: 'trending_down',\r\n flat: 'trending_flat',\r\n};\r\n\r\n/**\r\n * `<mf-stat-tile label=\"Aktif üye\" value=\"1.284\" delta=\"+12%\" deltaDirection=\"up\"\r\n * deltaCaption=\"geçen aya göre\" [trend]=\"last12\" trendLabel=\"Son 12 ay\" />`\r\n *\r\n * KPI şeridinin tek birimi — dataviz \"figür sözleşmesi\": `label` · `value` · opsiyonel `delta`\r\n * (işaretli, adı verilen bir döneme göre) · opsiyonel `trend` (sparkline, güncel dönem vurgulu).\r\n *\r\n * Delta rengi = YÖN × \"yukarı iyi mi\" (`upIsGood` — hata oranında düşüş iyidir): iyi → success,\r\n * kötü → danger, yatay → nötr. Renk ASLA tek başına anlam taşımaz: yön ikonu + işaretli metin\r\n * her zaman yanında. Değer büyük tek başına bir sayı olduğu için orantılı rakam (tabular DEĞİL —\r\n * `tabular-nums` \"121\"i büyük boyutta dağınık gösterir).\r\n *\r\n * Ray motifi BİLEREK yok — README bu motifi 4 yerle sınırlıyor, StatTile beşinci yer olmuyor.\r\n * Dar bir ızgara hücresinde (16rem altı, `@container`) ikon metnin ÜSTÜNE geçer — değer satırı daralmaz.\r\n * `@container` (inline-size containment) host'un genişliği İÇERİKTEN gelemez demek: ızgara/blok\r\n * içinde doğal çalışır; genişliği verilmemiş bir flex öğesi olarak kullanırken `flex-1`/`w-*` verin.\r\n */\r\n@Component({\r\n selector: 'mf-stat-tile',\r\n imports: [Card, Icon, Sparkline],\r\n host: { class: 'block @container' },\r\n templateUrl: './stat-tile.html',\r\n})\r\nexport class StatTile {\r\n readonly label = input.required<string>();\r\n readonly value = input.required<string>();\r\n readonly icon = input<string>('');\r\n readonly caption = input<string>('');\r\n readonly tone = input<StatTileTone>('neutral');\r\n\r\n /** Görüntülenecek işaretli değişim (\"+12%\", \"−3\"). Boşsa delta satırı çizilmez. */\r\n readonly delta = input('');\r\n readonly deltaDirection = input<StatTileDeltaDirection>('flat');\r\n /** Artış iyi mi? Hata oranı, churn, yanıt süresi gibi metriklerde `false`. */\r\n readonly upIsGood = input(true, { transform: booleanAttribute });\r\n /** Karşılaştırılan dönem (\"geçen aya göre\") — tüketici metni, kit varsayılanı YOK. */\r\n readonly deltaCaption = input('');\r\n /** Sparkline değerleri (en az 2). Güncel dönem vurgu renginde çizilir. */\r\n readonly trend = input<readonly number[]>([]);\r\n /** Sparkline'ın erişilebilir adı; boşsa süs sayılır (değer zaten metinde). */\r\n readonly trendLabel = input('');\r\n\r\n protected readonly iconClasses = computed(() => cn(statTileIconVariants({ tone: this.tone() })));\r\n\r\n protected readonly deltaIcon = computed(() => DELTA_ICON[this.deltaDirection()]);\r\n\r\n protected readonly deltaClasses = computed(() => {\r\n const direction = this.deltaDirection();\r\n const good = direction === 'up' ? this.upIsGood() : !this.upIsGood();\r\n const color = direction === 'flat' ? 'text-fg-muted' : good ? 'text-success' : 'text-danger';\r\n return cn('inline-flex items-center gap-0.5 font-medium tabular-nums', color);\r\n });\r\n}\r\n","<div mfCard padding=\"md\" class=\"flex flex-col items-start gap-3 @3xs:flex-row @3xs:gap-4\">\r\n @if (icon()) {\r\n <div [class]=\"iconClasses()\">\r\n <span mfIcon [size]=\"20\">{{ icon() }}</span>\r\n </div>\r\n }\r\n <div class=\"w-full min-w-0 flex-1\">\r\n <p class=\"text-eyebrow text-fg-subtle\">{{ label() }}</p>\r\n <div class=\"mt-1 flex items-end justify-between gap-3\">\r\n <p class=\"font-display text-metric text-fg\">{{ value() }}</p>\r\n @if (trend().length > 1) {\r\n <mf-sparkline [values]=\"trend()\" [ariaLabel]=\"trendLabel()\" class=\"mb-0.5 shrink-0\" />\r\n }\r\n </div>\r\n @if (delta()) {\r\n <p class=\"mt-1.5 flex flex-wrap items-center gap-x-1.5 text-xs\">\r\n <span [class]=\"deltaClasses()\">\r\n <span mfIcon [size]=\"16\">{{ deltaIcon() }}</span>\r\n {{ delta() }}\r\n </span>\r\n @if (deltaCaption()) {\r\n <span class=\"text-fg-subtle\">{{ deltaCaption() }}</span>\r\n }\r\n </p>\r\n }\r\n @if (caption()) {\r\n <p class=\"mt-1 truncate text-xs text-fg-subtle\">{{ caption() }}</p>\r\n }\r\n </div>\r\n</div>\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { MF_STEPPER_LABELS } from '@mesgflow/ui-kit/core';\r\n\r\n/**\r\n * `<mf-stepper [current]=\"1\"><mf-step label=\"Hesap\" /><mf-step label=\"Ödeme\" /></mf-stepper>`\r\n *\r\n * Salt görsel bir ilerleme göstergesi — gezinme (bir sonraki/önceki adıma\r\n * geçme) çağıranın kendi sorumluluğunda (`[current]`'ı değiştiren düğmeler\r\n * dışarıda yaşar). Her `mf-step` kendi index'ini KURULUŞTA bir kez\r\n * `registerStep()` ile alır — `contentChildren` yerine basit bir kayıt-sırası\r\n * sayacı, `Step`'in `Stepper`'ı import ETMESİ yeterli (tersi YOK, döngüsel\r\n * bir tip bağımlılığı kurulmuyor).\r\n */\r\n@Component({\r\n selector: 'mf-stepper',\r\n exportAs: 'mfStepper',\r\n host: {\r\n role: 'list',\r\n '[attr.aria-label]': 'effectiveAriaLabel()',\r\n class: 'flex items-center',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class Stepper {\r\n readonly current = input(0);\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly stepperLabels = inject(MF_STEPPER_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.stepperLabels().ariaLabel,\r\n );\r\n\r\n private nextIndex = 0;\r\n\r\n /** Her `mf-step` kurulumda BİR KEZ çağırır — kendi (sıradaki) index'ini alır. */\r\n registerStep(): number {\r\n return this.nextIndex++;\r\n }\r\n\r\n isComplete(index: number): boolean {\r\n return index < this.current();\r\n }\r\n\r\n isCurrent(index: number): boolean {\r\n return index === this.current();\r\n }\r\n}\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Stepper } from './stepper';\r\n\r\n/**\r\n * `<mf-step label=\"Hesap\" description=\"Bilgilerinizi girin\" />` — bir\r\n * `mf-stepper` ATASI ZORUNLU (bkz. `stepper.ts`'in JSDoc'u). Bağlayıcı\r\n * çizgi kendi `::after` pseudo-elementi (`last:after:hidden` ile SON\r\n * adımda gizlenir — hangi adımın son olduğunu bilmek için ayrı bir\r\n * hesaplama GEREKMEZ, saf CSS `:last-child`).\r\n */\r\n@Component({\r\n selector: 'mf-step',\r\n exportAs: 'mfStep',\r\n imports: [Icon],\r\n host: {\r\n role: 'listitem',\r\n '[class]': 'hostClasses()',\r\n '[attr.aria-current]': 'isCurrent() ? \"step\" : null',\r\n },\r\n template: `\r\n <span [class]=\"circleClasses()\">\r\n @if (isComplete()) {\r\n <span mfIcon [size]=\"14\">check</span>\r\n } @else {\r\n {{ index + 1 }}\r\n }\r\n </span>\r\n <span class=\"flex min-w-0 flex-col\">\r\n <span [class]=\"labelClasses()\">{{ label() }}</span>\r\n @if (description()) {\r\n <span class=\"truncate text-xs text-fg-subtle\">{{ description() }}</span>\r\n }\r\n </span>\r\n `,\r\n})\r\nexport class Step {\r\n readonly label = input.required<string>();\r\n readonly description = input('');\r\n\r\n private readonly stepper = inject(Stepper);\r\n protected readonly index = this.stepper.registerStep();\r\n\r\n protected readonly isComplete = computed(() => this.stepper.isComplete(this.index));\r\n protected readonly isCurrent = computed(() => this.stepper.isCurrent(this.index));\r\n\r\n protected readonly hostClasses = computed(() =>\r\n cn(\r\n \"relative flex flex-1 items-center gap-2 after:mx-3 after:h-px after:flex-1 after:content-[''] last:after:hidden\",\r\n this.isComplete() ? 'after:bg-accent-fill' : 'after:bg-border',\r\n ),\r\n );\r\n\r\n protected circleClasses(): string {\r\n return cn(\r\n 'flex h-6 w-6 shrink-0 items-center justify-center rounded-full text-xs font-medium',\r\n this.isComplete()\r\n ? 'bg-accent-fill text-fg-on-accent'\r\n : this.isCurrent()\r\n ? 'border-2 border-accent text-accent'\r\n : 'border border-border text-fg-subtle',\r\n );\r\n }\r\n\r\n protected labelClasses(): string {\r\n return cn(\r\n 'text-sm',\r\n this.isCurrent() || this.isComplete() ? 'font-medium text-fg' : 'text-fg-subtle',\r\n );\r\n }\r\n}\r\n","import { Component, computed, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { ValueAccessorBase, type MfSize } from '@mesgflow/ui-kit/core';\r\n\r\n/** Track/thumb/offset/kayma ölçüleri — `(track_h - thumb_h) / 2 = offset`, `translate = track_w - thumb_w - 2×offset` formülüyle üretildi (bkz. `md`'nin önceki sabit değerleriyle birebir örtüştüğü doğrulaması). */\r\nconst SIZE_CLASSES: Record<\r\n MfSize,\r\n { track: string; thumb: string; offset: string; translate: string }\r\n> = {\r\n sm: {\r\n track: 'h-5 w-9',\r\n thumb: 'h-4 w-4',\r\n offset: 'start-0.5',\r\n translate: 'peer-checked:translate-x-4 rtl:peer-checked:-translate-x-4',\r\n },\r\n md: {\r\n track: 'h-6 w-11',\r\n thumb: 'h-5 w-5',\r\n offset: 'start-0.5',\r\n translate: 'peer-checked:translate-x-5 rtl:peer-checked:-translate-x-5',\r\n },\r\n lg: {\r\n track: 'h-7 w-13',\r\n thumb: 'h-6 w-6',\r\n offset: 'start-0.5',\r\n translate: 'peer-checked:translate-x-6 rtl:peer-checked:-translate-x-6',\r\n },\r\n};\r\n\r\n/**\r\n * `<mf-switch [(checked)]=\"row.active\" (checkedChange)=\"onToggle(row)\" />`\r\n *\r\n * Native `[(ngModel)]` DEĞİL, Angular'ın `model()` iki-yönlü bağlama sinyali\r\n * kullanılıyor (`[(checked)]`) — ControlValueAccessor yazmadan aynı ergonomiyi\r\n * veriyor. Görünür track+thumb, gizli (sr-only) bir native checkbox'ın\r\n * `:checked` durumuna komşu `<span>` üzerinden `peer-checked:` ile tepki\r\n * veriyor — gerçek form kontrolü hâlâ native checkbox (klavye/focus/a11y\r\n * ücretsiz), görsel tamamen bizim.\r\n */\r\n@Component({\r\n selector: 'mf-switch',\r\n exportAs: 'mfSwitch',\r\n host: { class: 'inline-flex' },\r\n templateUrl: './switch.html',\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Switch), multi: true }],\r\n})\r\nexport class Switch extends ValueAccessorBase<boolean> implements ControlValueAccessor {\r\n readonly checked = model(false);\r\n readonly disabled = input(false);\r\n readonly size = input<MfSize>('md');\r\n readonly label = input<string>('');\r\n /** `label` boşken (görünür metin yok) native checkbox'a erişilebilir ad sağlamak için — `label` doluysa YOK SAYILIR (çift anons olmasın diye). */\r\n readonly ariaLabel = input<string>('');\r\n\r\n protected readonly sizeClasses = computed(() => SIZE_CLASSES[this.size()]);\r\n\r\n writeValue(value: boolean): void {\r\n this.checked.set(value);\r\n }\r\n\r\n protected onToggle(event: Event): void {\r\n const checked = (event.target as HTMLInputElement).checked;\r\n this.checked.set(checked);\r\n this.onChange(checked);\r\n this.onTouched();\r\n }\r\n}\r\n","<label\r\n class=\"inline-flex cursor-pointer items-center gap-2\"\r\n [class.cursor-not-allowed]=\"disabled()\"\r\n [class.opacity-50]=\"disabled()\"\r\n>\r\n <span [class]=\"'relative inline-flex shrink-0 items-center ' + sizeClasses().track\">\r\n <input\r\n type=\"checkbox\"\r\n role=\"switch\"\r\n class=\"peer sr-only\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"label() ? null : ariaLabel() || null\"\r\n (change)=\"onToggle($event)\"\r\n />\r\n <span\r\n class=\"pointer-events-none absolute inset-0 rounded-full bg-surface-active transition-colors duration-fast ease-emphasis peer-checked:bg-accent-fill peer-focus-visible:outline peer-focus-visible:outline-2 peer-focus-visible:outline-offset-2 peer-focus-visible:outline-focus-ring\"\r\n ></span>\r\n <span\r\n [class]=\"\r\n 'pointer-events-none absolute rounded-full bg-surface shadow-control transition-transform duration-fast ease-out ' +\r\n sizeClasses().thumb +\r\n ' ' +\r\n sizeClasses().offset +\r\n ' ' +\r\n sizeClasses().translate\r\n \"\r\n ></span>\r\n </span>\r\n @if (label()) {\r\n <span class=\"text-sm text-fg-muted\">{{ label() }}</span>\r\n }\r\n</label>\r\n","export enum SortDirection {\r\n Ascending = 0,\r\n Descending = 1,\r\n}\r\n\r\nexport enum FilterOperator {\r\n Equal = 0,\r\n NotEqual = 1,\r\n GreaterThan = 2,\r\n GreaterOrEqual = 3,\r\n LessThan = 4,\r\n LessOrEqual = 5,\r\n Contains = 6,\r\n StartsWith = 7,\r\n EndsWith = 8,\r\n In = 9,\r\n IsNull = 10,\r\n IsNotNull = 11,\r\n}\r\n\r\nexport enum FilterLogic {\r\n And = 0,\r\n Or = 1,\r\n}\r\n\r\nexport interface SortDescriptor {\r\n field: string;\r\n direction: SortDirection;\r\n}\r\n\r\nexport interface FilterCondition {\r\n field: string;\r\n operator: FilterOperator;\r\n value?: unknown;\r\n}\r\n\r\nexport interface FilterGroup {\r\n logic: FilterLogic;\r\n conditions?: FilterCondition[];\r\n groups?: FilterGroup[];\r\n}\r\n\r\nexport const DEFAULT_PAGE_SIZE = 20;\r\nexport const MAX_PAGE_SIZE = 100;\r\n\r\nexport interface PageRequest {\r\n pageNumber: number;\r\n pageSize: number;\r\n}\r\n\r\nexport interface PagedResult<T> {\r\n items: T[];\r\n pageNumber: number;\r\n pageSize: number;\r\n totalCount: number;\r\n totalPages: number;\r\n}\r\n\r\n/** Backend'e giden POST body — `PagedResult`'un istek tarafındaki karşılığı. */\r\nexport interface PagedRequest {\r\n page: PageRequest;\r\n filter?: FilterGroup;\r\n sort?: SortDescriptor[];\r\n}\r\n\r\n/**\r\n * `PagedRequest`'i backend'e giden JSON'un HER ZAMAN aynı şekilde serileştiği\r\n * bir forma indirger. Neden önemli: birçok backend (ör. bu kütüphanenin\r\n * geliştirildiği projedeki caching davranışı) sorgu cache anahtarını\r\n * `JsonSerializer.Serialize(request)` ÜZERİNDEN kuruyor — yani anlamca özdeş\r\n * ama söz dizimsel farklı iki payload (`sort: []` ile `sort` hiç yok; `filter`\r\n * içi boş `conditions: []` ile `filter` hiç yok; property sırası) SUNUCUDA\r\n * AYRI cache girdisi üretir ve invalidation'ın getirisini boşa çıkarır. Bu\r\n * fonksiyon üç şeyi garanti eder: (1) boş `sort`/`filter` her zaman\r\n * `undefined`, dizi değil, (2) `FilterGroup` içindeki boş `conditions`/`groups`\r\n * de `undefined`'a iner (özyinelemeli), (3) tüm nesneler SABİT anahtar\r\n * sırasıyla yeniden kurulur (JS'te string anahtarlı nesnelerde ekleme sırası\r\n * korunur, `JSON.stringify` bunu birebir yansıtır).\r\n */\r\nexport function canonicalPagedRequest(request: {\r\n page: PageRequest;\r\n filter?: FilterGroup;\r\n sort?: SortDescriptor[];\r\n}): PagedRequest {\r\n return {\r\n page: { pageNumber: request.page.pageNumber, pageSize: request.page.pageSize },\r\n filter: canonicalFilterGroup(request.filter),\r\n sort: request.sort?.length\r\n ? request.sort.map((s) => ({ field: s.field, direction: s.direction }))\r\n : undefined,\r\n };\r\n}\r\n\r\nfunction canonicalFilterGroup(group: FilterGroup | undefined): FilterGroup | undefined {\r\n if (!group) return undefined;\r\n\r\n const conditions = group.conditions?.length\r\n ? group.conditions.map((c) => ({ field: c.field, operator: c.operator, value: c.value }))\r\n : undefined;\r\n const groups = group.groups?.map(canonicalFilterGroup).filter((g): g is FilterGroup => !!g);\r\n\r\n if (!conditions && (!groups || groups.length === 0)) return undefined;\r\n\r\n const result: FilterGroup = { logic: group.logic };\r\n if (conditions) result.conditions = conditions;\r\n if (groups?.length) result.groups = groups;\r\n return result;\r\n}\r\n","import {\r\n FilterLogic,\r\n FilterOperator,\r\n SortDirection,\r\n type FilterCondition,\r\n type FilterGroup,\r\n type SortDescriptor,\r\n} from './query-contract.model';\r\n\r\n/**\r\n * `Table`'ın `[clientSide]=\"true\"` modunun sorgu motoru — \"backend'in\r\n * `FilterGroup`/`SortDescriptor` modelini elimde tutuyorum, gerçek sunucu\r\n * yerine bir diziye uyguluyorum\" işini yapıyor; tüketicinin backend'iyle AYNI\r\n * operatör sözleşmesini konuşacak şekilde tasarlandı — bu yüzden burada\r\n * `'between'` gibi UI'a özel sentetik bir operatör YOK: `table-filter.model.ts`'teki\r\n * `buildFilterGroup` çağrıldığı an tarih aralığını zaten gerçek\r\n * `GreaterOrEqual`/`LessOrEqual` çiftine çevirmiş oluyor.\r\n */\r\n\r\nfunction matchesCondition<T>(row: T, condition: FilterCondition): boolean {\r\n const value = (row as unknown as Record<string, unknown>)[condition.field];\r\n const target = condition.value;\r\n\r\n if (condition.operator === FilterOperator.IsNull)\r\n return value === null || value === undefined || value === '';\r\n if (condition.operator === FilterOperator.IsNotNull)\r\n return !(value === null || value === undefined || value === '');\r\n if (condition.operator === FilterOperator.In)\r\n return Array.isArray(target) && target.includes(value);\r\n\r\n // Backend string karşılaştırmalarını Postgres ILIKE (büyük/küçük harf\r\n // duyarsız) ile yapıyor — istemci tarafı aynı davranışı\r\n // `toLocaleLowerCase('tr')` ile taklit ediyor.\r\n if (typeof value === 'string' || typeof target === 'string') {\r\n const v = String(value ?? '').toLocaleLowerCase('tr');\r\n const t = String(target ?? '').toLocaleLowerCase('tr');\r\n switch (condition.operator) {\r\n case FilterOperator.Equal:\r\n return v === t;\r\n case FilterOperator.NotEqual:\r\n return v !== t;\r\n case FilterOperator.Contains:\r\n return v.includes(t);\r\n case FilterOperator.StartsWith:\r\n return v.startsWith(t);\r\n case FilterOperator.EndsWith:\r\n return v.endsWith(t);\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n switch (condition.operator) {\r\n case FilterOperator.Equal:\r\n return value === target;\r\n case FilterOperator.NotEqual:\r\n return value !== target;\r\n case FilterOperator.GreaterThan:\r\n return (value as never) > (target as never);\r\n case FilterOperator.GreaterOrEqual:\r\n return (value as never) >= (target as never);\r\n case FilterOperator.LessThan:\r\n return (value as never) < (target as never);\r\n case FilterOperator.LessOrEqual:\r\n return (value as never) <= (target as never);\r\n default:\r\n return true;\r\n }\r\n}\r\n\r\nexport function matchesFilterGroup<T>(row: T, group: FilterGroup | undefined): boolean {\r\n if (!group) return true;\r\n const results = [\r\n ...(group.conditions ?? []).map((c) => matchesCondition(row, c)),\r\n ...(group.groups ?? []).map((g) => matchesFilterGroup(row, g)),\r\n ];\r\n if (results.length === 0) return true;\r\n return group.logic === FilterLogic.Or ? results.some(Boolean) : results.every(Boolean);\r\n}\r\n\r\n/** Backend `SortExpressionBuilder` gibi ilk alan `OrderBy`, gerisi `ThenBy` — çoklu sıralamayı basamak basamak uygular. */\r\nexport function sortRows<T>(rows: readonly T[], sort: readonly SortDescriptor[] | undefined): T[] {\r\n if (!sort?.length) return [...rows];\r\n return [...rows].sort((a, b) => {\r\n for (const { field, direction } of sort) {\r\n const av = (a as unknown as Record<string, unknown>)[field];\r\n const bv = (b as unknown as Record<string, unknown>)[field];\r\n if (av === bv) continue;\r\n const cmp = av! > bv! ? 1 : -1;\r\n return direction === SortDirection.Descending ? -cmp : cmp;\r\n }\r\n return 0;\r\n });\r\n}\r\n","import { Directive, ElementRef, inject, input, output } from '@angular/core';\r\n\r\nconst KEY_STEP = 16;\r\nconst KEY_STEP_LARGE = 64;\r\n\r\n/**\r\n * `<span mfTableResizeHandle [label]=\"...\" (widthChange)=\"...\" />` — başlık hücresinin sağ kenarındaki\r\n * sürükleme tutamacı. WAI-ARIA \"window splitter\" deseni: `role=\"separator\"` + odaklanabilir +\r\n * `aria-valuenow`; klavyede ←/→ 16px (Shift ile 64px), çift tık / Enter \"içeriğe sığdır\".\r\n *\r\n * Başlangıç genişliği HER hareketin başında ebeveyn `<th>`'nin GERÇEK ölçüsünden okunur —\r\n * tutamaç tablonun genişlik durumunu bilmek zorunda değil. Pointer capture sayesinde imleç\r\n * hücreden çıksa da sürükleme sürer. RTL'de yatay yön ters çevrilir.\r\n */\r\n@Directive({\r\n selector: '[mfTableResizeHandle]',\r\n host: {\r\n role: 'separator',\r\n 'aria-orientation': 'vertical',\r\n tabindex: '0',\r\n '[attr.aria-label]': 'label()',\r\n '[attr.aria-valuenow]': 'width() ?? null',\r\n '[attr.aria-valuemin]': 'min()',\r\n '[attr.aria-valuemax]': 'max()',\r\n class:\r\n 'absolute inset-y-0 end-0 z-[3] w-2 cursor-col-resize touch-none select-none outline-none before:absolute before:inset-y-1.5 before:end-0 before:w-0.5 before:rounded-full before:bg-transparent before:transition-colors before:duration-fast hover:before:bg-border-strong focus-visible:before:bg-focus-ring active:before:bg-accent-fill',\r\n '(pointerdown)': 'onPointerDown($event)',\r\n '(pointermove)': 'onPointerMove($event)',\r\n '(pointerup)': 'onPointerUp($event)',\r\n '(pointercancel)': 'onPointerUp($event)',\r\n '(keydown)': 'onKeydown($event)',\r\n '(dblclick)': 'autofit.emit()',\r\n '(click)': '$event.stopPropagation()',\r\n },\r\n})\r\nexport class TableResizeHandle {\r\n readonly label = input.required<string>();\r\n readonly width = input<number>();\r\n readonly min = input(80);\r\n /** ARIA üst sınırı — separator varsayılanı 100 olduğundan px değerleri için açıkça verilir. */\r\n readonly max = input(2000);\r\n\r\n /** İlk hareketten ÖNCE — tablo diğer kolonların genişliğini dondurur (bkz. `Table.freezeWidths`). */\r\n readonly resizeStart = output<void>();\r\n readonly widthChange = output<number>();\r\n readonly autofit = output<void>();\r\n\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private drag: { pointerId: number; startX: number; startWidth: number } | null = null;\r\n\r\n private cellWidth(): number {\r\n return this.host.nativeElement.parentElement?.getBoundingClientRect().width ?? 0;\r\n }\r\n\r\n private direction(): 1 | -1 {\r\n return getComputedStyle(this.host.nativeElement).direction === 'rtl' ? -1 : 1;\r\n }\r\n\r\n protected onPointerDown(event: PointerEvent): void {\r\n if (event.button !== 0) return;\r\n event.preventDefault();\r\n this.resizeStart.emit();\r\n this.drag = { pointerId: event.pointerId, startX: event.clientX, startWidth: this.cellWidth() };\r\n this.host.nativeElement.setPointerCapture?.(event.pointerId);\r\n }\r\n\r\n protected onPointerMove(event: PointerEvent): void {\r\n if (!this.drag || event.pointerId !== this.drag.pointerId) return;\r\n const delta = (event.clientX - this.drag.startX) * this.direction();\r\n this.widthChange.emit(Math.max(this.min(), Math.round(this.drag.startWidth + delta)));\r\n }\r\n\r\n protected onPointerUp(event: PointerEvent): void {\r\n if (!this.drag || event.pointerId !== this.drag.pointerId) return;\r\n this.host.nativeElement.releasePointerCapture?.(event.pointerId);\r\n this.drag = null;\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'Enter') {\r\n event.preventDefault();\r\n this.autofit.emit();\r\n return;\r\n }\r\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;\r\n event.preventDefault();\r\n const step = (event.shiftKey ? KEY_STEP_LARGE : KEY_STEP) * this.direction();\r\n const delta = event.key === 'ArrowRight' ? step : -step;\r\n this.resizeStart.emit();\r\n const start = this.width() ?? this.cellWidth();\r\n this.widthChange.emit(Math.max(this.min(), Math.round(start + delta)));\r\n }\r\n}\r\n","import { CdkOverlayOrigin } from '@angular/cdk/overlay';\r\nimport { Component, computed, inject, input, output } from '@angular/core';\r\nimport { Checkbox } from '@mesgflow/ui-kit/checkbox';\r\nimport { MF_TABLE_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport type { TableColumn } from './table-column.model';\r\n\r\n/**\r\n * Toolbar'daki \"Kolonlar\" düğmesine bağlı basit bir görünürlük paneli.\r\n * Sunucuya HİÇBİR ŞEY göndermez — `Table` `hiddenColumns` sinyalini kendi\r\n * içinde tutar (bkz. table.ts), bu yalnızca o sinyali değiştiren bir UI.\r\n * `primary` işaretli kolon listede hiç görünmez — kimlik kolonu kapatılamaz.\r\n * Panel iskeleti `Popover`'a devredildi (bkz. plan Faz 1c).\r\n */\r\n@Component({\r\n selector: 'mf-table-columns-menu',\r\n imports: [Checkbox, Popover],\r\n host: { class: 'contents' },\r\n templateUrl: './table-columns-menu.html',\r\n})\r\nexport class TableColumnsMenu<T> {\r\n readonly columns = input.required<TableColumn<T>[]>();\r\n readonly hidden = input.required<ReadonlySet<string>>();\r\n readonly origin = input.required<CdkOverlayOrigin>();\r\n readonly open = input.required<boolean>();\r\n readonly label = input<string>();\r\n\r\n private readonly tableLabels = inject(MF_TABLE_LABELS);\r\n protected readonly effectiveLabel = computed(() => this.label() ?? this.tableLabels().columns);\r\n\r\n readonly hiddenChange = output<ReadonlySet<string>>();\r\n readonly closed = output<void>();\r\n\r\n protected readonly toggleable = computed(() =>\r\n this.columns().filter((c) => !c.primary && c.hideable !== false),\r\n );\r\n\r\n protected isHidden(field: string): boolean {\r\n return this.hidden().has(field);\r\n }\r\n\r\n protected toggle(field: string): void {\r\n const next = new Set(this.hidden());\r\n if (next.has(field)) next.delete(field);\r\n else next.add(field);\r\n this.hiddenChange.emit(next);\r\n }\r\n\r\n protected close(): void {\r\n this.closed.emit();\r\n }\r\n}\r\n","<mf-popover\r\n [origin]=\"origin()\"\r\n [open]=\"open()\"\r\n placement=\"bottom-end\"\r\n padding=\"md\"\r\n panelClass=\"w-56\"\r\n (closed)=\"close()\"\r\n>\r\n <p class=\"mb-1 px-1.5 py-1 text-eyebrow text-fg-subtle\">{{ effectiveLabel() }}</p>\r\n <ul class=\"flex list-none flex-col gap-0.5\">\r\n @for (column of toggleable(); track column.field) {\r\n <li>\r\n <label\r\n class=\"flex cursor-pointer items-center gap-2 rounded-sm px-2.5 py-1.5 text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n mfCheckbox\r\n [checked]=\"!isHidden(column.field)\"\r\n (change)=\"toggle(column.field)\"\r\n />\r\n <span class=\"truncate\">{{ column.header }}</span>\r\n </label>\r\n </li>\r\n }\r\n </ul>\r\n</mf-popover>\r\n","import type { MfTableFilterLabels } from '@mesgflow/ui-kit/core';\r\nimport { FilterOperator } from './query-contract.model';\r\nimport type { TableFilterOperator } from './table-filter.model';\r\n\r\n/**\r\n * Filtre çubuğu + komut menüsünün metinlerinin şekli — `MfTableFilterLabels`\r\n * (bkz. `@mesgflow/ui-kit/core`'un `core/i18n/labels.ts`'i, `MF_TABLE_LABELS`\r\n * umbrella token'ının `filter` alt-alanı) bu dosyanın eski yerel\r\n * `TableFilterLabels`/`DEFAULT_TABLE_FILTER_LABELS`'ının yerini aldı —\r\n * `operatorLabel()` yardımcısı (aşağıda) TABLE'A ÖZGÜ kaldığı için burada\r\n * yaşamaya devam ediyor, sadece TİPİ artık core'dan geliyor.\r\n */\r\nexport type TableFilterLabels = MfTableFilterLabels;\r\n\r\nconst OPERATOR_KEY: Partial<Record<FilterOperator, keyof TableFilterLabels['operators']>> = {\r\n [FilterOperator.Equal]: 'equal',\r\n [FilterOperator.NotEqual]: 'notEqual',\r\n [FilterOperator.GreaterThan]: 'greaterThan',\r\n [FilterOperator.GreaterOrEqual]: 'greaterOrEqual',\r\n [FilterOperator.LessThan]: 'lessThan',\r\n [FilterOperator.LessOrEqual]: 'lessOrEqual',\r\n [FilterOperator.Contains]: 'contains',\r\n [FilterOperator.StartsWith]: 'startsWith',\r\n [FilterOperator.EndsWith]: 'endsWith',\r\n [FilterOperator.In]: 'in',\r\n [FilterOperator.IsNull]: 'isNull',\r\n [FilterOperator.IsNotNull]: 'isNotNull',\r\n};\r\n\r\nexport function operatorLabel(labels: TableFilterLabels, operator: TableFilterOperator): string {\r\n if (operator === 'between') return labels.operators.between;\r\n const key = OPERATOR_KEY[operator];\r\n return key ? labels.operators[key] : String(operator);\r\n}\r\n","import { startOfDay } from 'date-fns';\r\nimport {\r\n FilterLogic,\r\n FilterOperator,\r\n type FilterCondition,\r\n type FilterGroup,\r\n} from './query-contract.model';\r\nimport type { TableColumnFilterType } from './table-column.model';\r\n\r\n/**\r\n * UI seviyesinde bir operatör. `'between'` backend'de KARŞILIĞI OLMAYAN\r\n * sentetik bir değer: `FilterOperator` enum'unda `Between` yok (backend\r\n * sözleşmesinde de yok), bu yüzden bir tarih aralığı emit edilirken\r\n * `GreaterOrEqual` + `LessOrEqual` içeren küçük bir `And` grubuna çevriliyor\r\n * (bkz. `buildFilterGroup`). Kullanıcıya tek bir chip olarak görünür.\r\n */\r\nexport type TableFilterOperator = FilterOperator | 'between';\r\n\r\nexport interface AppliedFilter {\r\n id: string;\r\n field: string;\r\n operator: TableFilterOperator;\r\n /**\r\n * - `In` → değer DİZİSİ (çoklu seçim)\r\n * - `'between'` → `[from, to]` (ikisi de ISO tarih metni, biri null olabilir)\r\n * - `IsNull`/`IsNotNull` → değer yok (`null`)\r\n * - diğer → tek değer\r\n */\r\n value: unknown;\r\n}\r\n\r\n/** Tip başına filtre menüsünde sunulacak operatörler. `In` burada YOK — çoklu seçim ayrı bir jest (checkbox listesi), operatör dropdown'ında bir satır değil. */\r\nexport const OPERATORS_BY_TYPE: Record<TableColumnFilterType, TableFilterOperator[]> = {\r\n text: [\r\n FilterOperator.Contains,\r\n FilterOperator.Equal,\r\n FilterOperator.NotEqual,\r\n FilterOperator.StartsWith,\r\n FilterOperator.EndsWith,\r\n FilterOperator.IsNull,\r\n FilterOperator.IsNotNull,\r\n ],\r\n select: [FilterOperator.Equal, FilterOperator.NotEqual],\r\n boolean: [FilterOperator.Equal],\r\n date: [\r\n 'between',\r\n FilterOperator.GreaterOrEqual,\r\n FilterOperator.LessOrEqual,\r\n FilterOperator.Equal,\r\n ],\r\n};\r\n\r\nexport function defaultOperatorFor(type: TableColumnFilterType): TableFilterOperator {\r\n return OPERATORS_BY_TYPE[type][0]!;\r\n}\r\n\r\n/** `IsNull`/`IsNotNull` değer almaz — seçilir seçilmez uygulanır, değer kutusu gösterilmez. */\r\nexport function operatorNeedsValue(operator: TableFilterOperator): boolean {\r\n return operator !== FilterOperator.IsNull && operator !== FilterOperator.IsNotNull;\r\n}\r\n\r\n/**\r\n * Chip metninde operatör YAZILMAZ eğer o tip için varsayılan operatörse.\r\n * \"Rol: Yönetici\" okunur; \"Rol eşittir Yönetici\" aynı bilgiyi taşıyıp\r\n * üç kat yer kaplar. Varsayılandan sapma ise BİLGİ taşır ve gösterilir.\r\n */\r\nexport function isDefaultOperator(\r\n operator: TableFilterOperator,\r\n type: TableColumnFilterType,\r\n): boolean {\r\n return operator === defaultOperatorFor(type);\r\n}\r\n\r\n/**\r\n * `2026-09-01T00:00:00+03:00` — YEREL gün sınırı. `toISOString()` KULLANMA:\r\n * UTC'ye kaydırır, \"bugün\" filtresi saat farkı kadar yanlış güne düşer.\r\n * `export` — `dateToIso` (aşağıda) ve testler dışında artık DatePicker/\r\n * Calendar'ın ürettiği `Date` nesnelerini backend'in ISO metnine çeviren TEK\r\n * yer burası (bkz. `table-filter-menu.ts`).\r\n */\r\nexport function localIso(date: Date, endOfDay: boolean): string {\r\n const pad = (n: number, width = 2): string => String(n).padStart(width, '0');\r\n const time = endOfDay ? '23:59:59.999' : '00:00:00.000';\r\n const offsetMinutes = -date.getTimezoneOffset();\r\n const sign = offsetMinutes >= 0 ? '+' : '-';\r\n const absolute = Math.abs(offsetMinutes);\r\n const offset = `${sign}${pad(Math.floor(absolute / 60))}:${pad(absolute % 60)}`;\r\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${time}${offset}`;\r\n}\r\n\r\n/** `Calendar`'ın seçtiği bir günü backend'in beklediği ISO metnine çevirir — `localIso`'nun `Date`-girdili biçimi. */\r\nexport function dateToIso(date: Date, endOfDay: boolean): string {\r\n return localIso(date, endOfDay);\r\n}\r\n\r\n/** ISO metnini (ya da `null`/tanımsız değeri) `Calendar`'ın çalıştığı `Date`'e çevirir — gün sınırına (`startOfDay`) normalize edilir, saat bileşeni Calendar'ı ilgilendirmiyor. */\r\nexport function isoToDate(value: unknown): Date | null {\r\n if (typeof value !== 'string' || !value) return null;\r\n const date = new Date(value);\r\n return Number.isNaN(date.getTime()) ? null : startOfDay(date);\r\n}\r\n\r\nfunction toNode(filter: AppliedFilter): FilterCondition | FilterGroup {\r\n if (filter.operator === 'between') {\r\n const [from, to] = (filter.value as [string | null, string | null] | undefined) ?? [null, null];\r\n const conditions: FilterCondition[] = [];\r\n if (from)\r\n conditions.push({\r\n field: filter.field,\r\n operator: FilterOperator.GreaterOrEqual,\r\n value: from,\r\n });\r\n if (to)\r\n conditions.push({ field: filter.field, operator: FilterOperator.LessOrEqual, value: to });\r\n return { logic: FilterLogic.And, conditions };\r\n }\r\n\r\n if (!operatorNeedsValue(filter.operator)) {\r\n return { field: filter.field, operator: filter.operator };\r\n }\r\n\r\n // Çoklu seçim: TEK değer kaldıysa `In` yerine `Equal` gönderiyoruz — backend\r\n // ikisini de destekliyor ama `Equal` hem sorgu planı hem okunabilirlik için\r\n // daha dürüst.\r\n if (Array.isArray(filter.value)) {\r\n return filter.value.length === 1\r\n ? { field: filter.field, operator: FilterOperator.Equal, value: filter.value[0] }\r\n : { field: filter.field, operator: FilterOperator.In, value: filter.value };\r\n }\r\n\r\n return { field: filter.field, operator: filter.operator, value: filter.value };\r\n}\r\n\r\nfunction isGroup(node: FilterCondition | FilterGroup): node is FilterGroup {\r\n return 'logic' in node;\r\n}\r\n\r\n/**\r\n * Chip listesini backend'in `FilterGroup` ağacına çevirir. Tarih aralığı\r\n * chip'i kendi iç `And` grubunu getirdiği için ağaç derinliği en fazla\r\n * 3 olur — tipik backend sınırları (`MaxDepth = 5`, `MaxNodesPerGroup = 25`)\r\n * içinde rahat rahat kalıyoruz.\r\n */\r\nexport function buildFilterGroup(\r\n filters: readonly AppliedFilter[],\r\n logic: FilterLogic,\r\n): FilterGroup | undefined {\r\n if (filters.length === 0) return undefined;\r\n\r\n const nodes = filters.map(toNode);\r\n const conditions = nodes.filter((node): node is FilterCondition => !isGroup(node));\r\n const groups = nodes.filter(isGroup).filter((group) => (group.conditions?.length ?? 0) > 0);\r\n\r\n if (conditions.length === 0 && groups.length === 0) return undefined;\r\n // Tek bir alt grup varsa gereksiz sarmalayıcı üretme — payload'ı kanonik\r\n // tutuyoruz (backend cache anahtarı ham JSON string'i, bkz. query.model.ts).\r\n if (conditions.length === 0 && groups.length === 1) return groups[0];\r\n\r\n const result: FilterGroup = { logic };\r\n if (conditions.length) result.conditions = conditions;\r\n if (groups.length) result.groups = groups;\r\n return result;\r\n}\r\n","import { CdkOverlayOrigin } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { startOfMonth } from 'date-fns';\r\nimport { FilterOperator } from './query-contract.model';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { Checkbox } from '@mesgflow/ui-kit/checkbox';\r\nimport { cn, MF_TABLE_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Input } from '@mesgflow/ui-kit/input';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { Select, type SelectOption } from '@mesgflow/ui-kit/select';\r\nimport { Calendar } from '@mesgflow/ui-kit/date-picker';\r\nimport { dateRangeForPreset, type DateRangePresetId } from '@mesgflow/ui-kit/date-picker';\r\nimport { operatorLabel as operatorLabelFor, type TableFilterLabels } from './table-filter-labels';\r\nimport {\r\n OPERATORS_BY_TYPE,\r\n dateToIso,\r\n defaultOperatorFor,\r\n isoToDate,\r\n operatorNeedsValue,\r\n type AppliedFilter,\r\n type TableFilterOperator,\r\n} from './table-filter.model';\r\nimport type { TableColumn, TableColumnFilterType } from './table-column.model';\r\n\r\n/**\r\n * Bir filtre kosulunun duzenleyicisi — IKI modda calisir, TEK bilesen:\r\n *\r\n * - **Ekleme** (`initial` = `null`): iki adim. Once alan arama listesi, alan\r\n * secilince ayni overlay icinde deger adimina gecer.\r\n * - **Duzenleme** (`initial` doldurulmus, bkz. `TableFilterBar` — her chip\r\n * kendi overlay'ini bu bilesenle acar): dogrudan deger adimiyla baslar,\r\n * alan sabit kalir (bir filtrenin ALANINI degistirmek olagan disi bir jest\r\n * — kullanici bunun yerine chip'i kaldirip yenisini ekler).\r\n *\r\n * Onay butonu YOK felsefesi tipe gore farkli uygulanir: `select`/`boolean`\r\n * checkbox'i her tik ANINDA `apply` emit eder ve overlay ACIK kalir (coklu\r\n * secim dogal akisi — kullanici birden cok kutuyu art arda isaretler).\r\n * `text`/`date` bir \"taahhut\" ani gerektirir (Enter / preset tik / Uygula) —\r\n * o anda hem `apply` HEM `closed` emit edilir.\r\n */\r\n@Component({\r\n selector: 'mf-table-filter-menu',\r\n imports: [Button, Icon, Checkbox, Input, Popover, Select, Calendar],\r\n host: { class: 'contents' },\r\n templateUrl: './table-filter-menu.html',\r\n})\r\nexport class TableFilterMenu<T> {\r\n readonly columns = input.required<TableColumn<T>[]>();\r\n readonly origin = input.required<CdkOverlayOrigin>();\r\n readonly open = input.required<boolean>();\r\n /** Doluysa duzenleme modu (alan sabit, adim='value'); `null` ise ekleme modu (adim='field'). */\r\n readonly initial = input<AppliedFilter | null>(null);\r\n readonly labels = input<TableFilterLabels>();\r\n\r\n private readonly tableLabels = inject(MF_TABLE_LABELS);\r\n protected readonly effectiveLabels = computed(() => this.labels() ?? this.tableLabels().filter);\r\n\r\n /** Her zaman TAM bir `AppliedFilter` — ekleme modunda taze `id`, duzenlemede `initial.id` korunur. Ust bilesen (`TableFilterBar`) id'ye gore upsert yapar. */\r\n readonly apply = output<AppliedFilter>();\r\n /** Kaldirilan filtrenin id'si — checkbox listesi sifir secime inince (ekleme YA DA duzenleme modunda) emit edilir, ust bilesen o id'yi chip listesinden cikarir. */\r\n readonly remove = output<string>();\r\n readonly closed = output<void>();\r\n\r\n protected readonly step = signal<'field' | 'value'>('field');\r\n protected readonly fieldQuery = signal('');\r\n protected readonly fieldHighlighted = signal(0);\r\n protected readonly selectedField = signal<string | null>(null);\r\n protected readonly operator = signal<TableFilterOperator>(FilterOperator.Equal);\r\n /** `select`/`boolean` icin HER ZAMAN dizi (uzunluk 0/1/N) — tekil/coklu ayrimi yalnizca `toggleSelection`'da, emit aninda yapilir. */\r\n protected readonly selection = signal<unknown[]>([]);\r\n protected readonly textValue = signal('');\r\n protected readonly customDateOpen = signal(false);\r\n protected readonly dateFrom = signal<Date | null>(null);\r\n protected readonly dateTo = signal<Date | null>(null);\r\n /** `'start'` bir sonraki takvim tıklaması `dateFrom`'u YENİDEN başlatır (yeni oturum); `'end'` ikinci ucu belirler. */\r\n protected readonly datePickStage = signal<'start' | 'end'>('start');\r\n /** Fare ikinci ucun üzerinde gezinirken önizleme — bkz. `calendar.ts` `hoverEnd`. */\r\n protected readonly dateHoverEnd = signal<Date | null>(null);\r\n protected readonly calendarMonth = signal(startOfMonth(new Date()));\r\n /**\r\n * Ekleme modunda `initial()` HER ZAMAN `null` kalir — bu yuzden ayni \"ekleme\r\n * oturumu\" icinde art arda checkbox tiklamalari (bkz. `toggleSelection`)\r\n * kendi baslarina birden fazla YENI filtre olustururdu, ayni chip'i\r\n * GUNCELLEMEK yerine (gercek bulgu: \"Yonetici\" + \"Editor\" iki AYRI chip\r\n * olarak beliriyordu). Bu sinyal, bu oturumda uretilen ilk id'yi hatirlayip\r\n * sonraki her `emitApply`'de AYNI id'yi kullanmayi saglar — `reset()`\r\n * (yeni oturum) ve `selectField()` (farkli bir alana gecis) sifirlar.\r\n */\r\n private readonly draftId = signal<string | null>(null);\r\n\r\n private readonly fieldSearchEl = viewChild<ElementRef<HTMLInputElement>>('fieldSearchEl');\r\n\r\n protected readonly filterableColumns = computed(() => this.columns().filter((c) => !!c.filter));\r\n protected readonly filteredColumns = computed(() => {\r\n const q = this.fieldQuery().trim().toLocaleLowerCase('tr');\r\n const all = this.filterableColumns();\r\n if (!q) return all;\r\n return all.filter((c) => c.header.toLocaleLowerCase('tr').includes(q));\r\n });\r\n\r\n constructor() {\r\n // Overlay her acilista taze baslar — duzenleme modunda `initial`'dan,\r\n // ekleme modunda bostan. `open()` bir kez true'ya donduginde okunur;\r\n // sonraki her checkbox/metin degisikligi ARTIK kendi sinyallerinde yasar\r\n // (bu effect'in tekrar tetiklenip taslagi sifirlamamasi icin `open()`\r\n // DISINDA hicbir seye bagimli degil — `untracked` ile korunuyor).\r\n effect(() => {\r\n if (!this.open()) return;\r\n untracked(() => this.reset());\r\n });\r\n }\r\n\r\n private reset(): void {\r\n const init = this.initial();\r\n this.fieldQuery.set('');\r\n this.fieldHighlighted.set(0);\r\n this.customDateOpen.set(false);\r\n this.dateFrom.set(null);\r\n this.dateTo.set(null);\r\n this.datePickStage.set('start');\r\n this.dateHoverEnd.set(null);\r\n this.calendarMonth.set(startOfMonth(new Date()));\r\n\r\n if (!init) {\r\n this.step.set('field');\r\n this.selectedField.set(null);\r\n this.selection.set([]);\r\n this.textValue.set('');\r\n this.draftId.set(null);\r\n queueMicrotask(() => this.fieldSearchEl()?.nativeElement.focus());\r\n return;\r\n }\r\n\r\n this.step.set('value');\r\n this.selectedField.set(init.field);\r\n this.operator.set(init.operator);\r\n const type = this.filterTypeFor(init.field);\r\n if (type === 'select' || type === 'boolean') {\r\n this.selection.set(\r\n Array.isArray(init.value)\r\n ? init.value\r\n : init.value === null || init.value === undefined\r\n ? []\r\n : [init.value],\r\n );\r\n } else if (type === 'date' && init.operator === 'between') {\r\n const [from, to] = (init.value as [string | null, string | null] | undefined) ?? [null, null];\r\n const fromDate = isoToDate(from);\r\n const toDate = isoToDate(to);\r\n this.dateFrom.set(fromDate);\r\n this.dateTo.set(toDate);\r\n this.datePickStage.set(fromDate && !toDate ? 'end' : 'start');\r\n this.calendarMonth.set(startOfMonth(fromDate ?? new Date()));\r\n this.customDateOpen.set(true);\r\n } else {\r\n this.textValue.set(typeof init.value === 'string' ? init.value : '');\r\n }\r\n }\r\n\r\n private columnFor(field: string): TableColumn<T> | undefined {\r\n return this.columns().find((c) => c.field === field);\r\n }\r\n\r\n protected filterTypeFor(field: string): TableColumnFilterType {\r\n return this.columnFor(field)?.filter?.type ?? 'text';\r\n }\r\n\r\n protected fieldHeader(field: string): string {\r\n return this.columnFor(field)?.header ?? field;\r\n }\r\n\r\n /** `cn()` (twMerge) — base `bg-transparent` ve vurgulu `bg-surface-alt` AYNI class dizesinde çakışırsa (düz string birleştirmede olduğu gibi) hangisinin kazanacağı Tailwind'in derleme sırasına kalır; twMerge çakışan `bg-*` çiftini güvenle çözer. */\r\n protected fieldOptionClasses(index: number): string {\r\n return cn(\r\n 'flex w-full cursor-pointer appearance-none items-center justify-between gap-2 border-0 bg-transparent rounded-sm px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis',\r\n index === this.fieldHighlighted() && 'bg-surface-alt',\r\n );\r\n }\r\n\r\n protected operatorOptions(): SelectOption<TableFilterOperator>[] {\r\n const field = this.selectedField();\r\n if (!field) return [];\r\n const column = this.columnFor(field);\r\n const type = this.filterTypeFor(field);\r\n const operators = column?.filter?.operators ?? OPERATORS_BY_TYPE[type];\r\n return operators\r\n .filter((op) => op !== 'between')\r\n .map((op) => ({ label: operatorLabelFor(this.effectiveLabels(), op), value: op }));\r\n }\r\n\r\n protected selectOptions(): SelectOption<unknown>[] {\r\n const field = this.selectedField();\r\n if (!field) return [];\r\n return (this.columnFor(field)?.filter?.options ?? []).map((o) => ({\r\n label: o.label,\r\n value: o.value,\r\n }));\r\n }\r\n\r\n protected isSelected(value: unknown): boolean {\r\n return this.selection().includes(value);\r\n }\r\n\r\n /** Template'te magic-number karsilastirmasi (`operator() !== 10`) yerine — `IsNull`/`IsNotNull` deger kutusu gostermez. */\r\n protected currentOperatorNeedsValue(): boolean {\r\n return operatorNeedsValue(this.operator());\r\n }\r\n\r\n protected onFieldQueryKeydown(event: KeyboardEvent): void {\r\n const items = this.filteredColumns();\r\n if (event.key === 'ArrowDown') {\r\n event.preventDefault();\r\n this.fieldHighlighted.update((i) => Math.min(items.length - 1, i + 1));\r\n } else if (event.key === 'ArrowUp') {\r\n event.preventDefault();\r\n this.fieldHighlighted.update((i) => Math.max(0, i - 1));\r\n } else if (event.key === 'Enter') {\r\n event.preventDefault();\r\n const item = items[this.fieldHighlighted()];\r\n if (item) this.selectField(item.field);\r\n } else if (event.key === 'Escape') {\r\n event.preventDefault();\r\n this.closed.emit();\r\n }\r\n }\r\n\r\n protected selectField(field: string): void {\r\n this.selectedField.set(field);\r\n const type = this.filterTypeFor(field);\r\n this.operator.set(defaultOperatorFor(type));\r\n this.selection.set([]);\r\n this.textValue.set('');\r\n // Farkli bir alana gecis = yeni bir filtre taslagi — onceki alanda\r\n // uretilmis olabilecek id'yi TASIMA (bkz. draftId yorumu).\r\n this.draftId.set(null);\r\n this.step.set('value');\r\n }\r\n\r\n protected backToField(): void {\r\n this.step.set('field');\r\n this.fieldQuery.set('');\r\n this.fieldHighlighted.set(0);\r\n queueMicrotask(() => this.fieldSearchEl()?.nativeElement.focus());\r\n }\r\n\r\n /** `select`/`boolean` — her tik aninda uygular, overlay ACIK kalir (bkz. sinif yorumu). */\r\n protected toggleSelection(value: unknown): void {\r\n const field = this.selectedField();\r\n if (!field) return;\r\n const current = this.selection();\r\n const next = current.includes(value) ? current.filter((v) => v !== value) : [...current, value];\r\n this.selection.set(next);\r\n\r\n if (next.length === 0) {\r\n const id = this.initial()?.id ?? this.draftId();\r\n if (id) this.remove.emit(id);\r\n this.draftId.set(null);\r\n return;\r\n }\r\n const operator = next.length === 1 ? FilterOperator.Equal : FilterOperator.In;\r\n const value2 = next.length === 1 ? next[0] : next;\r\n this.emitApply(field, operator, value2, false);\r\n }\r\n\r\n protected onOperatorChange(operator: TableFilterOperator | null): void {\r\n if (operator === null) return;\r\n this.operator.set(operator);\r\n if (!operatorNeedsValue(operator)) this.commitText();\r\n }\r\n\r\n protected onTextInput(raw: string): void {\r\n this.textValue.set(raw);\r\n }\r\n\r\n protected commitText(): void {\r\n const field = this.selectedField();\r\n if (!field) return;\r\n const operator = this.operator();\r\n if (operatorNeedsValue(operator) && !this.textValue().trim()) return;\r\n this.emitApply(\r\n field,\r\n operator,\r\n operatorNeedsValue(operator) ? this.textValue().trim() : undefined,\r\n true,\r\n );\r\n }\r\n\r\n protected applyPreset(preset: DateRangePresetId): void {\r\n const field = this.selectedField();\r\n if (!field) return;\r\n const range = dateRangeForPreset(preset);\r\n this.emitApply(\r\n field,\r\n 'between',\r\n [dateToIso(range.start!, false), dateToIso(range.end!, true)],\r\n true,\r\n );\r\n }\r\n\r\n protected openCustomRange(): void {\r\n this.customDateOpen.set(true);\r\n }\r\n\r\n /** İki tıklamalı aralık seçimi — emsal: `date-range-picker.ts` `onDayPick` (aynı mantık, burada tek gömülü takvim). */\r\n protected onCalendarDayPick(day: Date): void {\r\n if (this.datePickStage() === 'start' || (this.dateFrom() && this.dateTo())) {\r\n this.dateFrom.set(day);\r\n this.dateTo.set(null);\r\n this.datePickStage.set('end');\r\n this.dateHoverEnd.set(null);\r\n return;\r\n }\r\n\r\n const start = this.dateFrom()!;\r\n if (day < start) {\r\n this.dateFrom.set(day);\r\n this.dateTo.set(start);\r\n } else {\r\n this.dateTo.set(day);\r\n }\r\n this.datePickStage.set('start');\r\n this.dateHoverEnd.set(null);\r\n }\r\n\r\n protected onCalendarDayHover(day: Date | null): void {\r\n this.dateHoverEnd.set(day);\r\n }\r\n\r\n protected commitCustomRange(): void {\r\n const field = this.selectedField();\r\n if (!field) return;\r\n const from = this.dateFrom();\r\n const to = this.dateTo();\r\n if (!from && !to) return;\r\n this.emitApply(\r\n field,\r\n 'between',\r\n [from ? dateToIso(from, false) : null, to ? dateToIso(to, true) : null],\r\n true,\r\n );\r\n }\r\n\r\n private emitApply(\r\n field: string,\r\n operator: TableFilterOperator,\r\n value: unknown,\r\n closeAfter: boolean,\r\n ): void {\r\n const id = this.initial()?.id ?? this.draftId() ?? crypto.randomUUID();\r\n if (!this.initial() && !this.draftId()) this.draftId.set(id);\r\n this.apply.emit({ id, field, operator, value });\r\n if (closeAfter) this.closed.emit();\r\n }\r\n\r\n protected close(): void {\r\n this.closed.emit();\r\n }\r\n}\r\n","<mf-popover\r\n [origin]=\"origin()\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"md\"\r\n panelClass=\"w-72\"\r\n (closed)=\"close()\"\r\n>\r\n @if (step() === 'field') {\r\n <div class=\"relative mb-1.5\">\r\n <span\r\n mfIcon\r\n [size]=\"16\"\r\n class=\"pointer-events-none absolute top-1/2 start-2 -translate-y-1/2 text-fg-subtle\"\r\n >search</span\r\n >\r\n <input\r\n mfInput\r\n #fieldSearchEl\r\n type=\"text\"\r\n class=\"ps-7 text-sm\"\r\n [placeholder]=\"effectiveLabels().searchField\"\r\n [value]=\"fieldQuery()\"\r\n (input)=\"fieldQuery.set($any($event.target).value)\"\r\n (keydown)=\"onFieldQueryKeydown($event)\"\r\n />\r\n </div>\r\n @if (filteredColumns().length === 0) {\r\n <p class=\"px-1.5 py-2 text-sm text-fg-subtle\">{{ effectiveLabels().noField }}</p>\r\n } @else {\r\n <ul class=\"flex max-h-64 list-none flex-col gap-0.5 overflow-auto\">\r\n @for (column of filteredColumns(); track column.field; let i = $index) {\r\n <li>\r\n <button\r\n type=\"button\"\r\n [class]=\"fieldOptionClasses(i)\"\r\n (mouseenter)=\"fieldHighlighted.set(i)\"\r\n (click)=\"selectField(column.field)\"\r\n >\r\n {{ column.header }}\r\n </button>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n } @else {\r\n <div class=\"mb-1.5 flex items-center gap-1 px-0.5\">\r\n @if (!initial()) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().back\"\r\n (click)=\"backToField()\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">arrow_back</span>\r\n </button>\r\n }\r\n <span class=\"text-sm font-medium text-fg\">{{ fieldHeader(selectedField() ?? '') }}</span>\r\n </div>\r\n\r\n @switch (filterTypeFor(selectedField() ?? '')) {\r\n @case ('select') {\r\n <ul class=\"flex max-h-64 list-none flex-col gap-0.5 overflow-auto\">\r\n @for (option of selectOptions(); track option.label) {\r\n <li>\r\n <label\r\n class=\"flex cursor-pointer items-center gap-2 rounded-sm px-2.5 py-1.5 text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n mfCheckbox\r\n [checked]=\"isSelected(option.value)\"\r\n (change)=\"toggleSelection(option.value)\"\r\n />\r\n <span class=\"truncate\">{{ option.label }}</span>\r\n </label>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n @case ('boolean') {\r\n <ul class=\"flex list-none flex-col gap-0.5\">\r\n @for (option of selectOptions(); track option.label) {\r\n <li>\r\n <label\r\n class=\"flex cursor-pointer items-center gap-2 rounded-sm px-2.5 py-1.5 text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n mfCheckbox\r\n [checked]=\"isSelected(option.value)\"\r\n (change)=\"toggleSelection(option.value)\"\r\n />\r\n <span class=\"truncate\">{{ option.label }}</span>\r\n </label>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n @case ('date') {\r\n <div class=\"flex flex-col gap-1\">\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent rounded-sm px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n (click)=\"applyPreset('today')\"\r\n >\r\n {{ effectiveLabels().dateToday }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent rounded-sm px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n (click)=\"applyPreset('last7')\"\r\n >\r\n {{ effectiveLabels().dateLast7 }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent rounded-sm px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n (click)=\"applyPreset('last30')\"\r\n >\r\n {{ effectiveLabels().dateLast30 }}\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent rounded-sm px-2.5 py-1.5 text-start text-sm text-fg-muted transition-colors duration-fast ease-emphasis hover:bg-surface-alt\"\r\n (click)=\"applyPreset('thisMonth')\"\r\n >\r\n {{ effectiveLabels().dateThisMonth }}\r\n </button>\r\n @if (!customDateOpen()) {\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent rounded-sm px-2.5 py-1.5 text-start text-sm text-accent transition-colors duration-fast ease-emphasis hover:bg-accent/5\"\r\n (click)=\"openCustomRange()\"\r\n >\r\n {{ effectiveLabels().dateCustom }}\r\n </button>\r\n } @else {\r\n <div class=\"mt-1 flex flex-col gap-2 border-t border-border pt-2\">\r\n <mf-calendar\r\n mode=\"range\"\r\n [(month)]=\"calendarMonth\"\r\n [rangeStart]=\"dateFrom()\"\r\n [rangeEnd]=\"dateTo()\"\r\n [hoverEnd]=\"dateHoverEnd()\"\r\n (dayPick)=\"onCalendarDayPick($event)\"\r\n (dayHover)=\"onCalendarDayHover($event)\"\r\n />\r\n <div class=\"flex justify-end\">\r\n <button\r\n mfButton\r\n tone=\"primary\"\r\n appearance=\"filled\"\r\n size=\"sm\"\r\n type=\"button\"\r\n [disabled]=\"!dateFrom()\"\r\n (click)=\"commitCustomRange()\"\r\n >\r\n {{ effectiveLabels().apply }}\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n @default {\r\n <div class=\"flex flex-col gap-2\">\r\n <mf-select\r\n [options]=\"operatorOptions()\"\r\n [value]=\"operator()\"\r\n (valueChange)=\"onOperatorChange($event)\"\r\n size=\"sm\"\r\n [ariaLabel]=\"effectiveLabels().operator\"\r\n />\r\n @if (currentOperatorNeedsValue()) {\r\n <input\r\n mfInput\r\n type=\"text\"\r\n class=\"text-sm\"\r\n [attr.aria-label]=\"effectiveLabels().value\"\r\n [placeholder]=\"effectiveLabels().value\"\r\n [value]=\"textValue()\"\r\n (input)=\"onTextInput($any($event.target).value)\"\r\n (keydown.enter)=\"commitText()\"\r\n />\r\n <div class=\"flex items-center justify-between\">\r\n <span class=\"text-xs text-fg-subtle\">{{ effectiveLabels().enterHint }}</span>\r\n <button\r\n mfButton\r\n tone=\"primary\"\r\n appearance=\"filled\"\r\n size=\"sm\"\r\n type=\"button\"\r\n (click)=\"commitText()\"\r\n >\r\n {{ effectiveLabels().apply }}\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n }\r\n</mf-popover>\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport { Component, computed, inject, input, output, signal } from '@angular/core';\r\nimport { FilterLogic } from './query-contract.model';\r\nimport { Chip } from '@mesgflow/ui-kit/chip';\r\nimport { MF_TABLE_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Select, type SelectOption } from '@mesgflow/ui-kit/select';\r\nimport { TableFilterMenu } from './table-filter-menu';\r\nimport { operatorLabel, type TableFilterLabels } from './table-filter-labels';\r\nimport { isDefaultOperator, type AppliedFilter } from './table-filter.model';\r\nimport type { TableColumn, TableColumnFilterType } from './table-column.model';\r\n\r\n/**\r\n * Toolbar'ın ALTINDA kalıcı bir satır — uygulanmış filtreler artık ikonun\r\n * köşesindeki bir sayı rozetinde değil, doğrudan burada, birer chip olarak\r\n * görünür (bkz. plan — kullanıcının onayladığı Linear/Attio dili). Chip'e\r\n * tıklamak değerini düzenler, `×` anında kaldırır. `TableFilterMenu` HEM\r\n * \"+ Filtre\" tetikleyicisinde (ekleme, `initial=null`) HEM her chip'te\r\n * (düzenleme, `initial=filter`) aynı bileşen — bkz. o dosyanın başındaki not.\r\n */\r\n@Component({\r\n selector: 'mf-table-filter-bar',\r\n host: { class: 'block' },\r\n imports: [OverlayModule, Chip, Icon, Select, TableFilterMenu],\r\n templateUrl: './table-filter-bar.html',\r\n})\r\nexport class TableFilterBar<T> {\r\n readonly columns = input.required<TableColumn<T>[]>();\r\n readonly filters = input.required<readonly AppliedFilter[]>();\r\n readonly logic = input.required<FilterLogic>();\r\n readonly labels = input<TableFilterLabels>();\r\n\r\n private readonly tableLabels = inject(MF_TABLE_LABELS);\r\n protected readonly effectiveLabels = computed(() => this.labels() ?? this.tableLabels().filter);\r\n\r\n readonly filtersChange = output<AppliedFilter[]>();\r\n readonly logicChange = output<FilterLogic>();\r\n\r\n protected readonly addOpen = signal(false);\r\n protected readonly editingId = signal<string | null>(null);\r\n\r\n protected readonly FilterLogic = FilterLogic;\r\n protected readonly filterableColumns = computed(() => this.columns().filter((c) => !!c.filter));\r\n\r\n protected readonly logicOptions = computed<SelectOption<FilterLogic>[]>(() => [\r\n { label: this.effectiveLabels().and, value: FilterLogic.And },\r\n { label: this.effectiveLabels().or, value: FilterLogic.Or },\r\n ]);\r\n\r\n private columnFor(field: string): TableColumn<T> | undefined {\r\n return this.columns().find((c) => c.field === field);\r\n }\r\n\r\n protected fieldHeader(field: string): string {\r\n return this.columnFor(field)?.header ?? field;\r\n }\r\n\r\n private filterTypeFor(field: string): TableColumnFilterType {\r\n return this.columnFor(field)?.filter?.type ?? 'text';\r\n }\r\n\r\n /**\r\n * Chip metni: \"Alan: değer\" — operatör SADECE o tip için varsayılan\r\n * değilse eklenir (\"Rol: Yönetici\" okunur, \"Rol eşittir Yönetici\" aynı\r\n * bilgiyi taşıyıp gürültü ekler). Çoklu seçimde 3'ten fazla değer\r\n * \"A, B +2\" şeklinde kısaltılır — chip'in kendisi bir özet, tam liste\r\n * düzenleyicide zaten görünür.\r\n */\r\n protected chipText(filter: AppliedFilter): string {\r\n const header = this.fieldHeader(filter.field);\r\n const type = this.filterTypeFor(filter.field);\r\n const value = this.displayValue(filter, type);\r\n if (isDefaultOperator(filter.operator, type)) return `${header}: ${value}`;\r\n return `${header} ${operatorLabel(this.effectiveLabels(), filter.operator)} ${value}`;\r\n }\r\n\r\n private displayValue(filter: AppliedFilter, type: TableColumnFilterType): string {\r\n if (filter.operator === 'between') {\r\n const [from, to] = (filter.value as [string | null, string | null] | undefined) ?? [\r\n null,\r\n null,\r\n ];\r\n const f = from ? from.slice(0, 10) : '…';\r\n const t = to ? to.slice(0, 10) : '…';\r\n return `${f} – ${t}`;\r\n }\r\n if (filter.value === null || filter.value === undefined) return '';\r\n\r\n const optionLabel = (raw: unknown): string => {\r\n if (type !== 'select' && type !== 'boolean') return String(raw);\r\n return (\r\n this.columnFor(filter.field)?.filter?.options?.find((o) => o.value === raw)?.label ??\r\n String(raw)\r\n );\r\n };\r\n\r\n if (Array.isArray(filter.value)) {\r\n const labels = filter.value.map(optionLabel);\r\n if (labels.length <= 2) return labels.join(', ');\r\n return `${labels.slice(0, 2).join(', ')} +${labels.length - 2}`;\r\n }\r\n return optionLabel(filter.value);\r\n }\r\n\r\n protected onMenuApply(applied: AppliedFilter): void {\r\n const current = this.filters();\r\n const index = current.findIndex((f) => f.id === applied.id);\r\n const next =\r\n index === -1 ? [...current, applied] : current.map((f, i) => (i === index ? applied : f));\r\n this.filtersChange.emit(next);\r\n }\r\n\r\n protected removeFilter(id: string): void {\r\n this.filtersChange.emit(this.filters().filter((f) => f.id !== id));\r\n if (this.editingId() === id) this.editingId.set(null);\r\n }\r\n\r\n protected onLogicChange(logic: FilterLogic | null): void {\r\n if (logic === null) return;\r\n this.logicChange.emit(logic);\r\n }\r\n\r\n protected clearAll(): void {\r\n this.filtersChange.emit([]);\r\n this.editingId.set(null);\r\n }\r\n}\r\n","<div class=\"flex flex-wrap items-center gap-1.5 border-b border-border bg-surface-sunken px-4 py-2\">\r\n @if (filters().length > 1) {\r\n <mf-select\r\n [options]=\"logicOptions()\"\r\n [value]=\"logic()\"\r\n (valueChange)=\"onLogicChange($event)\"\r\n size=\"sm\"\r\n class=\"w-20\"\r\n />\r\n }\r\n\r\n @for (filter of filters(); track filter.id) {\r\n <mf-chip\r\n [removable]=\"true\"\r\n [removeLabel]=\"effectiveLabels().remove\"\r\n (removed)=\"removeFilter(filter.id)\"\r\n >\r\n <button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #chipOrigin=\"cdkOverlayOrigin\"\r\n class=\"max-w-[16rem] cursor-pointer appearance-none truncate border-0 bg-transparent p-0 text-start transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"editingId.set(filter.id)\"\r\n >\r\n {{ chipText(filter) }}\r\n </button>\r\n </mf-chip>\r\n <mf-table-filter-menu\r\n [columns]=\"columns()\"\r\n [origin]=\"chipOrigin\"\r\n [open]=\"editingId() === filter.id\"\r\n [initial]=\"filter\"\r\n [labels]=\"effectiveLabels()\"\r\n (apply)=\"onMenuApply($event)\"\r\n (remove)=\"removeFilter($event)\"\r\n (closed)=\"editingId.set(null)\"\r\n />\r\n }\r\n\r\n <button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #addOrigin=\"cdkOverlayOrigin\"\r\n class=\"inline-flex cursor-pointer appearance-none items-center gap-1 rounded-full border border-dashed border-border bg-transparent py-1 pe-2.5 ps-2 text-xs font-medium text-fg-muted transition-colors duration-fast ease-emphasis hover:border-border-strong hover:text-fg\"\r\n (click)=\"addOpen.set(!addOpen())\"\r\n >\r\n <span mfIcon [size]=\"14\">add</span>\r\n {{ effectiveLabels().addFilter }}\r\n </button>\r\n <mf-table-filter-menu\r\n [columns]=\"columns()\"\r\n [origin]=\"addOrigin\"\r\n [open]=\"addOpen()\"\r\n [labels]=\"effectiveLabels()\"\r\n (apply)=\"onMenuApply($event)\"\r\n (remove)=\"removeFilter($event)\"\r\n (closed)=\"addOpen.set(false)\"\r\n />\r\n\r\n @if (filters().length > 0) {\r\n <button\r\n type=\"button\"\r\n class=\"ms-auto appearance-none border-0 bg-transparent p-0 text-xs font-medium text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"clearAll()\"\r\n >\r\n {{ effectiveLabels().clearAll }}\r\n </button>\r\n }\r\n</div>\r\n","import { CdkOverlayOrigin } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n computed,\r\n ElementRef,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { MF_TABLE_LABELS, type MfTablePaginationLabels } from '@mesgflow/ui-kit/core';\r\nimport { Input } from '@mesgflow/ui-kit/input';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\n\r\n/**\r\n * Sayfalamadaki tıklanabilir \"…\" için küçük bir sayfaya-git popover'ı —\r\n * panel iskeleti `Popover`'a devredildi (bkz. plan Faz 1c) — kendi\r\n * `[origin]`/`[open]` input'ları, `(apply)`/`(closed)` output'ları aynı\r\n * kaldı, sadece CDK connected overlay/backdrop/ESC/animasyon artık\r\n * `Popover`'ın işi. Onay YALNIZCA submit'te (Enter / Git) — her tuş\r\n * vuruşunda backend'e istek atmaz (bkz. plan, rate limit notu).\r\n */\r\n@Component({\r\n selector: 'mf-table-page-jump',\r\n imports: [Button, Input, Popover],\r\n host: { class: 'contents' },\r\n templateUrl: './table-page-jump.html',\r\n})\r\nexport class TablePageJump {\r\n readonly origin = input.required<CdkOverlayOrigin>();\r\n readonly open = input.required<boolean>();\r\n readonly totalPages = input.required<number>();\r\n readonly labels = input<MfTablePaginationLabels>();\r\n\r\n private readonly tableLabels = inject(MF_TABLE_LABELS);\r\n protected readonly effectiveLabels = computed(\r\n () => this.labels() ?? this.tableLabels().pagination,\r\n );\r\n\r\n readonly apply = output<number>();\r\n readonly closed = output<void>();\r\n\r\n protected readonly value = signal('');\r\n\r\n private readonly valueEl = viewChild<ElementRef<HTMLInputElement>>('valueEl');\r\n\r\n constructor() {\r\n // Overlay her açılışta taze başlar — bkz. table-filter-menu.ts'teki aynı desen.\r\n effect(() => {\r\n if (!this.open()) return;\r\n untracked(() => {\r\n this.value.set('');\r\n queueMicrotask(() => this.valueEl()?.nativeElement.focus());\r\n });\r\n });\r\n }\r\n\r\n protected onValueInput(raw: string): void {\r\n this.value.set(raw);\r\n }\r\n\r\n protected commit(): void {\r\n const parsed = Number(this.value());\r\n if (!Number.isInteger(parsed) || parsed < 1 || parsed > this.totalPages()) return;\r\n this.apply.emit(parsed);\r\n }\r\n\r\n protected close(): void {\r\n this.closed.emit();\r\n }\r\n}\r\n","<mf-popover\r\n [origin]=\"origin()\"\r\n [open]=\"open()\"\r\n placement=\"bottom\"\r\n padding=\"md\"\r\n panelClass=\"w-44\"\r\n (closed)=\"close()\"\r\n>\r\n <p class=\"mb-1.5 px-0.5 text-eyebrow text-fg-subtle\">{{ effectiveLabels().jumpToPage }}</p>\r\n <div class=\"flex items-center gap-1.5\">\r\n <input\r\n mfInput\r\n #valueEl\r\n type=\"number\"\r\n class=\"text-sm\"\r\n min=\"1\"\r\n [max]=\"totalPages()\"\r\n [placeholder]=\"'1–' + totalPages()\"\r\n [value]=\"value()\"\r\n (input)=\"onValueInput($any($event.target).value)\"\r\n (keydown.enter)=\"commit()\"\r\n />\r\n <button mfButton tone=\"primary\" appearance=\"filled\" size=\"sm\" type=\"button\" (click)=\"commit()\">\r\n {{ effectiveLabels().go }}\r\n </button>\r\n </div>\r\n</mf-popover>\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n ElementRef,\r\n afterRenderEffect,\r\n computed,\r\n inject,\r\n input,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Select, type SelectOption } from '@mesgflow/ui-kit/select';\r\nimport { cn, MF_TABLE_LABELS, type MfTablePaginationLabels } from '@mesgflow/ui-kit/core';\r\nimport { TablePageJump } from './table-page-jump';\r\n\r\n/** GitHub PR listesi tarzı akıllı elips: toplam ≤7 sayfa tümü gösterilir, aksi halde 1, 2, current±1, son-1, son sabit + boşluklar elipsli. */\r\nfunction buildPageList(current: number, total: number): (number | 'ellipsis')[] {\r\n if (total <= 7) return Array.from({ length: total }, (_, i) => i + 1);\r\n\r\n const keep = new Set<number>([1, 2, total - 1, total, current - 1, current, current + 1]);\r\n const sorted = [...keep].filter((p) => p >= 1 && p <= total).sort((a, b) => a - b);\r\n\r\n const result: (number | 'ellipsis')[] = [];\r\n let previous = 0;\r\n for (const page of sorted) {\r\n if (previous && page - previous > 1) result.push('ellipsis');\r\n result.push(page);\r\n previous = page;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Her hücre AYNI dili konuşuyor: kendi `rounded-md` hit alanına sahip,\r\n * tek bir `focus-visible` mekanizmalı, bağımsız bir buton (bkz.\r\n * projects/ui-kit/README.md \"Focus — tek mekanizma\"). `h-9 w-9` mobilde dört okun\r\n * da 36px dokunma hedefi olmasını sağlıyor; `sm:h-8 sm:min-w-8` masaüstünde\r\n * yandaki `mf-select size=\"sm\"` ile hizalanıyor (`select.variants.ts`).\r\n */\r\nconst CELL_BASE =\r\n 'relative flex h-9 w-9 sm:h-8 sm:min-w-8 shrink-0 appearance-none items-center justify-center rounded-md border-0 bg-transparent px-2 ' +\r\n 'text-sm font-medium tabular-nums transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\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:opacity-50 disabled:active:scale-100';\r\n\r\n/**\r\n * Table'ın footer'ı — sol \"X–Y / toplam Z\" özet + sayfa-boyutu `Select`i,\r\n * sağda AYRIK/havadar bir gezinme grubu: ⏮ ‹ · numaralar · › ⏭. Eskiden\r\n * tek kenarlıklı bir segment grubuydu (bkz. git geçmişi) — artık dış çerçeve\r\n * yok, her hücre kendi bağımsız butonu. Aktif sayfa dolu yeşil blok DEĞİL,\r\n * `surface-alt` yüzey + alt kenarda **ray** — bu tasarım sisteminin\r\n * \"buradasın\" motifi (sidebar aktif öğe, aktif sekme, seçili tablo satırı ile\r\n * aynı dil).\r\n */\r\n@Component({\r\n selector: 'mf-table-pagination',\r\n host: { class: 'block' },\r\n imports: [Select, Icon, OverlayModule, TablePageJump],\r\n templateUrl: './table-pagination.html',\r\n})\r\nexport class TablePagination {\r\n readonly page = input.required<number>();\r\n readonly pageSize = input.required<number>();\r\n readonly total = input.required<number>();\r\n readonly pageSizeOptions = input<number[]>([10, 20, 50, 100]);\r\n readonly labels = input<MfTablePaginationLabels>();\r\n\r\n private readonly tableLabels = inject(MF_TABLE_LABELS);\r\n protected readonly effectiveLabels = computed(\r\n () => this.labels() ?? this.tableLabels().pagination,\r\n );\r\n\r\n readonly pageChange = output<number>();\r\n readonly pageSizeChange = output<number>();\r\n\r\n protected readonly totalPages = computed(() =>\r\n Math.max(1, Math.ceil(this.total() / this.pageSize())),\r\n );\r\n protected readonly rangeStart = computed(() =>\r\n this.total() === 0 ? 0 : (this.page() - 1) * this.pageSize() + 1,\r\n );\r\n protected readonly rangeEnd = computed(() =>\r\n Math.min(this.page() * this.pageSize(), this.total()),\r\n );\r\n protected readonly pageItems = computed(() => buildPageList(this.page(), this.totalPages()));\r\n protected readonly pageSizeSelectOptions = computed<SelectOption<number>[]>(() =>\r\n this.pageSizeOptions().map((size) => ({ label: String(size), value: size })),\r\n );\r\n\r\n /** Aynı anda iki \"…\" olabilir (baştaki + sondaki) — açık olanın loop index'i, `null` = hiçbiri açık değil. */\r\n protected readonly jumpOpenIndex = signal<number | null>(null);\r\n\r\n private readonly navEl = viewChild<ElementRef<HTMLElement>>('nav');\r\n /** Signal DEĞİL — sadece odağın şu an `<nav>` içinde olup olmadığını izleyen düz bir bayrak (bkz. constructor'daki geri-odaklama notu). */\r\n private focusWithinNav = false;\r\n\r\n constructor() {\r\n /*\r\n * Ok tuşlarıyla ardışık gezinme: sayfa değişince o anki `[aria-current]`\r\n * butonu DOM'dan kalkabiliyor (pencere current±1'e göre kayıyor), odak\r\n * `<body>`'ye düşüyor ve bir sonraki ok tuşu artık `<nav>`'a ulaşmıyordu\r\n * (gerçek bulgu). Odak `<nav>` içindeyken her sayfa değişiminden sonra\r\n * yeni aktif sayfa butonuna (mobilde numaralar gizliyse `<nav>`'ın\r\n * kendisine) geri veriliyor.\r\n */\r\n afterRenderEffect(() => {\r\n this.page();\r\n if (!this.focusWithinNav) return;\r\n const nav = this.navEl()?.nativeElement;\r\n if (!nav || nav.contains(document.activeElement)) return;\r\n const activeBtn = nav.querySelector<HTMLButtonElement>('[aria-current=\"page\"]');\r\n (activeBtn ?? nav).focus();\r\n });\r\n }\r\n\r\n protected goTo(page: number): void {\r\n if (page < 1 || page > this.totalPages() || page === this.page()) return;\r\n this.pageChange.emit(page);\r\n }\r\n\r\n protected onPageSizeChange(size: number | null): void {\r\n if (size === null) return;\r\n this.pageSizeChange.emit(size);\r\n }\r\n\r\n protected cellClasses(active: boolean): string {\r\n return cn(\r\n CELL_BASE,\r\n active\r\n ? 'bg-surface-alt text-fg font-semibold'\r\n : 'text-fg-muted hover:bg-surface-alt hover:text-fg',\r\n // Ray: aktif sayfanın alt kenarında 2px dolu marka rengi — dolu yeşil\r\n // BLOK değil (bu sistemin \"buradasın\" motifi, bkz. sınıf yorumu).\r\n // `inset-x-2` (8px), hücrenin `rounded-md` (8px) köşe yarıçapını tam\r\n // kurtarıyor — ray düz kenarda kalıyor.\r\n active &&\r\n \"after:absolute after:inset-x-2 after:bottom-0 after:h-0.5 after:rounded-full after:bg-accent-fill after:content-['']\",\r\n );\r\n }\r\n\r\n protected onNavKeydown(event: KeyboardEvent): void {\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.goTo(this.page() - 1);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.goTo(this.page() + 1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.goTo(1);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.goTo(this.totalPages());\r\n break;\r\n }\r\n }\r\n\r\n protected onNavFocusIn(): void {\r\n this.focusWithinNav = true;\r\n }\r\n\r\n protected onNavFocusOut(): void {\r\n this.focusWithinNav = false;\r\n }\r\n\r\n protected toggleJump(index: number): void {\r\n this.jumpOpenIndex.update((current) => (current === index ? null : index));\r\n }\r\n\r\n protected onJumpApply(page: number): void {\r\n this.jumpOpenIndex.set(null);\r\n this.goTo(page);\r\n }\r\n}\r\n","<div class=\"flex flex-wrap items-center justify-between gap-3 px-4 py-3\">\r\n <div class=\"flex items-center gap-2 text-sm text-fg-subtle\">\r\n <span class=\"tabular-nums\"\r\n >{{ rangeStart() }}–{{ rangeEnd() }} / {{ total() }} {{ effectiveLabels().records }}</span\r\n >\r\n <span class=\"text-fg-subtle\">{{ effectiveLabels().perPage }}</span>\r\n <mf-select\r\n [options]=\"pageSizeSelectOptions()\"\r\n [value]=\"pageSize()\"\r\n (valueChange)=\"onPageSizeChange($event)\"\r\n size=\"sm\"\r\n [ariaLabel]=\"effectiveLabels().pageSizeAriaLabel\"\r\n class=\"w-20\"\r\n />\r\n </div>\r\n\r\n <nav\r\n #nav\r\n tabindex=\"-1\"\r\n class=\"flex shrink-0 flex-nowrap items-center gap-1.5 outline-none\"\r\n [attr.aria-label]=\"effectiveLabels().navAriaLabel\"\r\n (keydown)=\"onNavKeydown($event)\"\r\n (focusin)=\"onNavFocusIn()\"\r\n (focusout)=\"onNavFocusOut()\"\r\n >\r\n <div class=\"flex items-center gap-0.5\">\r\n <button\r\n type=\"button\"\r\n [class]=\"cellClasses(false)\"\r\n [disabled]=\"page() === 1\"\r\n [attr.aria-label]=\"effectiveLabels().first\"\r\n (click)=\"goTo(1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">first_page</span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n [class]=\"cellClasses(false)\"\r\n [disabled]=\"page() === 1\"\r\n [attr.aria-label]=\"effectiveLabels().previous\"\r\n (click)=\"goTo(page() - 1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_left</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"hidden items-center gap-0.5 sm:flex\">\r\n @for (item of pageItems(); track $index) {\r\n @if (item === 'ellipsis') {\r\n <button\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #jumpOrigin=\"cdkOverlayOrigin\"\r\n [class]=\"cellClasses(false)\"\r\n [attr.aria-label]=\"effectiveLabels().jumpToPage\"\r\n (click)=\"toggleJump($index)\"\r\n >\r\n …\r\n </button>\r\n <mf-table-page-jump\r\n [origin]=\"jumpOrigin\"\r\n [open]=\"jumpOpenIndex() === $index\"\r\n [totalPages]=\"totalPages()\"\r\n [labels]=\"effectiveLabels()\"\r\n (apply)=\"onJumpApply($event)\"\r\n (closed)=\"jumpOpenIndex.set(null)\"\r\n />\r\n } @else {\r\n <button\r\n type=\"button\"\r\n [class]=\"cellClasses(item === page())\"\r\n [attr.aria-current]=\"item === page() ? 'page' : null\"\r\n (click)=\"goTo(item)\"\r\n >\r\n {{ item }}\r\n </button>\r\n }\r\n }\r\n </div>\r\n\r\n <span class=\"flex h-9 shrink-0 items-center px-3 text-sm tabular-nums text-fg-muted sm:hidden\">\r\n {{ effectiveLabels().page }} {{ page() }} / {{ totalPages() }}\r\n </span>\r\n\r\n <div class=\"flex items-center gap-0.5\">\r\n <button\r\n type=\"button\"\r\n [class]=\"cellClasses(false)\"\r\n [disabled]=\"page() === totalPages()\"\r\n [attr.aria-label]=\"effectiveLabels().next\"\r\n (click)=\"goTo(page() + 1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_right</span>\r\n </button>\r\n <button\r\n type=\"button\"\r\n [class]=\"cellClasses(false)\"\r\n [disabled]=\"page() === totalPages()\"\r\n [attr.aria-label]=\"effectiveLabels().last\"\r\n (click)=\"goTo(totalPages())\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">last_page</span>\r\n </button>\r\n </div>\r\n </nav>\r\n</div>\r\n","export interface VirtualWindow {\r\n /** Render edilecek ilk satırın indeksi (dahil). */\r\n start: number;\r\n /** Render edilecek son satırın indeksi (hariç). */\r\n end: number;\r\n /** Üst/alt boşluk satırlarının yüksekliği, px — kaydırma çubuğu tam liste boyunu korur. */\r\n top: number;\r\n bottom: number;\r\n}\r\n\r\n/**\r\n * Sabit satır yüksekliğiyle pencereleme — görünür aralık ± `overscan` satır. Saf fonksiyon;\r\n * `Table`'ın `virtual` modu bunu `scrollTop`/görünüm yüksekliği sinyalleriyle çağırır.\r\n * `<cdk-virtual-scroll-viewport>` yerine: tablo `<tr>`'leri bir viewport sarmalayıcısına\r\n * girince yapışkan başlık, `border-collapse` ve `colspan`'lı boş durum satırı bozuluyordu;\r\n * boşluk satırı (`<tr><td [style.height]>`) yaklaşımı tablo semantiğini aynen korur.\r\n */\r\nexport function virtualWindow(\r\n total: number,\r\n scrollTop: number,\r\n viewportHeight: number,\r\n rowHeight: number,\r\n overscan = 8,\r\n): VirtualWindow {\r\n if (total === 0 || rowHeight <= 0) return { start: 0, end: 0, top: 0, bottom: 0 };\r\n const first = Math.floor(Math.max(0, scrollTop) / rowHeight);\r\n const visible = Math.ceil(Math.max(0, viewportHeight) / rowHeight);\r\n const start = Math.min(total, Math.max(0, first - overscan));\r\n const end = Math.min(total, first + visible + overscan);\r\n return { start, end, top: start * rowHeight, bottom: (total - end) * rowHeight };\r\n}\r\n","import { NgTemplateOutlet } from '@angular/common';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n afterRenderEffect,\r\n booleanAttribute,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n viewChild,\r\n type TemplateRef,\r\n} from '@angular/core';\r\nimport {\r\n DEFAULT_PAGE_SIZE,\r\n FilterLogic,\r\n FilterOperator,\r\n SortDirection,\r\n canonicalPagedRequest,\r\n type FilterGroup,\r\n type PageRequest,\r\n type PagedRequest,\r\n type SortDescriptor,\r\n} from './query-contract.model';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { Checkbox } from '@mesgflow/ui-kit/checkbox';\r\nimport {\r\n cn,\r\n isRtl,\r\n MF_TABLE_LABELS,\r\n mergeLabels,\r\n type DeepPartial,\r\n type MfTableLabels,\r\n} from '@mesgflow/ui-kit/core';\r\nimport { EmptyState } from '@mesgflow/ui-kit/empty-state';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { SearchInput } from '@mesgflow/ui-kit/search-input';\r\nimport { Skeleton } from '@mesgflow/ui-kit/skeleton';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\nimport { matchesFilterGroup, sortRows } from './table-client-query';\r\nimport { TableResizeHandle } from './table-column-resize';\r\nimport { TableColumnsMenu } from './table-columns-menu';\r\nimport { TableFilterBar } from './table-filter-bar';\r\nimport { buildFilterGroup, type AppliedFilter } from './table-filter.model';\r\nimport { TablePagination } from './table-pagination';\r\nimport type { TableColumn } from './table-column.model';\r\nimport { virtualWindow } from './table-virtual';\r\n\r\n/** Seçim/genişletme kolonlarının sabit genişliği (`w-10`) ve aksiyon kolonu (`w-20`), px. */\r\nconst LEADING_COL_PX = 40;\r\nconst ACTIONS_COL_PX = 80;\r\nconst FALLBACK_COL_PX = 160;\r\n/** Ölçülemeyen ortamda (SSR/jsdom) varsayılan satır yüksekliği — `bodyCellPad` ile uyumlu. */\r\nconst FALLBACK_ROW_PX = { comfortable: 57, compact: 45 } as const;\r\n\r\nlet tableIdSeq = 0;\r\n\r\nfunction sameRecord(a: Record<string, number>, b: Record<string, number>): boolean {\r\n const keys = Object.keys(a);\r\n return keys.length === Object.keys(b).length && keys.every((key) => a[key] === b[key]);\r\n}\r\n\r\n/**\r\n * Bu kitin premium data-table'ı.\r\n *\r\n * İKİ satırlık üst yapı:\r\n * 1. **Toolbar** — başlık + kayıt sayacı · her zaman açık arama (bir veri\r\n * tablosunda arama gizlenmez, bu bir navbar deseni) · Kolonlar/Yoğunluk\r\n * ikon kümesi · `[tableActions]` slotu (sayfanın GERÇEK aksiyonu, tek dolu\r\n * buton — Kolonlar/Yoğunluk kasıtlı olarak hayalet kalır, göz doğru yere\r\n * gitsin diye). Seçim modunda DA aynı kalır — eskiden seçim toolbar'ın\r\n * TAMAMINI yok ediyordu (gerçek bug, kullanıcı arama/filtre bağlamını\r\n * kaybediyordu).\r\n * 2. **Filtre/seçim şeridi** — filtrelenebilir kolon varsa HER ZAMAN görünür\r\n * (`TableFilterBar`, chip + \"+ Filtre\" komut menüsü — bkz. o dosya). Bir\r\n * satır seçilince bu şerit YERİNİ seçim aksiyonlarına bırakır (toolbar'ı\r\n * değil) — sağda \"N filtre\" rozeti filtre bağlamının kaybolmadığını\r\n * gösterir.\r\n *\r\n * `[clientSide]=\"true\"` verildiğinde Table gelen TAM diziyi kendisi\r\n * filtreler/sıralar/sayfalar (bkz. table-client-query.ts) ve `queryChange`\r\n * emit ETMEZ — backend'i sayfalanmayan uçlar için (tüketici artık kendi\r\n * `sortedRows`/`rows`/`total` boilerplate'ini yazmak zorunda kalmaz).\r\n */\r\n@Component({\r\n selector: 'mf-table',\r\n exportAs: 'mfTable',\r\n imports: [\r\n Button,\r\n Icon,\r\n Checkbox,\r\n Skeleton,\r\n EmptyState,\r\n NgTemplateOutlet,\r\n OverlayModule,\r\n TableFilterBar,\r\n TableColumnsMenu,\r\n TablePagination,\r\n TableResizeHandle,\r\n SearchInput,\r\n Tooltip,\r\n ],\r\n host: { class: 'block' },\r\n templateUrl: './table.html',\r\n})\r\nexport class Table<T> {\r\n /** Template'te `[class]=\"cn(...)\"` ile koşullu class birleştirmek için. */\r\n protected readonly cn = cn;\r\n\r\n readonly title = input('');\r\n readonly columns = input.required<TableColumn<T>[]>();\r\n /** Sunucu modunda SADECE geçerli sayfa; `[clientSide]=\"true\"` modunda TAM dizi (bkz. sınıf yorumu). */\r\n readonly data = input.required<readonly T[]>();\r\n readonly rowKey = input.required<keyof T & string>();\r\n readonly loading = input(false);\r\n /** Sunucu modunda zorunlu (toplam kayıt). `clientSide` modunda YOK SAYILIR — toplam `data().length`'ten türetilir. */\r\n readonly total = input(0);\r\n readonly pageSizeOptions = input<number[]>([10, 20, 50, 100]);\r\n readonly selectable = input(false);\r\n readonly searchable = input(true);\r\n readonly stickyHeader = input(false);\r\n /** `compact` yoğun listeler için satır başına dikey boşluğu daraltır. `model()` — toolbar'daki düğme TOGGLE eder, ama ekran isterse `[(density)]` ile de kontrol edebilir. */\r\n readonly density = model<'comfortable' | 'compact'>('comfortable');\r\n readonly rowActions = input<{ edit?: boolean; delete?: boolean }>({});\r\n /** true ise Table gelen `data()`'yı TAM liste sayar, kendi içinde filtreler/sıralar/sayfalar; `queryChange` emit edilmez (bkz. sınıf yorumu). */\r\n readonly clientSide = input(false);\r\n\r\n /**\r\n * Başlık kenarlarında sürükleme tutamacı (klavye: ←/→, çift tık/Enter: içeriğe sığdır).\r\n * İlk boyutlandırmada tüm görünür kolonların ölçülen genişliği dondurulur ve tablo\r\n * `table-layout: fixed`e geçer — aksi halde otomatik düzen, sürüklenen kolonun\r\n * kazandığını komşulardan geri alıp tutamacı imlecin altından kaçırıyordu.\r\n */\r\n readonly resizableColumns = input(false, { transform: booleanAttribute });\r\n /** Kolon genişlikleri (px, `field` → genişlik). `[(columnWidths)]` ile kalıcılaştırılabilir. */\r\n readonly columnWidths = model<Readonly<Record<string, number>>>({});\r\n\r\n /**\r\n * Verilirse her satırın başında bir aç/kapa düğmesi çıkar; açık satırın altında bu şablon\r\n * tam genişlikte render edilir (context: `{ $implicit: row }`). `virtual` ile birlikte\r\n * KULLANILMAZ — değişken yükseklikli satır sabit satır yüksekliği varsayımını bozar.\r\n */\r\n readonly expandedRowTemplate = input<TemplateRef<{ $implicit: T }>>();\r\n\r\n /**\r\n * Sayfalama yerine sanal kaydırma: TÜM satırlar tek listede, yalnızca görünen aralık\r\n * (± 8 satır) DOM'da. Başlık yapışkan, `aria-rowcount`/`aria-rowindex` tam listeyi\r\n * duyurur. Binlerce satırlık `clientSide` listeler için.\r\n */\r\n readonly virtual = input(false, { transform: booleanAttribute });\r\n /** `virtual` modunda kaydırma alanının yüksekliği (CSS uzunluğu). */\r\n readonly virtualHeight = input('32rem');\r\n\r\n /**\r\n * Table'ın TÜM chrome metinleri (arama placeholder'ı, boş/sonuç-yok\r\n * durumları, satır aksiyonları, yoğunluk düğmesi, filtre çubuğu + sayfalama\r\n * dahil — `filter`/`pagination` iç içe alt-alanlar) TEK bir grup input —\r\n * eskiden 16 ayrı `input()` + `filterLabels`/`paginationLabels` idi (bkz.\r\n * git geçmişi); `DeepPartial` olduğu için sadece değiştirmek istediğin\r\n * alanı geçebilirsin, kalanı `MF_TABLE_LABELS`'tan (bkz.\r\n * `provideMesgflowUi`) gelir.\r\n */\r\n readonly labels = input<DeepPartial<MfTableLabels>>();\r\n\r\n private readonly tableLabelsToken = inject(MF_TABLE_LABELS);\r\n protected readonly effectiveLabels = computed(() =>\r\n mergeLabels(this.tableLabelsToken(), this.labels()),\r\n );\r\n\r\n readonly queryChange = output<PagedRequest>();\r\n readonly selectionChange = output<T[]>();\r\n readonly edit = output<T>();\r\n readonly delete = output<T>();\r\n readonly rowDblClick = output<T>();\r\n /** Bir satır açıldı/kapandı — ayrıntıyı tembel yüklemek için. */\r\n readonly rowExpandedChange = output<{ row: T; expanded: boolean }>();\r\n\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly scroller = viewChild.required<ElementRef<HTMLElement>>('scroller');\r\n private readonly idPrefix = `mf-table-${++tableIdSeq}`;\r\n\r\n protected readonly pageState = signal<PageRequest>({\r\n pageNumber: 1,\r\n pageSize: DEFAULT_PAGE_SIZE,\r\n });\r\n protected readonly sortState = signal<SortDescriptor[]>([]);\r\n protected readonly searchTerm = signal('');\r\n protected readonly appliedFilters = signal<AppliedFilter[]>([]);\r\n protected readonly filterLogic = signal<FilterLogic>(FilterLogic.And);\r\n protected readonly selectedRows = signal<Map<unknown, T>>(new Map());\r\n protected readonly hiddenColumns = signal<Set<string>>(new Set());\r\n protected readonly columnsMenuOpen = signal(false);\r\n\r\n protected readonly FilterLogic = FilterLogic;\r\n\r\n /** Sabitlenen kolonlar (`pinned: 'left'`) verildikleri sırayla öne alınır. */\r\n protected readonly visibleColumns = computed(() => {\r\n const visible = this.columns().filter((c) => !this.hiddenColumns().has(c.field));\r\n return [\r\n ...visible.filter((c) => c.pinned === 'left'),\r\n ...visible.filter((c) => c.pinned !== 'left'),\r\n ];\r\n });\r\n protected readonly hasPinned = computed(() =>\r\n this.visibleColumns().some((c) => c.pinned === 'left'),\r\n );\r\n /** Sabit bölgenin sağ kenarı — ayırıcı gölge bu hücrede. Sabit kolon yoksa `null`. */\r\n protected readonly lastPinnedKey = computed(\r\n () =>\r\n this.visibleColumns()\r\n .filter((c) => c.pinned === 'left')\r\n .at(-1)?.field ?? null,\r\n );\r\n /** Ölçülen satır-başı ofsetleri (px, `inset-inline-start`) — anahtar: `field`, `__expand`, `__select`. */\r\n protected readonly pinOffsets = signal<Record<string, number>>({});\r\n /** Başlık hücrelerinin ölçülen genişliği — tutamacın `aria-valuenow`u dondurulmadan önce buradan. */\r\n private readonly measuredWidths = signal<Record<string, number>>({});\r\n\r\n protected readonly expandable = computed(() => !!this.expandedRowTemplate() && !this.virtual());\r\n protected readonly expandedKeys = signal<ReadonlySet<unknown>>(new Set());\r\n\r\n protected readonly fixedLayout = computed(() => Object.keys(this.columnWidths()).length > 0);\r\n /** Sabit düzende tablonun toplam genişliği — kolonlar kapsayıcıdan genişse yatay kaydırma doğar. */\r\n protected readonly tableWidth = computed(() => {\r\n if (!this.fixedLayout()) return null;\r\n const widths = this.columnWidths();\r\n const columns = this.visibleColumns().reduce(\r\n (sum, col) => sum + (widths[col.field] ?? FALLBACK_COL_PX),\r\n 0,\r\n );\r\n const leading =\r\n (this.selectable() ? LEADING_COL_PX : 0) + (this.expandable() ? LEADING_COL_PX : 0);\r\n return columns + leading + (this.hasRowActions() ? ACTIONS_COL_PX : 0);\r\n });\r\n\r\n private readonly scrollTop = signal(0);\r\n private readonly viewportHeight = signal(0);\r\n /** Kaydırma alanının görünür genişliği — ayrıntı satırı içeriği yatay kaydırmada bu genişlikte sabit kalır. */\r\n protected readonly viewportWidth = signal(0);\r\n private readonly measuredRowHeight = signal(0);\r\n /** Tablo/kapsayıcı yeniden boyutlandığında sabit kolon ofsetleri yeniden ölçülür. */\r\n private readonly layoutTick = signal(0);\r\n protected readonly hasFilterableColumns = computed(() => this.columns().some((c) => c.filter));\r\n protected readonly activeFilterCount = computed(() => this.appliedFilters().length);\r\n protected readonly isFiltered = computed(\r\n () => !!this.searchTerm().trim() || this.appliedFilters().length > 0,\r\n );\r\n protected readonly hasRowActions = computed(\r\n () => !!(this.rowActions().edit || this.rowActions().delete),\r\n );\r\n protected readonly columnSpan = computed(\r\n () =>\r\n this.visibleColumns().length +\r\n (this.selectable() ? 1 : 0) +\r\n (this.expandable() ? 1 : 0) +\r\n (this.hasRowActions() ? 1 : 0),\r\n );\r\n\r\n /** `clientSide` modunda `data()` TAM listedir — burada filtrelenip/sıralanıp/sayfalanır (bkz. table-client-query.ts). Sunucu modunda kullanılmaz. */\r\n private readonly clientResult = computed(() => {\r\n const rows = this.data();\r\n const filtered = this.isFiltered()\r\n ? rows.filter((row) => matchesFilterGroup(row, this.buildFilter()))\r\n : [...rows];\r\n const sorted = sortRows(filtered, this.sortState());\r\n if (this.virtual()) return { items: sorted, total: filtered.length };\r\n const { pageNumber, pageSize } = this.pageState();\r\n const start = (pageNumber - 1) * pageSize;\r\n return { items: sorted.slice(start, start + pageSize), total: filtered.length };\r\n });\r\n\r\n protected readonly rows = computed(() =>\r\n this.clientSide() ? this.clientResult().items : this.data(),\r\n );\r\n protected readonly rowsTotal = computed(() =>\r\n this.clientSide() ? this.clientResult().total : this.total(),\r\n );\r\n\r\n /** `virtual` modunda görünen aralık; değilse `null` (tüm `rows()` render edilir). */\r\n protected readonly virtualRange = computed(() => {\r\n if (!this.virtual()) return null;\r\n const rowHeight = this.measuredRowHeight() || FALLBACK_ROW_PX[this.density()];\r\n return virtualWindow(\r\n this.rows().length,\r\n this.scrollTop(),\r\n this.viewportHeight() || 600,\r\n rowHeight,\r\n );\r\n });\r\n protected readonly displayRows = computed(() => {\r\n const range = this.virtualRange();\r\n return range ? this.rows().slice(range.start, range.end) : this.rows();\r\n });\r\n protected readonly rowIndexOffset = computed(() => this.virtualRange()?.start ?? 0);\r\n protected readonly isStickyHeader = computed(() => this.stickyHeader() || this.virtual());\r\n\r\n protected readonly skeletonIndexes = computed(() =>\r\n Array.from({ length: Math.min(this.pageState().pageSize, 8) }, (_, i) => i),\r\n );\r\n /** `overflow-x-auto` HER ZAMAN gerekli (dar viewport'ta yatay kaydırma olmadan tablo taşıp sağdaki satır aksiyonlarını görünmez kılıyordu). `stickyHeader` ek olarak dikey kaydırma+sabit başlık ekliyor. */\r\n protected readonly scrollWrapperClasses = computed(() =>\r\n cn(\r\n 'overflow-x-auto',\r\n this.virtual() && 'overflow-y-auto overscroll-contain',\r\n this.stickyHeader() && !this.virtual() && 'max-h-[28rem] overflow-y-auto',\r\n ),\r\n );\r\n\r\n /*\r\n * `compact` eskiden `py-2`/`py-2`ydi — `comfortable`'a (py-2.5/py-3) çok\r\n * yakın durduğundan geçiş neredeyse fark edilmiyordu (gerçek kullanıcı\r\n * bulgusu: \"1px anca oynuyor, sık gibi durmuyor\"). Fark artık satır\r\n * başına ~16px'e çıkarıldı (60px → ~45px) — ikon/checkbox boyutları\r\n * (18-20px) hâlâ rahat sığıyor, taşma/kırpılma YOK (bkz. dev sunucuda\r\n * canlı ölçüm).\r\n */\r\n protected readonly headerCellPad = computed(() =>\r\n this.density() === 'compact' ? 'py-1.5' : 'py-2.5',\r\n );\r\n protected readonly bodyCellPad = computed(() => (this.density() === 'compact' ? 'py-1' : 'py-3'));\r\n\r\n protected readonly allChecked = computed(() => {\r\n const rows = this.rows();\r\n return rows.length > 0 && rows.every((row) => this.selectedRows().has(row[this.rowKey()]));\r\n });\r\n protected readonly indeterminate = computed(\r\n () => this.selectedRows().size > 0 && !this.allChecked(),\r\n );\r\n protected readonly selectedCount = computed(() => this.selectedRows().size);\r\n\r\n /** İlk yüklemede satır yoksa iskelet gösterilir. Sonraki her sorguda (arama/filtre/sayfa) satırlar YERİNDE kalır, sadece soluklaşır — eskiden HER sorguda tüm tablo iskelete dönüp \"yanıp sönüyordu\" (gerçek bulgu). */\r\n protected readonly showSkeleton = computed(() => this.loading() && this.rows().length === 0);\r\n protected readonly showStaleOverlay = computed(() => this.loading() && this.rows().length > 0);\r\n\r\n constructor() {\r\n // Sayfa/sıralama/filtre değişince `rows()` yeni bir referans alır —\r\n // önceki seçim artık görünürdeki satırlarla eşleşmeyebileceğinden temizlenir.\r\n effect(() => {\r\n this.rows();\r\n untracked(() => {\r\n this.selectedRows.set(new Map());\r\n // Yeni sonuç kümesi (arama/filtre/sıralama) — sanal listede eski kaydırma konumu anlamsız.\r\n if (this.virtual() && this.scrollTop() !== 0) {\r\n this.scroller().nativeElement.scrollTop = 0;\r\n this.scrollTop.set(0);\r\n }\r\n });\r\n });\r\n\r\n // Ölçüm: sabit kolon ofsetleri + sanal satır yüksekliği. Değer değişmedikçe yazılmaz\r\n // (render → ölçüm → set → render döngüsü tek turda durulur).\r\n afterRenderEffect({\r\n read: () => {\r\n this.visibleColumns();\r\n this.columnWidths();\r\n this.density();\r\n this.layoutTick();\r\n this.displayRows();\r\n const root = this.host.nativeElement;\r\n if (this.hasPinned()) {\r\n const next: Record<string, number> = {};\r\n const rtl = isRtl(root);\r\n root.querySelectorAll<HTMLElement>('thead th[data-pin]').forEach((th) => {\r\n // Satır başından uzaklık — RTL'de sağ kenardan (sabit kolonlar sağa yapışır).\r\n const table = th.offsetParent as HTMLElement | null;\r\n next[th.dataset['pin']!] = rtl\r\n ? (table?.offsetWidth ?? 0) - th.offsetLeft - th.offsetWidth\r\n : th.offsetLeft;\r\n });\r\n if (!sameRecord(next, untracked(this.pinOffsets))) this.pinOffsets.set(next);\r\n }\r\n if (this.resizableColumns()) {\r\n const widths: Record<string, number> = {};\r\n root.querySelectorAll<HTMLElement>('thead th[data-col]').forEach((th) => {\r\n widths[th.dataset['col']!] = Math.round(th.getBoundingClientRect().width);\r\n });\r\n if (!sameRecord(widths, untracked(this.measuredWidths))) this.measuredWidths.set(widths);\r\n }\r\n if (this.virtual()) {\r\n const row = root.querySelector<HTMLElement>('tbody tr[data-row]');\r\n const height = row?.getBoundingClientRect().height ?? 0;\r\n if (height > 0 && Math.abs(height - untracked(this.measuredRowHeight)) > 0.5)\r\n this.measuredRowHeight.set(height);\r\n }\r\n },\r\n });\r\n\r\n const destroyRef = inject(DestroyRef);\r\n afterNextRender(() => {\r\n if (typeof ResizeObserver === 'undefined') return;\r\n const scroller = this.scroller().nativeElement;\r\n const observer = new ResizeObserver(() => {\r\n this.viewportHeight.set(scroller.clientHeight);\r\n this.viewportWidth.set(scroller.clientWidth);\r\n this.layoutTick.update((tick) => tick + 1);\r\n });\r\n observer.observe(scroller);\r\n const table = scroller.querySelector('table');\r\n if (table) observer.observe(table);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n }\r\n\r\n protected onScroll(event: Event): void {\r\n if (!this.virtual()) return;\r\n this.scrollTop.set((event.target as HTMLElement).scrollTop);\r\n }\r\n\r\n // ---- Kolon genişliği ----\r\n\r\n protected widthStyle(col: TableColumn<T>): string | null {\r\n const px = this.columnWidths()[col.field];\r\n return px ? `${px}px` : (col.width ?? null);\r\n }\r\n\r\n /** Tutamacın `aria-valuenow`u: kaydedilmiş > ölçülen > alt sınır. */\r\n protected currentWidth(col: TableColumn<T>): number {\r\n return (\r\n this.columnWidths()[col.field] || this.measuredWidths()[col.field] || (col.minWidth ?? 80)\r\n );\r\n }\r\n\r\n protected isResizable(col: TableColumn<T>): boolean {\r\n return this.resizableColumns() && col.resizable !== false;\r\n }\r\n\r\n protected resizeAriaLabel(col: TableColumn<T>): string {\r\n return `${this.effectiveLabels().resizeColumn}: ${col.header}`;\r\n }\r\n\r\n /** Henüz genişliği kaydedilmemiş görünür kolonları ölçülen genişlikte dondurur. */\r\n protected freezeWidths(): void {\r\n const current = { ...this.columnWidths() };\r\n let changed = false;\r\n this.host.nativeElement.querySelectorAll<HTMLElement>('thead th[data-col]').forEach((th) => {\r\n const field = th.dataset['col']!;\r\n if (current[field] !== undefined) return;\r\n current[field] = Math.round(th.getBoundingClientRect().width) || FALLBACK_COL_PX;\r\n changed = true;\r\n });\r\n if (changed) this.columnWidths.set(current);\r\n }\r\n\r\n protected onColumnResize(col: TableColumn<T>, width: number): void {\r\n this.columnWidths.update((widths) => ({ ...widths, [col.field]: width }));\r\n }\r\n\r\n /** İçeriğe sığdır: kolondaki en geniş hücre içeriği + yatay dolgu (`px-4` × 2). */\r\n protected autofitColumn(col: TableColumn<T>): void {\r\n this.freezeWidths();\r\n let widest = 0;\r\n this.host.nativeElement.querySelectorAll<HTMLElement>('[data-col]').forEach((cell) => {\r\n if (cell.dataset['col'] !== col.field) return;\r\n const content = cell.firstElementChild as HTMLElement | null;\r\n widest = Math.max(widest, content?.getBoundingClientRect().width ?? 0);\r\n });\r\n if (widest > 0) this.onColumnResize(col, Math.max(col.minWidth ?? 80, Math.ceil(widest + 32)));\r\n }\r\n\r\n // ---- Sabit kolonlar ----\r\n\r\n /** Sabitlenecek bir hücre mi? Öndeki seçim/genişletme kolonları, sabit kolon varsa onlarla gider. */\r\n protected isPinnedKey(key: string): boolean {\r\n if (!this.hasPinned()) return false;\r\n if (key === '__select' || key === '__expand') return true;\r\n return this.visibleColumns().some((c) => c.field === key && c.pinned === 'left');\r\n }\r\n\r\n protected pinStart(key: string): number | null {\r\n return this.isPinnedKey(key) ? (this.pinOffsets()[key] ?? 0) : null;\r\n }\r\n\r\n /** Başlık hücresinin sabitleme sınıfları (`thead` zaten opak `bg-surface-sunken`). */\r\n protected pinHeadClasses(key: string): string {\r\n if (!this.isPinnedKey(key)) return '';\r\n return cn('sticky z-[2] bg-surface-sunken', this.edgeShadow(key));\r\n }\r\n\r\n /** Gövde hücresi: opak zemin şart — altından kayan hücreler sızmasın (bkz. `rowBg`). */\r\n protected pinBodyClasses(key: string, row: T): string {\r\n if (!this.isPinnedKey(key)) return '';\r\n return cn('sticky z-[1]', this.rowBg(row), this.edgeShadow(key));\r\n }\r\n\r\n /** `border-collapse` altında kenarlıklar yapışkan hücreyle gitmez — içe gölge gider. */\r\n private edgeShadow(key: string): string {\r\n return key === this.lastPinnedKey()\r\n ? 'shadow-[inset_-1px_0_0_var(--mf-border)] rtl:shadow-[inset_1px_0_0_var(--mf-border)]'\r\n : '';\r\n }\r\n\r\n // ---- Satır genişletme ----\r\n\r\n protected isExpanded(row: T): boolean {\r\n return this.expandedKeys().has(row[this.rowKey()]);\r\n }\r\n\r\n protected toggleExpanded(row: T): void {\r\n const key = row[this.rowKey()];\r\n const next = new Set(this.expandedKeys());\r\n const expanded = !next.has(key);\r\n if (expanded) next.add(key);\r\n else next.delete(key);\r\n this.expandedKeys.set(next);\r\n this.rowExpandedChange.emit({ row, expanded });\r\n }\r\n\r\n protected expandedRowId(index: number): string {\r\n return `${this.idPrefix}-detail-${index}`;\r\n }\r\n\r\n protected expandAriaLabel(row: T): string {\r\n const labels = this.effectiveLabels();\r\n return this.withRowIdentity(row, this.isExpanded(row) ? labels.collapseRow : labels.expandRow);\r\n }\r\n\r\n protected trackByRow = (_: number, row: T): unknown => row[this.rowKey()];\r\n\r\n /** `type: 'numeric'` açıkça `align` verilmemişse sağa yaslanır; diğer tüm kolonlar `col.align`'a düşer (varsayılan sol). */\r\n protected resolvedAlign(col: TableColumn<T>): 'left' | 'center' | 'right' {\r\n return col.align ?? (col.type === 'numeric' ? 'right' : 'left');\r\n }\r\n\r\n protected alignClass(align: 'left' | 'center' | 'right'): string {\r\n return align === 'center' ? 'text-center' : align === 'right' ? 'text-end' : 'text-start';\r\n }\r\n\r\n /** Kimlik kolonu (`primary`) `text-fg font-medium` — göz bir satırda tutunacak bir çapa buluyor; diğer her hücre `text-fg-muted` kalır (eskiden HER hücre aynı ağırlıktaydı). */\r\n protected cellClasses(col: TableColumn<T>): string {\r\n return cn(\r\n col.primary ? 'text-fg font-medium' : 'text-fg-muted',\r\n col.type === 'numeric' && 'tabular-nums',\r\n !col.cellTemplate && 'truncate',\r\n );\r\n }\r\n\r\n /** `[title]` (kesilmiş metin için native tooltip) ve boş/`null` değerleri güvenle metne çevirir — Angular şablonları global `String()`'e erişemiyor. */\r\n protected cellText(row: T, col: TableColumn<T>): string {\r\n const value = row[col.field];\r\n return value === null || value === undefined ? '' : String(value);\r\n }\r\n\r\n /** Satır checkbox'ının erişilebilir adı — kimlik kolonundan (`primary`, yoksa ilk kolon) türetilir, tüm satırların AYNI \"Select row\" metnini taşımasını önler. */\r\n protected rowSelectAriaLabel(row: T): string {\r\n return this.withRowIdentity(row, this.effectiveLabels().selectRowAriaLabel);\r\n }\r\n\r\n /** \"Etiket: kimlik\" — kimlik kolonundan (`primary`, yoksa ilk kolon) türetilir. */\r\n private withRowIdentity(row: T, label: string): string {\r\n const col = this.columns().find((c) => c.primary) ?? this.columns()[0];\r\n const value = col ? this.cellText(row, col) : '';\r\n return value ? `${label}: ${value}` : label;\r\n }\r\n\r\n /**\r\n * Bu tazelemenin imza motiflerinden \"ray\": seçili satırın sol kenarında\r\n * 2px'lik dolu marka rengi çizgi. Kenarlık HER ZAMAN vardır (`border-s-2\r\n * border-s-transparent`), sadece rengi değişir — eskiden kenarlık sadece\r\n * SEÇİLİYKEN ekleniyordu, `border-collapse: collapse` altında bu 2px\r\n * gerçek yer kaplıyor ve her tıklamada ilk hücrenin içeriği 2px kayıyordu\r\n * (gerçek layout bug'ı, tarayıcıda `getBoundingClientRect` ile doğrulandı).\r\n * `group/row`: sağdaki sabit aksiyon hücresinin hover rengini satırla\r\n * senkron tutmak için (bkz. stickyActionClasses).\r\n */\r\n protected rowClasses(row: T): string {\r\n const selected = this.isChecked(row);\r\n return cn(\r\n 'group/row border-b border-b-hairline border-s-2 transition-colors duration-fast ease-emphasis',\r\n selected\r\n ? 'border-s-accent-fill bg-primary-tint'\r\n : 'border-s-transparent hover:bg-surface-alt',\r\n this.showStaleOverlay() && 'opacity-60',\r\n );\r\n }\r\n\r\n /**\r\n * Sabit (sticky) aksiyon hücresi için — `rowClasses()`'ın aksine `bg-primary-tint`\r\n * DOĞRUDAN kullanılamaz: bu hücre yatay kaydırmada AYNI satırın diğer\r\n * hücrelerinin ÜSTÜNÜ kapatıyor, saydam bir zemin altındaki kaydırılmış\r\n * içeriği sızdırırdı (gerçek bir composite hatası). Bunun yerine OPAK\r\n * `bg-surface` + üstüne tint rengiyle boyanmış bir `background-image`\r\n * gradyanı — iki katman üst üste bindiğinde görsel sonuç `bg-primary-tint`\r\n * ile BİREBİR aynı, ama alttan hiçbir şey sızmaz. `--mf-primary-tint`\r\n * (`--color-primary-tint` DEĞİL) — arbitrary value içindeki `var()`\r\n * referansları Tailwind'in \"@theme inline\" tarama/eleme sezgisine bağlı,\r\n * `--mf-*` rol katmanı KENDİSİ her zaman `@layer base`'de KOŞULSUZ yazılır\r\n * (bkz. `tabs.variants.ts`'teki aynı karar).\r\n */\r\n protected rowBg(row: T): string {\r\n return this.isChecked(row)\r\n ? 'bg-surface bg-[linear-gradient(var(--mf-primary-tint),var(--mf-primary-tint))]'\r\n : 'bg-surface group-hover/row:bg-surface-alt';\r\n }\r\n\r\n protected stickyActionClasses(row: T): string {\r\n return cn(\r\n 'sticky end-0 z-[1] border-s border-border text-end',\r\n this.bodyCellPad(),\r\n this.rowBg(row),\r\n );\r\n }\r\n\r\n /** `SearchInput` kendi debounce'unu zaten uyguladı — burada gelen değer commit edilmiş (nihai). */\r\n protected onSearchCommit(value: string): void {\r\n this.searchTerm.set(value);\r\n this.pageState.update((p) => ({ ...p, pageNumber: 1 }));\r\n this.emitQuery();\r\n }\r\n\r\n /**\r\n * Düz tık: bu alanı TEK sıralama kriteri yapar (zaten TEK/birincil kriterse\r\n * yön döngüsü asc→desc→yok). Shift+tık: İKİNCİL sıralama ekler/döndürür/\r\n * kaldırır — backend en fazla 3 alan kabul ediyor (`SortExpressionBuilder.\r\n * MaxSortFields`). Eskiden çoklu sıralama YOKTU (yeni Table'ın eski\r\n * `shared/components/data-table`'a göre kaybettiği iki yetenekten biri).\r\n */\r\n protected onSortClick(column: TableColumn<T>, event?: MouseEvent): void {\r\n if (!column.sortable) return;\r\n const current = this.sortState();\r\n const index = current.findIndex((s) => s.field === column.field);\r\n\r\n if (!event?.shiftKey) {\r\n if (current.length === 1 && index === 0) {\r\n const next =\r\n current[0]!.direction === SortDirection.Ascending\r\n ? [{ field: column.field, direction: SortDirection.Descending }]\r\n : [];\r\n this.sortState.set(next);\r\n } else {\r\n this.sortState.set([{ field: column.field, direction: SortDirection.Ascending }]);\r\n }\r\n } else if (index === -1) {\r\n if (current.length >= 3) return;\r\n this.sortState.set([...current, { field: column.field, direction: SortDirection.Ascending }]);\r\n } else {\r\n const entry = current[index]!;\r\n this.sortState.set(\r\n entry.direction === SortDirection.Ascending\r\n ? current.map((s, i) => (i === index ? { ...s, direction: SortDirection.Descending } : s))\r\n : current.filter((_, i) => i !== index),\r\n );\r\n }\r\n this.emitQuery();\r\n }\r\n\r\n protected sortDirectionFor(field: string): SortDirection | null {\r\n return this.sortState().find((s) => s.field === field)?.direction ?? null;\r\n }\r\n\r\n /** 1 tabanlı sıra konumu — yalnızca 2+ alan aktifken gösterilir (tekil sıralamada numara gürültü olurdu). */\r\n protected sortOrderFor(field: string): number | null {\r\n if (this.sortState().length < 2) return null;\r\n const index = this.sortState().findIndex((s) => s.field === field);\r\n return index === -1 ? null : index + 1;\r\n }\r\n\r\n protected onFiltersChange(filters: AppliedFilter[]): void {\r\n this.appliedFilters.set(filters);\r\n this.pageState.update((p) => ({ ...p, pageNumber: 1 }));\r\n this.emitQuery();\r\n }\r\n\r\n protected onFilterLogicChange(logic: FilterLogic): void {\r\n this.filterLogic.set(logic);\r\n if (this.appliedFilters().length > 1) this.emitQuery();\r\n }\r\n\r\n protected clearAllFilters(): void {\r\n this.searchTerm.set('');\r\n this.appliedFilters.set([]);\r\n this.pageState.update((p) => ({ ...p, pageNumber: 1 }));\r\n this.emitQuery();\r\n }\r\n\r\n protected onPageChange(page: number): void {\r\n this.pageState.update((p) => ({ ...p, pageNumber: page }));\r\n this.emitQuery();\r\n }\r\n\r\n protected onPageSizeChange(size: number): void {\r\n this.pageState.set({ pageNumber: 1, pageSize: size });\r\n this.emitQuery();\r\n }\r\n\r\n protected toggleDensity(): void {\r\n this.density.update((d) => (d === 'comfortable' ? 'compact' : 'comfortable'));\r\n }\r\n\r\n protected densityToggleTooltip(): string {\r\n const labels = this.effectiveLabels();\r\n return `${labels.density}: ${this.density() === 'comfortable' ? labels.densityCompact : labels.densityComfortable}`;\r\n }\r\n\r\n protected onHiddenColumnsChange(hidden: ReadonlySet<string>): void {\r\n this.hiddenColumns.set(new Set(hidden));\r\n }\r\n\r\n protected isChecked(row: T): boolean {\r\n return this.selectedRows().has(row[this.rowKey()]);\r\n }\r\n\r\n protected onCheckAll(checked: boolean): void {\r\n const next = new Map<unknown, T>();\r\n if (checked) for (const row of this.rows()) next.set(row[this.rowKey()], row);\r\n this.selectedRows.set(next);\r\n this.selectionChange.emit([...next.values()]);\r\n }\r\n\r\n protected onCheckRow(row: T, checked: boolean): void {\r\n const next = new Map(this.selectedRows());\r\n if (checked) next.set(row[this.rowKey()], row);\r\n else next.delete(row[this.rowKey()]);\r\n this.selectedRows.set(next);\r\n this.selectionChange.emit([...next.values()]);\r\n }\r\n\r\n protected clearSelection(): void {\r\n this.selectedRows.set(new Map());\r\n this.selectionChange.emit([]);\r\n }\r\n\r\n private buildFilter(): FilterGroup | undefined {\r\n const term = this.searchTerm().trim();\r\n const searchGroup = term ? this.searchGroupFor(term) : undefined;\r\n const chipGroup = buildFilterGroup(this.appliedFilters(), this.filterLogic());\r\n\r\n if (searchGroup && chipGroup)\r\n return { logic: FilterLogic.And, groups: [searchGroup, chipGroup] };\r\n return searchGroup ?? chipGroup;\r\n }\r\n\r\n private searchGroupFor(term: string): FilterGroup | undefined {\r\n const fields = this.columns()\r\n .filter((c) => c.searchable)\r\n .map((c) => c.field);\r\n if (!fields.length) return undefined;\r\n return {\r\n logic: FilterLogic.Or,\r\n conditions: fields.map((field) => ({\r\n field,\r\n operator: FilterOperator.Contains,\r\n value: term,\r\n })),\r\n };\r\n }\r\n\r\n private emitQuery(): void {\r\n if (this.clientSide()) return;\r\n this.queryChange.emit(\r\n canonicalPagedRequest({\r\n page: this.pageState(),\r\n sort: this.sortState(),\r\n filter: this.buildFilter(),\r\n }),\r\n );\r\n }\r\n}\r\n","<div class=\"relative overflow-hidden rounded-lg border border-hairline bg-surface\">\r\n @if (showStaleOverlay()) {\r\n <div\r\n class=\"pointer-events-none absolute inset-x-0 top-0 z-20 h-0.5 overflow-hidden bg-primary-tint\"\r\n aria-hidden=\"true\"\r\n >\r\n <div class=\"h-full w-1/4 animate-progress-slide bg-accent-fill\"></div>\r\n </div>\r\n }\r\n\r\n <!--\r\n Satır 1 — toolbar. Seçim modunda da AYNI kalır: eskiden bir satır\r\n seçilince başlık+arama+filtre tamamen kaybolup yerine \"N seçildi\"\r\n geliyordu (gerçek bug, kullanıcı arama/filtre bağlamını kaybediyordu).\r\n Artık sadece Satır 2 (aşağıda) seçim aksiyonlarına devrediliyor.\r\n -->\r\n <div class=\"flex flex-wrap items-center justify-between gap-3 border-b border-border px-4 py-3\">\r\n <div class=\"flex min-w-0 items-center gap-2.5\">\r\n @if (title()) {\r\n <h3 class=\"truncate font-display text-title text-fg\">{{ title() }}</h3>\r\n }\r\n </div>\r\n\r\n <div class=\"flex flex-1 flex-wrap items-center justify-end gap-2\">\r\n @if (searchable()) {\r\n <mf-search-input\r\n [collapsible]=\"false\"\r\n [value]=\"searchTerm()\"\r\n [placeholder]=\"effectiveLabels().searchPlaceholder\"\r\n [ariaLabel]=\"effectiveLabels().searchPlaceholder\"\r\n [loading]=\"loading()\"\r\n (valueChange)=\"onSearchCommit($event)\"\r\n />\r\n }\r\n\r\n <!-- Kolonlar + Yoğunluk: BİLEREK hayalet (text/icon) kalıyor — göz [tableActions]'daki gerçek CTA'ya gitsin diye (bkz. table.ts sınıf yorumu, toolbar hiyerarşisi bulgusu). -->\r\n <div class=\"flex items-center gap-0.5\">\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #columnsOrigin=\"cdkOverlayOrigin\"\r\n [mfTooltip]=\"effectiveLabels().columns\"\r\n [attr.aria-label]=\"effectiveLabels().columns\"\r\n (click)=\"columnsMenuOpen.set(!columnsMenuOpen())\"\r\n >\r\n <span mfIcon [size]=\"18\">view_column</span>\r\n </button>\r\n <mf-table-columns-menu\r\n [columns]=\"columns()\"\r\n [hidden]=\"hiddenColumns()\"\r\n [origin]=\"columnsOrigin\"\r\n [open]=\"columnsMenuOpen()\"\r\n [label]=\"effectiveLabels().columns\"\r\n (hiddenChange)=\"onHiddenColumnsChange($event)\"\r\n (closed)=\"columnsMenuOpen.set(false)\"\r\n />\r\n\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [mfTooltip]=\"densityToggleTooltip()\"\r\n [attr.aria-label]=\"densityToggleTooltip()\"\r\n (click)=\"toggleDensity()\"\r\n >\r\n <span mfIcon [size]=\"18\">{{\r\n density() === 'comfortable' ? 'density_medium' : 'density_small'\r\n }}</span>\r\n </button>\r\n </div>\r\n\r\n <ng-content select=\"[tableActions]\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Satır 2 — ya filtre çubuğu ya seçim çubuğu, ASLA ikisi birden. -->\r\n @if (selectedCount() > 0) {\r\n <div\r\n class=\"flex flex-wrap items-center justify-between gap-3 border-b border-border bg-surface-sunken px-4 py-2\"\r\n >\r\n <div class=\"flex items-center gap-3\">\r\n <button\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveLabels().clearSelection\"\r\n (click)=\"clearSelection()\"\r\n >\r\n <span mfIcon [size]=\"18\">close</span>\r\n </button>\r\n <span class=\"text-sm font-medium text-fg-muted tabular-nums\"\r\n >{{ selectedCount() }} {{ effectiveLabels().selectedCount }}</span\r\n >\r\n </div>\r\n <div class=\"flex items-center gap-2\">\r\n <ng-content select=\"[tableBulkActions]\" />\r\n @if (activeFilterCount() > 0) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-full bg-surface-alt px-2 py-0.5 text-xs text-fg-subtle\"\r\n >\r\n <span mfIcon [size]=\"12\">filter_list</span>\r\n {{ activeFilterCount() }} {{ effectiveLabels().filterCount }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n } @else if (hasFilterableColumns()) {\r\n <mf-table-filter-bar\r\n [columns]=\"columns()\"\r\n [filters]=\"appliedFilters()\"\r\n [logic]=\"filterLogic()\"\r\n [labels]=\"effectiveLabels().filter\"\r\n (filtersChange)=\"onFiltersChange($event)\"\r\n (logicChange)=\"onFilterLogicChange($event)\"\r\n />\r\n }\r\n\r\n <div\r\n #scroller\r\n [class]=\"scrollWrapperClasses()\"\r\n [style.max-height]=\"virtual() ? virtualHeight() : null\"\r\n (scroll)=\"onScroll($event)\"\r\n >\r\n <table\r\n [class]=\"cn('border-collapse text-sm', fixedLayout() ? 'min-w-full table-fixed' : 'w-full')\"\r\n [style.width.px]=\"tableWidth()\"\r\n [attr.aria-rowcount]=\"virtual() ? rows().length + 1 : null\"\r\n >\r\n <thead\r\n [class]=\"\r\n cn(\r\n 'bg-surface-sunken',\r\n isStickyHeader() ? 'sticky top-0 z-10 border-b border-border-strong' : ''\r\n )\r\n \"\r\n >\r\n <tr class=\"border-b border-hairline\" [attr.aria-rowindex]=\"virtual() ? 1 : null\">\r\n @if (selectable()) {\r\n <th\r\n data-pin=\"__select\"\r\n [class]=\"cn('w-10 px-4', headerCellPad(), pinHeadClasses('__select'))\"\r\n [style.inset-inline-start.px]=\"pinStart('__select')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n mfCheckbox\r\n [checked]=\"allChecked()\"\r\n [indeterminate]=\"indeterminate()\"\r\n [attr.aria-label]=\"effectiveLabels().selectAllAriaLabel\"\r\n (change)=\"onCheckAll($any($event.target).checked)\"\r\n />\r\n </th>\r\n }\r\n @if (expandable()) {\r\n <th\r\n data-pin=\"__expand\"\r\n [class]=\"cn('w-10 px-1.5', headerCellPad(), pinHeadClasses('__expand'))\"\r\n [style.inset-inline-start.px]=\"pinStart('__expand')\"\r\n >\r\n <span class=\"sr-only\">{{ effectiveLabels().expandRow }}</span>\r\n </th>\r\n }\r\n @for (col of visibleColumns(); track col.field) {\r\n <th\r\n [attr.data-col]=\"col.field\"\r\n [attr.data-pin]=\"col.pinned === 'left' ? col.field : null\"\r\n [class]=\"\r\n cn(\r\n 'group/th relative truncate px-4 text-eyebrow text-fg-subtle',\r\n headerCellPad(),\r\n alignClass(resolvedAlign(col)),\r\n pinHeadClasses(col.field)\r\n )\r\n \"\r\n [style.width]=\"widthStyle(col)\"\r\n [style.min-width.px]=\"col.minWidth ?? null\"\r\n [style.inset-inline-start.px]=\"pinStart(col.field)\"\r\n >\r\n @if (col.sortable) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex appearance-none items-center gap-1 border-0 bg-transparent p-0 transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n (click)=\"onSortClick(col, $event)\"\r\n >\r\n <span>{{ col.header }}</span>\r\n @if (sortOrderFor(col.field); as order) {\r\n <span class=\"text-caption font-bold text-accent tabular-nums\">{{ order }}</span>\r\n }\r\n <span\r\n mfIcon\r\n [size]=\"14\"\r\n [class]=\"\r\n sortDirectionFor(col.field) !== null\r\n ? 'text-accent'\r\n : 'text-fg-subtle opacity-0 transition-opacity duration-fast group-hover/th:opacity-100'\r\n \"\r\n >\r\n @switch (sortDirectionFor(col.field)) {\r\n @case (0) {\r\n arrow_upward\r\n }\r\n @case (1) {\r\n arrow_downward\r\n }\r\n @default {\r\n unfold_more\r\n }\r\n }\r\n </span>\r\n </button>\r\n } @else {\r\n <span>{{ col.header }}</span>\r\n }\r\n @if (isResizable(col)) {\r\n <span\r\n mfTableResizeHandle\r\n [label]=\"resizeAriaLabel(col)\"\r\n [width]=\"currentWidth(col)\"\r\n [min]=\"col.minWidth ?? 80\"\r\n (resizeStart)=\"freezeWidths()\"\r\n (widthChange)=\"onColumnResize(col, $event)\"\r\n (autofit)=\"autofitColumn(col)\"\r\n ></span>\r\n }\r\n </th>\r\n }\r\n @if (hasRowActions()) {\r\n <th [class]=\"cn('sticky end-0 z-[1] w-20 bg-surface-sunken px-4', headerCellPad())\">\r\n <span class=\"sr-only\">{{ effectiveLabels().actionsColumnLabel }}</span>\r\n </th>\r\n }\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @if (showSkeleton()) {\r\n @for (i of skeletonIndexes(); track i) {\r\n <tr class=\"border-b border-hairline\">\r\n @if (selectable()) {\r\n <td [class]=\"cn('px-4', bodyCellPad())\"><div mfSkeleton class=\"h-4 w-4\"></div></td>\r\n }\r\n @if (expandable()) {\r\n <td [class]=\"cn('px-1.5', bodyCellPad())\"></td>\r\n }\r\n @for (col of visibleColumns(); track col.field) {\r\n <td [class]=\"cn('px-4', bodyCellPad())\">\r\n <div mfSkeleton class=\"h-4 w-full max-w-[10rem]\"></div>\r\n </td>\r\n }\r\n @if (hasRowActions()) {\r\n <td [class]=\"cn('px-4', bodyCellPad())\"></td>\r\n }\r\n </tr>\r\n }\r\n } @else if (rows().length === 0) {\r\n <tr>\r\n <td [attr.colspan]=\"columnSpan()\" class=\"px-4 py-6\">\r\n <mf-empty-state\r\n class=\"block\"\r\n [title]=\"\r\n isFiltered() ? effectiveLabels().noResultsTitle : effectiveLabels().emptyTitle\r\n \"\r\n [description]=\"\r\n isFiltered()\r\n ? effectiveLabels().noResultsDescription\r\n : effectiveLabels().emptyDescription\r\n \"\r\n >\r\n <span icon mfIcon [size]=\"28\">{{ isFiltered() ? 'search_off' : 'inbox' }}</span>\r\n @if (isFiltered()) {\r\n <button\r\n action\r\n mfButton\r\n appearance=\"text\"\r\n tone=\"primary\"\r\n type=\"button\"\r\n (click)=\"clearAllFilters()\"\r\n >\r\n {{ effectiveLabels().clearFilters }}\r\n </button>\r\n }\r\n </mf-empty-state>\r\n </td>\r\n </tr>\r\n } @else {\r\n @if (virtualRange(); as range) {\r\n @if (range.top > 0) {\r\n <tr aria-hidden=\"true\">\r\n <td\r\n class=\"border-0 p-0\"\r\n [attr.colspan]=\"columnSpan()\"\r\n [style.height.px]=\"range.top\"\r\n ></td>\r\n </tr>\r\n }\r\n }\r\n @for (row of displayRows(); track trackByRow($index, row)) {\r\n <tr\r\n data-row\r\n [class]=\"rowClasses(row)\"\r\n [attr.aria-rowindex]=\"virtual() ? rowIndexOffset() + $index + 2 : null\"\r\n (dblclick)=\"rowDblClick.emit(row)\"\r\n >\r\n @if (selectable()) {\r\n <td\r\n [class]=\"cn('px-4', bodyCellPad(), pinBodyClasses('__select', row))\"\r\n [style.inset-inline-start.px]=\"pinStart('__select')\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n mfCheckbox\r\n [checked]=\"isChecked(row)\"\r\n [attr.aria-label]=\"rowSelectAriaLabel(row)\"\r\n (change)=\"onCheckRow(row, $any($event.target).checked)\"\r\n />\r\n </td>\r\n }\r\n @if (expandable()) {\r\n <td\r\n [class]=\"cn('px-1.5', bodyCellPad(), pinBodyClasses('__expand', row))\"\r\n [style.inset-inline-start.px]=\"pinStart('__expand')\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex size-7 appearance-none items-center justify-center rounded-md border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [attr.aria-expanded]=\"isExpanded(row)\"\r\n [attr.aria-controls]=\"isExpanded(row) ? expandedRowId($index) : null\"\r\n [attr.aria-label]=\"expandAriaLabel(row)\"\r\n (click)=\"toggleExpanded(row)\"\r\n >\r\n <span\r\n mfIcon\r\n [size]=\"18\"\r\n class=\"transition-transform duration-base ease-emphasis rtl:-scale-x-100\"\r\n [class.rotate-90]=\"isExpanded(row)\"\r\n [class.rtl:-rotate-90]=\"isExpanded(row)\"\r\n >chevron_right</span\r\n >\r\n </button>\r\n </td>\r\n }\r\n @for (col of visibleColumns(); track col.field) {\r\n <td\r\n [attr.data-col]=\"col.field\"\r\n [class]=\"\r\n cn(\r\n 'max-w-0 px-4',\r\n bodyCellPad(),\r\n cellClasses(col),\r\n alignClass(resolvedAlign(col)),\r\n pinBodyClasses(col.field, row)\r\n )\r\n \"\r\n [style.inset-inline-start.px]=\"pinStart(col.field)\"\r\n [title]=\"!col.cellTemplate ? cellText(row, col) : null\"\r\n >\r\n @if (col.cellTemplate) {\r\n <ng-container\r\n *ngTemplateOutlet=\"col.cellTemplate; context: { $implicit: row }\"\r\n />\r\n } @else {\r\n <span>{{ row[col.field] }}</span>\r\n }\r\n </td>\r\n }\r\n @if (hasRowActions()) {\r\n <td [class]=\"stickyActionClasses(row)\">\r\n <div\r\n class=\"flex items-center justify-end gap-1 opacity-100 [@media(hover:hover)]:opacity-0 [@media(hover:hover)]:group-hover/row:opacity-100 group-focus-within/row:opacity-100\"\r\n >\r\n @if (rowActions().edit) {\r\n <!--\r\n `tone=\"info\"` (mavi) BİLEREK `neutral` DEĞİL — satır\r\n hover'ı zaten `bg-surface-alt` boyuyor (bkz. rowBg()),\r\n `neutral`'ın kendi `hover:bg-surface-alt`'ı AYNI renk\r\n olduğundan buton üzerine gelince görsel hiçbir şey\r\n değişmiyordu (gerçek kullanıcı bulgusu). Delete'in\r\n `danger` (kırmızı ton) hover'ı bu sorunu yaşamıyordu —\r\n aynı mantık: Edit'e de arka planla çakışmayan kendi\r\n renk tonu (mavi `info/5`) verildi.\r\n -->\r\n <button\r\n mfButton\r\n tone=\"info\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"effectiveLabels().edit\"\r\n [mfTooltip]=\"effectiveLabels().edit\"\r\n (click)=\"edit.emit(row)\"\r\n >\r\n <span mfIcon [size]=\"18\">edit</span>\r\n </button>\r\n }\r\n @if (rowActions().delete) {\r\n <button\r\n mfButton\r\n tone=\"danger\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"effectiveLabels().delete\"\r\n [mfTooltip]=\"effectiveLabels().delete\"\r\n (click)=\"delete.emit(row)\"\r\n >\r\n <span mfIcon [size]=\"18\">delete</span>\r\n </button>\r\n }\r\n </div>\r\n </td>\r\n }\r\n </tr>\r\n @if (expandable() && isExpanded(row)) {\r\n <tr [id]=\"expandedRowId($index)\" class=\"border-b border-b-hairline bg-surface-sunken\">\r\n <td [attr.colspan]=\"columnSpan()\" class=\"p-0\">\r\n <!-- Yatay kaydırmada ayrıntı görünür alanda sabit kalır (tablo genişliğiyle kaymaz). -->\r\n <div\r\n class=\"sticky start-0 box-border px-4 py-3\"\r\n [style.width.px]=\"viewportWidth() || null\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"expandedRowTemplate()!; context: { $implicit: row }\"\r\n />\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n }\r\n @if (virtualRange(); as range) {\r\n @if (range.bottom > 0) {\r\n <tr aria-hidden=\"true\">\r\n <td\r\n class=\"border-0 p-0\"\r\n [attr.colspan]=\"columnSpan()\"\r\n [style.height.px]=\"range.bottom\"\r\n ></td>\r\n </tr>\r\n }\r\n }\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n\r\n <div class=\"border-t border-border bg-surface-sunken\">\r\n @if (virtual()) {\r\n <p class=\"px-4 py-2.5 text-sm text-fg-muted tabular-nums\">\r\n {{ rowsTotal() }} {{ effectiveLabels().pagination.records }}\r\n </p>\r\n } @else {\r\n <mf-table-pagination\r\n [page]=\"pageState().pageNumber\"\r\n [pageSize]=\"pageState().pageSize\"\r\n [total]=\"rowsTotal()\"\r\n [pageSizeOptions]=\"pageSizeOptions()\"\r\n [labels]=\"effectiveLabels().pagination\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n />\r\n }\r\n </div>\r\n</div>\r\n","import {\r\n DestroyRef,\r\n Directive,\r\n ElementRef,\r\n afterNextRender,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { isRtl, scrollFromInlineStart } from '@mesgflow/ui-kit/core';\r\n\r\n/**\r\n * `<div mfTabScroller>` — taşan bir sekme şeridini kaydırılabilir yapar:\r\n * native scrollbar'ı gizler, kenar \"solma\" maskesini (`mask-image`)\r\n * kaydırılabilir yöne göre günceller, `canScrollStart`/`canScrollEnd`\r\n * sinyallerini dışarı verir (ok butonlarının görünürlüğü için — bkz.\r\n * `tab-list.html`/`tab-strip.html`, ikisi de bu directive'i paylaşıyor).\r\n *\r\n * `orientation` varsayılanı `'horizontal'` — `TabStrip` (üst sekme çubuğu)\r\n * bunu hiç geçmez, davranışı DEĞİŞMEZ. Dikey bir grup rayı gerektiren\r\n * tüketiciler `orientation=\"vertical\"` geçer (bkz. `tab-list.ts`).\r\n *\r\n * `mask-image` template'te `[style.mask-image]` ile DEĞİL, doğrudan\r\n * `style.setProperty` ile yazılıyor — Angular'ın stil binding sözdizimi\r\n * tire içeren (`-webkit-`) property adlarını binding adı olarak kabul\r\n * etmiyor, ikisini TEK yerden (burada) senkron yazmak için imperatif yol\r\n * daha güvenli (bkz. Tooltip'in de DOM'a doğrudan yazdığı emsal).\r\n */\r\n@Directive({\r\n selector: '[mfTabScroller]',\r\n host: {\r\n class: '[scrollbar-width:none] [&::-webkit-scrollbar]:hidden',\r\n '[class.flex]': 'orientation() === \"horizontal\"',\r\n '[class.min-w-0]': 'orientation() === \"horizontal\"',\r\n '[class.overflow-x-auto]': 'orientation() === \"horizontal\"',\r\n '[class.min-h-0]': 'orientation() === \"vertical\"',\r\n '[class.overflow-y-auto]': 'orientation() === \"vertical\"',\r\n '(scroll)': 'updateEdges()',\r\n },\r\n})\r\nexport class TabScroller {\r\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\r\n private readonly vertical = computed(() => this.orientation() === 'vertical');\r\n\r\n readonly canScrollStart = signal(false);\r\n readonly canScrollEnd = signal(false);\r\n\r\n constructor() {\r\n const destroyRef = inject(DestroyRef);\r\n\r\n afterNextRender(() => {\r\n this.updateEdges();\r\n if (typeof ResizeObserver === 'undefined') return;\r\n const observer = new ResizeObserver(() => this.updateEdges());\r\n observer.observe(this.el.nativeElement);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n\r\n effect(() => {\r\n const start = this.canScrollStart() ? 24 : 0;\r\n const end = this.canScrollEnd() ? 24 : 0;\r\n // Maske satır başından sonuna — RTL'de başlangıç sağ kenar.\r\n const direction = this.vertical()\r\n ? 'to bottom'\r\n : isRtl(this.el.nativeElement)\r\n ? 'to left'\r\n : 'to right';\r\n const mask = `linear-gradient(${direction}, transparent, black ${start}px, black calc(100% - ${end}px), transparent 100%)`;\r\n this.el.nativeElement.style.setProperty('mask-image', mask);\r\n this.el.nativeElement.style.setProperty('-webkit-mask-image', mask);\r\n });\r\n }\r\n\r\n scrollByDir(dir: -1 | 1): void {\r\n const node = this.el.nativeElement;\r\n if (this.vertical()) node.scrollBy({ top: dir * node.clientHeight * 0.8, behavior: 'smooth' });\r\n else {\r\n // `dir` mantıksal (−1 başa, +1 sona); RTL'de sona gitmek scrollLeft'i AZALTIR.\r\n const sign = isRtl(node) ? -1 : 1;\r\n node.scrollBy({ left: sign * dir * node.clientWidth * 0.8, behavior: 'smooth' });\r\n }\r\n }\r\n\r\n scrollIntoViewIfNeeded(target: HTMLElement): void {\r\n // jsdom (birim testleri) Element.scrollIntoView'ı UYGULAMIYOR — ResizeObserver'daki\r\n // AYNI savunma deseni (bkz. constructor), gerçek tarayıcıda etkisiz bir NO-OP.\r\n target.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\r\n }\r\n\r\n updateEdges(): void {\r\n const node = this.el.nativeElement;\r\n if (this.vertical()) {\r\n const max = node.scrollHeight - node.clientHeight;\r\n this.canScrollStart.set(node.scrollTop > 1);\r\n this.canScrollEnd.set(max > 1 && node.scrollTop < max - 1);\r\n return;\r\n }\r\n const max = node.scrollWidth - node.clientWidth;\r\n const offset = scrollFromInlineStart(node); // RTL'de scrollLeft negatif\r\n this.canScrollStart.set(offset > 1);\r\n this.canScrollEnd.set(max > 1 && offset < max - 1);\r\n }\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport type TabsVariant = 'underline' | 'card';\r\nexport type TabsOrientation = 'horizontal' | 'vertical';\r\n\r\n/**\r\n * Bkz. `tab-list.ts`. `underline`'da ray AYRI, kayan bir `<span>` (JS ile\r\n * konumlanır — bkz. `TabList.positionIndicator`); `card`'da ray HER sekmenin\r\n * kendi `box-shadow`'unda yaşar (bkz. `tabVariants` compound'u), çünkü\r\n * `card` görünümünde her sekme zaten kendi kenarlığıyla ayrık bir kutu —\r\n * kayan tek bir gösterge o kutuların üstünden \"kayarak\" geçmezdi, doğal\r\n * durmazdı. `relative` — kayan gösterge `absolute` konumlanıyor buna göre.\r\n *\r\n * `orientation` ekseni sol dikey grup rayı gerektiren ekranlar için eklendi —\r\n * `@angular/aria/tabs`'ın ARIA/klavye desteği zaten yön-agnostik\r\n * (`hostDirectives`'in `orientation` girdisi, bkz. `tab-list.ts`), eksik\r\n * olan sadece bu görsel katmandı.\r\n */\r\nexport const tabListVariants = cva('relative flex', {\r\n variants: {\r\n variant: {\r\n underline: 'gap-1',\r\n card: 'gap-1.5',\r\n },\r\n orientation: {\r\n horizontal: 'min-w-max items-center',\r\n vertical: 'w-full flex-col items-stretch',\r\n },\r\n },\r\n defaultVariants: { variant: 'underline', orientation: 'horizontal' },\r\n});\r\n\r\n/**\r\n * `selected`/`disabled` burada `aria-selected`/`aria-disabled` CSS\r\n * seçicileriyle DEĞİL, `Tab`'ın kendi `computed()`'ıyla (bkz. `tab.ts`)\r\n * okunan sinyal değerleriyle besleniyor — kod tabanındaki yerleşik desen\r\n * (Select'in `optionClasses`, Table'ın `rowClasses`) TS'te hesaplanan koşullu\r\n * class, CSS attribute-selector değil.\r\n */\r\nexport const tabVariants = cva(\r\n 'relative inline-flex shrink-0 cursor-pointer appearance-none items-center gap-1.5 whitespace-nowrap border-0 bg-transparent text-sm text-fg-muted transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\r\n 'focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring',\r\n {\r\n variants: {\r\n variant: {\r\n underline: 'rounded-sm px-3 py-2',\r\n card: 'rounded-sm border border-transparent px-3 py-1.5',\r\n },\r\n orientation: {\r\n horizontal: '',\r\n vertical: 'w-full justify-start text-start',\r\n },\r\n selected: {\r\n true: '',\r\n false: 'hover:bg-surface-alt hover:text-fg',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50 active:scale-100',\r\n false: '',\r\n },\r\n },\r\n compoundVariants: [\r\n { variant: 'underline', selected: true, class: 'text-fg font-semibold' },\r\n /*\r\n * `card` — aktif sekme `bg-canvas` (içerik zeminiyle birleşir) + 2px dolu\r\n * ray. Yatayda alt kenar, dikeyde ön (sol) kenar — dikey grup rayı bunu\r\n * kullanıyor. Ray rengi `--mf-accent-fill` (mode-swapped: light 900 /\r\n * dark 400) — diğer TÜM \"ray\" kullanımlarıyla (Sidebar aktif nav,\r\n * Table seçili satır, ikisi de `border-s-accent-fill`) TUTARLI. `var()`\r\n * `@theme inline`'ın `--color-accent-fill` katmanını DEĞİL doğrudan\r\n * `--mf-*`'i hedefliyor — `box-shadow` arbitrary value'su bir utility\r\n * DEĞİL, Tailwind'in \"bu inline değişkeni emit et\" taramasına\r\n * güvenmek yerine kaynağa doğrudan bağlanmak daha sağlam.\r\n */\r\n {\r\n variant: 'card',\r\n orientation: 'horizontal',\r\n selected: true,\r\n class:\r\n 'border-border bg-canvas text-fg font-semibold shadow-[inset_0_-2px_0_0_var(--mf-accent-fill)]',\r\n },\r\n {\r\n variant: 'card',\r\n orientation: 'vertical',\r\n selected: true,\r\n class:\r\n 'border-border bg-canvas text-fg font-semibold shadow-[inset_2px_0_0_0_var(--mf-accent-fill)]',\r\n },\r\n ],\r\n defaultVariants: {\r\n variant: 'underline',\r\n orientation: 'horizontal',\r\n selected: false,\r\n disabled: false,\r\n },\r\n },\r\n);\r\n\r\nexport type TabSelected = VariantProps<typeof tabVariants>['selected'];\r\n","import {\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n afterNextRender,\r\n afterRenderEffect,\r\n computed,\r\n inject,\r\n input,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { TabList as AriaTabList } from '@angular/aria/tabs';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { cn, MF_TABS_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { TabScroller } from './tab-scroller';\r\nimport { tabListVariants, type TabsVariant } from './tabs.variants';\r\n\r\n/**\r\n * `<mf-tab-list [(selectedTab)]=\"active\" variant=\"underline\">…</mf-tab-list>`\r\n * — `mf-tabs` içine konur, `mfTab` butonlarını sarar. ARIA/klavye\r\n * (Ok tuşları/Home/End) `@angular/aria/tabs`'ın `TabList` pattern'inden\r\n * `hostDirectives` ile geliyor (bkz. `tabs.ts` üstündeki not).\r\n *\r\n * İki premium detay burada yaşıyor:\r\n * 1. **Kayan ray göstergesi** (`underline` varyantı) — aktif sekme\r\n * değişince `positionIndicator()` DOM'dan `[aria-selected=\"true\"]`\r\n * elemanın `offsetLeft`/`offsetWidth`'ini (yatayda) ya da `offsetTop`/\r\n * `offsetHeight`'ını (dikeyde) ölçüp göstergeyi kaydırıyor (emsal:\r\n * `table-pagination.ts`'in odak restorasyonundaki `afterRenderEffect` +\r\n * `viewChild(ElementRef)` deseni). `ResizeObserver` yeniden boyutlanmada\r\n * (font yüklenmesi, viewport) yeniden ölçer. `card` varyantında AYRI bir\r\n * gösterge YOK — ray her sekmenin kendi `box-shadow`'unda yaşıyor\r\n * (bkz. tabs.variants.ts).\r\n * 2. **Taşma yönetimi** — `mfTabScroller` (bkz. o dosya) kaydırma+kenar\r\n * solma maskesi sağlıyor; ok butonları SADECE o yönde taşma varken\r\n * render edilir. Aktif sekme değişince görünür alana kaydırılır.\r\n *\r\n * `tab-list.html`'deki sarmalayıcı `<div>`'in çapraz eksen hizalaması BİLEREK\r\n * yöne göre koşullu: dikeyde (`flex-col`) çapraz eksen GENİŞLİK olur, `items-\r\n * center` orada \"çocukları raya GERME, kendi içerik genişliğine küçült\" demek\r\n * — bu, genişliğin `mfTabScroller`/`#row`/butonlara hiç iletilmemesine ve\r\n * `truncate`'in (role-form.html'deki İngilizce grup adlarıyla canlı\r\n * doğrulandı) hiç devreye girmeden ham/elipsissiz kırpılmasına yol açan\r\n * GERÇEK bir bugdu. `items-stretch` çapraz ekseni doğru şekilde geriyor —\r\n * bunu tekrar `items-center`'a \"sadeleştirme\".\r\n *\r\n * `orientation` girdisi `@angular/aria`'nın `TabList` pattern'inden\r\n * `hostDirectives` ile geliyor (ARIA/klavye zaten yön-agnostik) — burada\r\n * ikinci kez `input()` olarak TANIMLANMIYOR (NG2017, bkz. `TabPanel.\r\n * preserveContent`'teki aynı kısıt), `ariaTabList.orientation()` üzerinden\r\n * `protected readonly orientation` olarak okunuyor; `Tab` (tab.ts) bunu\r\n * `variant()` ile aynı `inject()` deseniyle ebeveynden alıyor.\r\n */\r\n@Component({\r\n selector: 'mf-tab-list',\r\n imports: [Button, Icon, TabScroller],\r\n hostDirectives: [\r\n {\r\n directive: AriaTabList,\r\n inputs: [\r\n 'orientation',\r\n 'wrap',\r\n 'softDisabled',\r\n 'focusMode',\r\n 'selectionMode',\r\n 'disabled',\r\n 'selectedTab',\r\n ],\r\n outputs: ['selectedTabChange'],\r\n },\r\n ],\r\n host: { class: 'block' },\r\n templateUrl: './tab-list.html',\r\n})\r\nexport class TabList {\r\n readonly variant = input<TabsVariant>('underline');\r\n readonly scrollStartLabel = input<string>();\r\n readonly scrollEndLabel = input<string>();\r\n\r\n private readonly tabsLabels = inject(MF_TABS_LABELS);\r\n protected readonly effectiveScrollStartLabel = computed(\r\n () => this.scrollStartLabel() ?? this.tabsLabels().scrollStart,\r\n );\r\n protected readonly effectiveScrollEndLabel = computed(\r\n () => this.scrollEndLabel() ?? this.tabsLabels().scrollEnd,\r\n );\r\n\r\n /** `mfTab` (bkz. tab.ts) varyantı buradan `inject()` ile okuyor — tek kaynak. */\r\n protected readonly ariaTabList = inject(AriaTabList);\r\n\r\n /** `Tab` (tab.ts) bunu `variant()` ile aynı `inject()` deseniyle okuyor — bu yüzden `public`. */\r\n readonly orientation = computed(() => this.ariaTabList.orientation());\r\n protected readonly isVertical = computed(() => this.orientation() === 'vertical');\r\n\r\n protected readonly listClasses = computed(() =>\r\n cn(tabListVariants({ variant: this.variant(), orientation: this.orientation() })),\r\n );\r\n protected readonly indicatorClasses = computed(() =>\r\n cn(\r\n 'pointer-events-none absolute rounded-full bg-accent-fill opacity-0 transition-[transform,width,height,opacity] duration-base ease-emphasis',\r\n this.isVertical() ? 'top-0 left-0 w-0.5' : 'bottom-0 left-0 h-0.5',\r\n ),\r\n );\r\n\r\n protected readonly scroller = viewChild(TabScroller);\r\n protected readonly showStartArrow = computed(() => this.scroller()?.canScrollStart() ?? false);\r\n protected readonly showEndArrow = computed(() => this.scroller()?.canScrollEnd() ?? false);\r\n\r\n private readonly rowEl = viewChild<ElementRef<HTMLElement>>('row');\r\n private readonly indicatorEl = viewChild<ElementRef<HTMLElement>>('indicator');\r\n\r\n constructor() {\r\n const destroyRef = inject(DestroyRef);\r\n\r\n afterRenderEffect(() => {\r\n this.ariaTabList.selectedTab();\r\n this.positionIndicator();\r\n });\r\n\r\n afterNextRender(() => {\r\n const row = this.rowEl()?.nativeElement;\r\n if (!row || typeof ResizeObserver === 'undefined') return;\r\n const observer = new ResizeObserver(() => this.positionIndicator());\r\n observer.observe(row);\r\n destroyRef.onDestroy(() => observer.disconnect());\r\n });\r\n }\r\n\r\n private positionIndicator(): void {\r\n const row = this.rowEl()?.nativeElement;\r\n const indicator = this.indicatorEl()?.nativeElement;\r\n if (!row || !indicator) return;\r\n\r\n const active = row.querySelector<HTMLElement>('[aria-selected=\"true\"]');\r\n if (!active) {\r\n indicator.style.opacity = '0';\r\n return;\r\n }\r\n indicator.style.opacity = '1';\r\n if (this.isVertical()) {\r\n indicator.style.transform = `translateY(${active.offsetTop}px)`;\r\n indicator.style.height = `${active.offsetHeight}px`;\r\n } else {\r\n indicator.style.transform = `translateX(${active.offsetLeft}px)`;\r\n indicator.style.width = `${active.offsetWidth}px`;\r\n }\r\n this.scroller()?.scrollIntoViewIfNeeded(active);\r\n }\r\n}\r\n","<div\r\n class=\"flex gap-1\"\r\n [class.flex-col]=\"isVertical()\"\r\n [class.items-center]=\"!isVertical()\"\r\n [class.items-stretch]=\"isVertical()\"\r\n>\r\n @if (showStartArrow()) {\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n class=\"shrink-0\"\r\n [attr.aria-label]=\"effectiveScrollStartLabel()\"\r\n (click)=\"scroller()?.scrollByDir(-1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">{{\r\n isVertical() ? 'keyboard_arrow_up' : 'chevron_left'\r\n }}</span>\r\n </button>\r\n }\r\n\r\n <div mfTabScroller [orientation]=\"orientation()\">\r\n <div #row [class]=\"listClasses()\">\r\n <ng-content />\r\n @if (variant() === 'underline') {\r\n <span #indicator [class]=\"indicatorClasses()\"></span>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showEndArrow()) {\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n class=\"shrink-0\"\r\n [attr.aria-label]=\"effectiveScrollEndLabel()\"\r\n (click)=\"scroller()?.scrollByDir(1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">{{\r\n isVertical() ? 'keyboard_arrow_down' : 'chevron_right'\r\n }}</span>\r\n </button>\r\n }\r\n</div>\r\n","import { Directive, computed, inject } from '@angular/core';\r\nimport { Tab as AriaTab } from '@angular/aria/tabs';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { TabList } from './tab-list';\r\nimport { tabVariants } from './tabs.variants';\r\n\r\n/**\r\n * `<button mfTab value=\"genel\">Genel</button>` — bir `mf-tab-list` içine\r\n * konur. ARIA/klavye/seçim davranışı `@angular/aria/tabs`'ın `Tab`\r\n * pattern'inden `hostDirectives` ile geliyor (bkz. `tabs.ts` üstündeki not);\r\n * bu directive sadece görsel katmanı ekliyor. `value`/`disabled`/`id`\r\n * girdileri `hostDirectives`'in `inputs` listesiyle dışarı açıldı — tüketici\r\n * doğrudan `[value]`/`[disabled]` bağlar, `ngTab` attribute'unu YAZMAZ.\r\n *\r\n * Varyant (`underline`/`card`) ebeveyn `mf-tab-list`'ten `inject()` ile\r\n * okunuyor — `Tab` kendi varyant girdisini TAŞIMIYOR, tek kaynak listede.\r\n */\r\n@Directive({\r\n selector: 'button[mfTab]',\r\n hostDirectives: [{ directive: AriaTab, inputs: ['value', 'disabled', 'id'] }],\r\n host: { '[attr.type]': \"'button'\", '[class]': 'classes()' },\r\n})\r\nexport class Tab {\r\n private readonly ariaTab = inject(AriaTab);\r\n private readonly tabList = inject(TabList, { optional: true });\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n tabVariants({\r\n variant: this.tabList?.variant() ?? 'underline',\r\n orientation: this.tabList?.orientation() ?? 'horizontal',\r\n selected: this.ariaTab.selected(),\r\n disabled: this.ariaTab.disabled(),\r\n }),\r\n ),\r\n );\r\n}\r\n","import { Component, inject } from '@angular/core';\r\nimport { TabPanel as AriaTabPanel } from '@angular/aria/tabs';\r\n\r\n/**\r\n * ```html\r\n * <mf-tab-panel value=\"genel\">\r\n * <ng-template ngTabContent>İçerik…</ng-template>\r\n * </mf-tab-panel>\r\n * ```\r\n *\r\n * `ngTabContent` (`@angular/aria/tabs`'ın `TabContent`'i) doğrudan\r\n * kullanılır — ayrı bir `appTabContent` sarmalayıcı YOK, tek katmanlı bir\r\n * yapıya sarmalayıcı eklemenin karşılığı yok (bkz. `TabContent`'in kendi\r\n * `DeferredContent` mekanizması, panel aktif olana kadar içeriği hiç\r\n * oluşturmaz — lazy). `<ng-content />` bilerek TEK satır: panelin kendi\r\n * `role=\"tabpanel\"`/`tabindex`/`inert` host bağlamaları `hostDirectives`'ten\r\n * geliyor, ekstra bir sarmalayıcıya gerek yok.\r\n *\r\n * `[class.hidden]` ELLE eklendi — `AriaTabPanel`'in `inert` attribute'u\r\n * elemanı erişilebilirlik ağacından/etkileşimden çıkarıyor ama GÖRSEL olarak\r\n * gizlemiyor (kütüphanenin kendi dokümantasyonu: \"Proper styling is required\r\n * for visual hiding\" — gerçek bulgu, ui-kit'te pasif panellerin boş\r\n * dolgulu kutular olarak GÖRÜNÜR kaldığı görüldü).\r\n */\r\n@Component({\r\n selector: 'mf-tab-panel',\r\n hostDirectives: [{ directive: AriaTabPanel, inputs: ['value', 'id'] }],\r\n host: {\r\n class:\r\n 'block focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring',\r\n '[class.hidden]': '!ariaTabPanel.visible()',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class TabPanel {\r\n protected readonly ariaTabPanel = inject(AriaTabPanel);\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { cn, MF_TABS_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { TabScroller } from './tab-scroller';\r\nimport { tabVariants } from './tabs.variants';\r\nimport type { TabStripItem } from './tab-strip.model';\r\n\r\n/**\r\n * `<mf-tab-strip [items]=\"items()\" [(activeKey)]=\"active\" (close)=\"onClose($event)\" />`\r\n *\r\n * `mf-tabs`/`mf-tab-list` (bkz. `tabs.ts`) ARIA `tabs` pattern'i PANEL\r\n * varsayar (`aria-controls` gerçek bir `role=tabpanel`'e işaret eder) — bu\r\n * şerit ise bir ROTA/DOKÜMAN şeridi: panel yok, içerik `router-outlet`'ten\r\n * gelir, sekmeler kapatılabilir. Bu yüzden `@angular/aria/tabs`'ı DEĞİL,\r\n * elle roving tabindex kullanıyor (emsal: `table-pagination.ts`'in\r\n * `onNavKeydown`'ı) — ARIA `tab` rolü/`aria-selected` yine de elle\r\n * uygulanıyor, sadece pattern motoru YOK.\r\n *\r\n * Ok tuşları SADECE odağı taşır (`activeKey` DEĞİŞMEZ) — her ok vuruşunda\r\n * gerçek bir router navigasyonu tetiklemek (bkz. `TabsStore.activate`)\r\n * pahalı/istenmeyen bir yan etki olurdu. `Enter`/`Space` ya da tık asıl\r\n * seçimi commit eder. `Delete` odaktaki (kapatılabilir) sekmeyi kapatır.\r\n *\r\n * Kapatma butonu gerçek bir `<button>` ama tab elemanının kendisi `role=tab`\r\n * taşıyan bir `<div>` — `mfTab`'ın (aria Tabs sisteminin) aksine burada bir\r\n * `<button>` İÇİNE başka bir interaktif eleman GÖMÜLMÜYOR (geçersiz HTML\r\n * olurdu, bkz. `table-filter-bar.html`'deki chip deseni — aynı gerekçeyle\r\n * orada da İKİ KARDEŞ buton var, iç içe değil). Kapatma butonu bilerek\r\n * `tabindex=\"-1\"` — birincil roving-tabindex sırasının parçası değil (fare/\r\n * dokunma birincil, `Delete` tuşu klavye eşdeğeri).\r\n *\r\n * Sağ tık menüsü TAMAMEN tüketiciye ait — bu bileşen belirli bir dropdown\r\n * kütüphanesini BİLMİYOR (bkz. projects/ui-kit/README.md \"Directive mi, component\r\n * mi?\" ruhu — dropdown-agnostik kalma), sadece ham `(itemContextMenu)` olayını\r\n * yukarı veriyor.\r\n */\r\n@Component({\r\n selector: 'mf-tab-strip',\r\n exportAs: 'mfTabStrip',\r\n imports: [Icon, TabScroller],\r\n host: { class: 'block', role: 'tablist' },\r\n templateUrl: './tab-strip.html',\r\n})\r\nexport class TabStrip {\r\n readonly items = input.required<TabStripItem[]>();\r\n readonly activeKey = model.required<string>();\r\n /** Verilirse aktif sekmenin `aria-controls`'ü buna işaret eder (tek bir paylaşımlı içerik bölgesi — router-outlet). */\r\n readonly contentId = input<string | null>(null);\r\n readonly scrollStartLabel = input<string>();\r\n readonly scrollEndLabel = input<string>();\r\n /** Kapatma butonunun `aria-label`'ı — sekmenin kendi etiketiyle birleştirilir (ör. \"Close: Roles\"). */\r\n readonly closeLabel = input<string>();\r\n\r\n private readonly tabsLabels = inject(MF_TABS_LABELS);\r\n protected readonly effectiveScrollStartLabel = computed(\r\n () => this.scrollStartLabel() ?? this.tabsLabels().scrollStart,\r\n );\r\n protected readonly effectiveScrollEndLabel = computed(\r\n () => this.scrollEndLabel() ?? this.tabsLabels().scrollEnd,\r\n );\r\n protected readonly effectiveCloseLabel = computed(\r\n () => this.closeLabel() ?? this.tabsLabels().close,\r\n );\r\n\r\n // `close` adı native DOM `close` olayıyla çakışıyor (@angular-eslint/no-output-native);\r\n // mevcut public API — yeniden adlandırma kırıcı, ileri bir sürümde ele alınacak.\r\n // eslint-disable-next-line @angular-eslint/no-output-native\r\n readonly close = output<string>();\r\n readonly itemContextMenu = output<{ event: MouseEvent; item: TabStripItem }>();\r\n\r\n protected readonly focusedKey = signal<string | null>(null);\r\n\r\n protected readonly scroller = viewChild(TabScroller);\r\n protected readonly showStartArrow = computed(() => this.scroller()?.canScrollStart() ?? false);\r\n protected readonly showEndArrow = computed(() => this.scroller()?.canScrollEnd() ?? false);\r\n\r\n private readonly rowEl = viewChild<ElementRef<HTMLElement>>('row');\r\n\r\n protected tabClasses(item: TabStripItem): string {\r\n return cn(\r\n tabVariants({ variant: 'card', selected: item.key === this.activeKey(), disabled: false }),\r\n 'pe-1.5',\r\n );\r\n }\r\n\r\n protected tabIndexFor(item: TabStripItem): number {\r\n const focused = this.focusedKey() ?? this.activeKey();\r\n return item.key === focused ? 0 : -1;\r\n }\r\n\r\n protected select(key: string): void {\r\n this.focusedKey.set(key);\r\n this.activeKey.set(key);\r\n }\r\n\r\n protected onCloseClick(event: MouseEvent, key: string): void {\r\n event.stopPropagation();\r\n this.close.emit(key);\r\n }\r\n\r\n protected onContextMenu(event: MouseEvent, item: TabStripItem): void {\r\n event.preventDefault();\r\n this.itemContextMenu.emit({ event, item });\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const items = this.items();\r\n if (items.length === 0) return;\r\n const currentKey = this.focusedKey() ?? this.activeKey();\r\n const index = items.findIndex((i) => i.key === currentKey);\r\n\r\n switch (event.key) {\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this.focusIndex(index <= 0 ? items.length - 1 : index - 1);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this.focusIndex(index === -1 || index === items.length - 1 ? 0 : index + 1);\r\n break;\r\n case 'Home':\r\n event.preventDefault();\r\n this.focusIndex(0);\r\n break;\r\n case 'End':\r\n event.preventDefault();\r\n this.focusIndex(items.length - 1);\r\n break;\r\n case 'Enter':\r\n case ' ':\r\n event.preventDefault();\r\n if (index !== -1) this.select(items[index]!.key);\r\n break;\r\n case 'Delete':\r\n if (index !== -1 && items[index]!.closable) {\r\n event.preventDefault();\r\n this.close.emit(items[index]!.key);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private focusIndex(index: number): void {\r\n const item = this.items()[index];\r\n if (!item) return;\r\n this.focusedKey.set(item.key);\r\n queueMicrotask(() => {\r\n const btn = this.rowEl()?.nativeElement.querySelector<HTMLElement>(\r\n `[data-tab-key=\"${item.key}\"]`,\r\n );\r\n btn?.focus();\r\n if (btn) this.scroller()?.scrollIntoViewIfNeeded(btn);\r\n });\r\n }\r\n}\r\n","<div class=\"flex items-center gap-1\">\r\n @if (showStartArrow()) {\r\n <button\r\n type=\"button\"\r\n class=\"shrink-0 appearance-none border-0 bg-transparent p-1 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveScrollStartLabel()\"\r\n (click)=\"scroller()?.scrollByDir(-1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_left</span>\r\n </button>\r\n }\r\n\r\n <!-- Kaydırma kapsayıcısı odaklanabilir değil — ok tuşu gezinmesi burada delege; gerçek odak roving tabindex ile alt sekmelerde. -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <div mfTabScroller (keydown)=\"onKeydown($event)\">\r\n <div #row class=\"flex items-center gap-1 py-1\">\r\n @for (item of items(); track item.key) {\r\n <!-- Enter/Space seçimi üstteki kapsayıcının (keydown)'ında yönetiliyor (roving tabindex deseni). -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/click-events-have-key-events -->\r\n <div\r\n role=\"tab\"\r\n [attr.data-tab-key]=\"item.key\"\r\n [attr.aria-selected]=\"item.key === activeKey()\"\r\n [attr.aria-controls]=\"item.key === activeKey() ? contentId() : null\"\r\n [tabindex]=\"tabIndexFor(item)\"\r\n [class]=\"tabClasses(item)\"\r\n (click)=\"select(item.key)\"\r\n (contextmenu)=\"onContextMenu($event, item)\"\r\n >\r\n @if (item.icon) {\r\n <span mfIcon [size]=\"14\">{{ item.icon }}</span>\r\n }\r\n <span class=\"truncate\">{{ item.label }}</span>\r\n @if (item.closable) {\r\n <button\r\n type=\"button\"\r\n tabindex=\"-1\"\r\n class=\"ms-0.5 inline-flex h-4 w-4 shrink-0 appearance-none items-center justify-center rounded-xs border-0 bg-transparent p-0 text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-surface-active hover:text-fg\"\r\n [attr.aria-label]=\"effectiveCloseLabel() + ': ' + item.label\"\r\n (click)=\"onCloseClick($event, item.key)\"\r\n >\r\n <span mfIcon [size]=\"13\">close</span>\r\n </button>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n @if (showEndArrow()) {\r\n <button\r\n type=\"button\"\r\n class=\"shrink-0 appearance-none border-0 bg-transparent p-1 text-fg-subtle transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveScrollEndLabel()\"\r\n (click)=\"scroller()?.scrollByDir(1)\"\r\n >\r\n <span mfIcon [size]=\"16\" class=\"rtl:-scale-x-100\">chevron_right</span>\r\n </button>\r\n }\r\n</div>\r\n","import { Component } from '@angular/core';\r\nimport { Tabs as AriaTabs } from '@angular/aria/tabs';\r\n\r\n/**\r\n * `<mf-tabs><mf-tab-list>...</mf-tab-list><mf-tab-panel>...</mf-tab-panel></mf-tabs>`\r\n *\r\n * Salt bir kapsayıcı — tüm ARIA/klavye/state mantığı `@angular/aria/tabs`'ın\r\n * `Tabs` pattern'inden `hostDirectives` ile ödünç alınıyor (bkz.\r\n * projects/ui-kit/README.md \"a11y checklist\": \"mümkün olduğunca `@angular/aria`...\r\n * elle ARIA yazmak son çare\"). `hostDirectives`, ana bileşenin (`mf-tabs`)\r\n * host elemanına `Tabs`'ın DI sağlayıcısını (`TABS` token) ekliyor — alttaki\r\n * `mf-tab-list`/`mf-tab-panel` bunu `inject()` ile bulup kendini\r\n * kaydediyor, template'te `ngTabs` attribute'unu ELLE yazmaya gerek yok\r\n * (`hostDirectives`'te selector yok sayılır, bkz. Angular directive\r\n * composition API).\r\n */\r\n@Component({\r\n selector: 'mf-tabs',\r\n exportAs: 'mfTabs',\r\n hostDirectives: [AriaTabs],\r\n host: { class: 'block' },\r\n template: '<ng-content />',\r\n})\r\nexport class Tabs {}\r\n","import { Component, ElementRef, forwardRef, input, model, viewChild } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Chip } from '@mesgflow/ui-kit/chip';\r\nimport { InputGroup } from '@mesgflow/ui-kit/input';\r\n\r\n/**\r\n * `<mf-tag-input [(value)]=\"tags\" placeholder=\"Etiket ekle...\" />` — Enter\r\n * veya virgül taslak metni bir etikete çevirir, her etiket kaldırılabilir\r\n * bir `Chip` olarak görünür. Taslak BOŞKEN Backspace SON etiketi kaldırır\r\n * (yaygın \"tag input\" klavye deseni — ayrı bir onay adımı gerekmez, geri\r\n * alması kolay bir eylem). `InputGroup`'un `[wrap]=\"true\"` moduyla (bkz.\r\n * `input-group.ts`) etiketler çoğaldıkça kabuk BÜYÜR, taşırmaz.\r\n */\r\n@Component({\r\n selector: 'mf-tag-input',\r\n exportAs: 'mfTagInput',\r\n imports: [Chip, InputGroup],\r\n host: { class: 'inline-flex', '[class.w-full]': 'fullWidth()' },\r\n template: `\r\n <mf-input-group [wrap]=\"true\" [hasError]=\"hasError()\" [disabled]=\"disabled()\">\r\n @for (tag of value(); track tag) {\r\n <mf-chip\r\n size=\"sm\"\r\n [removable]=\"!disabled()\"\r\n [removeLabel]=\"removeLabel()\"\r\n (removed)=\"removeTag(tag)\"\r\n >\r\n {{ tag }}\r\n </mf-chip>\r\n }\r\n <input\r\n #inputEl\r\n type=\"text\"\r\n class=\"min-w-24 flex-1 border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"value().length === 0 ? placeholder() : ''\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (keydown)=\"onKeydown($event)\"\r\n (blur)=\"commitDraft()\"\r\n />\r\n </mf-input-group>\r\n `,\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TagInput), multi: true }],\r\n})\r\nexport class TagInput extends ValueAccessorBase<string[]> implements ControlValueAccessor {\r\n readonly value = model<string[]>([]);\r\n readonly placeholder = input('');\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n readonly ariaLabel = input('');\r\n readonly fullWidth = input(false);\r\n /** Verilmezse alttaki `Chip`'in kendi `MF_CHIP_LABELS` düşüşü kullanılır (bkz. `chip.ts`). */\r\n readonly removeLabel = input<string>();\r\n /** Aynı etiketin (büyük/küçük harf duyarsız) İKİ KEZ eklenmesini engeller. */\r\n readonly unique = input(true);\r\n\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\r\n\r\n writeValue(value: string[]): void {\r\n this.value.set(value ?? []);\r\n }\r\n\r\n protected onKeydown(event: KeyboardEvent): void {\r\n const input = event.target as HTMLInputElement;\r\n if (event.key === 'Enter' || event.key === ',') {\r\n event.preventDefault();\r\n this.commitDraft();\r\n } else if (event.key === 'Backspace' && input.value === '' && this.value().length > 0) {\r\n event.preventDefault();\r\n this.removeTag(this.value()[this.value().length - 1]!);\r\n }\r\n }\r\n\r\n protected commitDraft(): void {\r\n const input = this.inputEl()?.nativeElement;\r\n if (!input) return;\r\n const raw = input.value.trim();\r\n input.value = '';\r\n if (!raw) return;\r\n if (this.unique() && this.value().some((t) => t.toLowerCase() === raw.toLowerCase())) return;\r\n\r\n const next = [...this.value(), raw];\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n protected removeTag(tag: string): void {\r\n const next = this.value().filter((t) => t !== tag);\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n}\r\n","export interface TimeValue {\r\n hour: number;\r\n minute: number;\r\n}\r\n\r\nexport function formatTime(v: TimeValue): string {\r\n return `${String(v.hour).padStart(2, '0')}:${String(v.minute).padStart(2, '0')}`;\r\n}\r\n\r\n/** `\"9:5\"`/`\"09:05\"`/vb. serbest biçimli metni ayrıştırır — saat 0-23, dakika 0-59 dışındaysa `null`. */\r\nexport function parseTime(text: string): TimeValue | null {\r\n const match = text.trim().match(/^(\\d{1,2}):(\\d{1,2})$/);\r\n if (!match) return null;\r\n const hour = Number(match[1]);\r\n const minute = Number(match[2]);\r\n if (hour > 23 || minute > 59) return null;\r\n return { hour, minute };\r\n}\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n ElementRef,\r\n computed,\r\n effect,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { cn, MF_TIME_PICKER_LABELS, ValueAccessorBase } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { InputGroup, InputPrefix, InputSuffix } from '@mesgflow/ui-kit/input';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { ScrollArea } from '@mesgflow/ui-kit/scroll-area';\r\nimport { formatTime, parseTime, type TimeValue } from './time-picker.model';\r\n\r\n/**\r\n * `<mf-time-picker [(value)]=\"meetingTime\" [minuteStep]=\"15\" />` — `value`\r\n * `{hour, minute} | null` (bkz. `TimeValue`). Tetikleyici `DatePicker`'ın\r\n * AYNI deseni (`InputGroup` + yazarak giriş + `mf-popover` paneli), panel\r\n * TAKVİM yerine iki kaydırılabilir SÜTUN (saat/dakika) — her biri `mf-scroll-area`\r\n * (bu fazda eklenen kenar-solma maskeli kaydırma alanı, bkz. `scroll-area.ts`).\r\n * Yazarak giriş VE sütundan tıklayarak seçim AYNI `value` model'ine yazıyor.\r\n */\r\n@Component({\r\n selector: 'mf-time-picker',\r\n exportAs: 'mfTimePicker',\r\n imports: [OverlayModule, Icon, InputGroup, InputPrefix, InputSuffix, Popover, ScrollArea],\r\n host: { class: 'block' },\r\n templateUrl: './time-picker.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimePicker), multi: true },\r\n ],\r\n})\r\nexport class TimePicker\r\n extends ValueAccessorBase<TimeValue | null>\r\n implements ControlValueAccessor\r\n{\r\n readonly value = model<TimeValue | null>(null);\r\n /** Dakika sütunundaki adım — ör. `15` → 00/15/30/45. Varsayılan 5. */\r\n readonly minuteStep = input(5);\r\n readonly placeholder = input<string>();\r\n readonly disabled = input(false);\r\n readonly hasError = input(false);\r\n readonly ariaLabel = input('');\r\n readonly clearLabel = input<string>();\r\n\r\n private readonly timePickerLabels = inject(MF_TIME_PICKER_LABELS);\r\n protected readonly effectivePlaceholder = computed(\r\n () => this.placeholder() ?? this.timePickerLabels().placeholder,\r\n );\r\n protected readonly effectiveClearLabel = computed(\r\n () => this.clearLabel() ?? this.timePickerLabels().clear,\r\n );\r\n\r\n protected readonly open = signal(false);\r\n protected readonly draft = signal('');\r\n\r\n protected readonly hours = Array.from({ length: 24 }, (_, i) => i);\r\n protected readonly minutes = computed(() => {\r\n const step = this.minuteStep();\r\n return Array.from({ length: Math.ceil(60 / step) }, (_, i) => i * step);\r\n });\r\n\r\n private readonly inputEl = viewChild<ElementRef<HTMLInputElement>>('inputEl');\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const v = this.value();\r\n untracked(() => this.draft.set(v ? formatTime(v) : ''));\r\n });\r\n }\r\n\r\n writeValue(value: TimeValue | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n private setValue(next: TimeValue | null): void {\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n }\r\n\r\n protected onInput(raw: string): void {\r\n this.draft.set(raw);\r\n this.onTouched();\r\n }\r\n\r\n protected commitDraft(): void {\r\n const parsed = parseTime(this.draft());\r\n if (parsed) {\r\n this.setValue(parsed);\r\n this.close();\r\n } else {\r\n const v = this.value();\r\n this.draft.set(v ? formatTime(v) : '');\r\n }\r\n }\r\n\r\n protected pickHour(hour: number): void {\r\n this.setValue({ hour, minute: this.value()?.minute ?? 0 });\r\n }\r\n\r\n protected pickMinute(minute: number): void {\r\n this.setValue({ hour: this.value()?.hour ?? 0, minute });\r\n }\r\n\r\n protected clear(): void {\r\n this.setValue(null);\r\n this.inputEl()?.nativeElement.focus();\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n }\r\n\r\n protected onEscape(): void {\r\n if (!this.open()) return;\r\n const v = this.value();\r\n this.draft.set(v ? formatTime(v) : '');\r\n this.close();\r\n }\r\n\r\n protected optionClasses(selected: boolean): string {\r\n return cn(\r\n 'rounded-sm px-3 py-1 text-start text-sm tabular-nums transition-colors duration-fast ease-emphasis hover:bg-surface-alt',\r\n selected ? 'bg-primary-tint text-primary-tint-fg' : '',\r\n );\r\n }\r\n}\r\n","<div class=\"relative w-full\" cdkOverlayOrigin #origin=\"cdkOverlayOrigin\">\r\n <mf-input-group [hasError]=\"hasError()\" [disabled]=\"disabled()\">\r\n <span mfInputPrefix><span mfIcon [size]=\"18\">schedule</span></span>\r\n <input\r\n #inputEl\r\n type=\"text\"\r\n class=\"w-full min-w-0 appearance-none border-0 bg-transparent p-0 text-sm text-fg placeholder:text-fg-subtle focus:outline-none\"\r\n [placeholder]=\"effectivePlaceholder()\"\r\n [value]=\"draft()\"\r\n [disabled]=\"disabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n (input)=\"onInput($any($event.target).value)\"\r\n (focus)=\"open.set(true)\"\r\n (keydown.enter)=\"commitDraft()\"\r\n (keydown.escape)=\"onEscape()\"\r\n />\r\n @if (value()) {\r\n <button\r\n mfInputSuffix\r\n type=\"button\"\r\n class=\"appearance-none border-0 bg-transparent p-0 transition-colors duration-fast ease-emphasis hover:text-fg\"\r\n [attr.aria-label]=\"effectiveClearLabel()\"\r\n (click)=\"clear()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n }\r\n </mf-input-group>\r\n\r\n <mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"none\"\r\n (closed)=\"onEscape()\"\r\n >\r\n <div class=\"flex divide-x divide-border\">\r\n <mf-scroll-area class=\"max-h-48\">\r\n <div class=\"flex flex-col gap-0.5 p-1\">\r\n @for (h of hours; track h) {\r\n <button\r\n type=\"button\"\r\n [class]=\"optionClasses(value()?.hour === h)\"\r\n (click)=\"pickHour(h)\"\r\n >\r\n {{ h.toString().padStart(2, '0') }}\r\n </button>\r\n }\r\n </div>\r\n </mf-scroll-area>\r\n <mf-scroll-area class=\"max-h-48\">\r\n <div class=\"flex flex-col gap-0.5 p-1\">\r\n @for (m of minutes(); track m) {\r\n <button\r\n type=\"button\"\r\n [class]=\"optionClasses(value()?.minute === m)\"\r\n (click)=\"pickMinute(m)\"\r\n >\r\n {{ m.toString().padStart(2, '0') }}\r\n </button>\r\n }\r\n </div>\r\n </mf-scroll-area>\r\n </div>\r\n </mf-popover>\r\n</div>\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { MF_THEME_SWITCHER_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { MfColorModeService, type MfColorMode } from '@mesgflow/ui-kit/theming';\r\nimport { ToggleGroup, ToggleGroupItem } from '@mesgflow/ui-kit/toggle';\r\nimport { Tooltip } from '@mesgflow/ui-kit/tooltip';\r\n\r\nconst ICONS: Record<MfColorMode, string> = {\r\n light: 'light_mode',\r\n dark: 'dark_mode',\r\n system: 'contrast',\r\n};\r\n\r\n/**\r\n * `<mf-theme-switcher />` — açık / koyu / sistem. Durum `MfColorModeService`'te (kalıcı, sistem\r\n * tercihini canlı izler); bu bileşen yalnızca görünüm.\r\n *\r\n * - `segmented` (varsayılan): kitin `ToggleGroup`'u (tek seçim, boşaltılamaz) — üç ikonlu düğme,\r\n * her biri adlı, seçili olan `aria-pressed`.\r\n * - `button`: tek ikon düğmesi, light → dark → system döngüsü; adı mevcut modu söyler\r\n * (\"Color theme: Dark\"), ipucu da.\r\n */\r\n@Component({\r\n selector: 'mf-theme-switcher',\r\n exportAs: 'mfThemeSwitcher',\r\n imports: [Button, Icon, ToggleGroup, ToggleGroupItem, Tooltip],\r\n host: { class: 'inline-flex' },\r\n templateUrl: './theme-switcher.html',\r\n})\r\nexport class ThemeSwitcher {\r\n readonly appearance = input<'segmented' | 'button'>('segmented');\r\n readonly size = input<'sm' | 'md'>('sm');\r\n\r\n protected readonly colorMode = inject(MfColorModeService);\r\n protected readonly labels = inject(MF_THEME_SWITCHER_LABELS);\r\n protected readonly icons = ICONS;\r\n protected readonly modes: readonly MfColorMode[] = ['light', 'dark', 'system'];\r\n\r\n protected readonly cycleLabel = computed(\r\n () => `${this.labels().ariaLabel}: ${this.labels()[this.colorMode.mode()]}`,\r\n );\r\n\r\n protected select(values: readonly string[]): void {\r\n const mode = values[0];\r\n if (mode === 'light' || mode === 'dark' || mode === 'system') this.colorMode.setMode(mode);\r\n }\r\n}\r\n","@if (appearance() === 'button') {\r\n <button\r\n mfButton\r\n tone=\"neutral\"\r\n appearance=\"text\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n [attr.aria-label]=\"cycleLabel()\"\r\n [mfTooltip]=\"cycleLabel()\"\r\n (click)=\"colorMode.cycle()\"\r\n >\r\n <span mfIcon [size]=\"18\">{{ icons[colorMode.mode()] }}</span>\r\n </button>\r\n} @else {\r\n <mf-toggle-group\r\n type=\"single\"\r\n appearance=\"outline\"\r\n [size]=\"size()\"\r\n [allowEmpty]=\"false\"\r\n [value]=\"[colorMode.mode()]\"\r\n (valueChange)=\"select($event)\"\r\n [ariaLabel]=\"labels().ariaLabel\"\r\n >\r\n @for (mode of modes; track mode) {\r\n <button\r\n mfToggleGroupItem\r\n [value]=\"mode\"\r\n iconOnly\r\n [attr.aria-label]=\"labels()[mode]\"\r\n [mfTooltip]=\"labels()[mode]\"\r\n >\r\n <span mfIcon [size]=\"16\">{{ icons[mode] }}</span>\r\n </button>\r\n }\r\n </mf-toggle-group>\r\n}\r\n","import { Component, input } from '@angular/core';\r\nimport { cn, type MfTone } from '@mesgflow/ui-kit/core';\r\n\r\nexport interface TimelineItem {\r\n title: string;\r\n description?: string;\r\n timestamp?: string;\r\n tone?: MfTone;\r\n}\r\n\r\nconst DOT_TONE: Record<MfTone, string> = {\r\n neutral: 'bg-fg-subtle',\r\n primary: 'bg-accent-fill',\r\n success: 'bg-success',\r\n warning: 'bg-warning',\r\n danger: 'bg-danger',\r\n info: 'bg-info',\r\n help: 'bg-help',\r\n};\r\n\r\n/**\r\n * `<mf-timeline [items]=\"[{title: 'Sipariş alındı', timestamp: '10:02'}, ...]\" />`\r\n * — kronolojik bir olay günlüğü (ör. bir siparişin durum geçmişi). Her\r\n * satır [nokta+çizgi] sütunu + [içerik] sütunu olan bir flex satır — çizgi\r\n * `flex-1` ile SIBLING içerik sütununun yüksekliğine (varsayılan\r\n * `align-items: stretch`) otomatik uzar, SON öğede hiç render EDİLMEZ\r\n * (Stepper'ın `::after`+`last:` CSS'i yerine düz bir `@if` yeterli — burada\r\n * \"hangi satır son\" bilgisi zaten `@for`'un `$last`'ından ÜCRETSİZ geliyor).\r\n */\r\n@Component({\r\n selector: 'mf-timeline',\r\n exportAs: 'mfTimeline',\r\n host: { role: 'list', class: 'flex flex-col' },\r\n template: `\r\n @for (item of items(); track item.title; let last = $last) {\r\n <div role=\"listitem\" class=\"flex gap-3\">\r\n <div class=\"flex flex-col items-center\">\r\n <span [class]=\"dotClasses(item.tone)\"></span>\r\n @if (!last) {\r\n <span class=\"mt-1 w-px flex-1 bg-border\"></span>\r\n }\r\n </div>\r\n <div class=\"min-w-0 flex-1 pb-6\">\r\n <div class=\"flex items-baseline justify-between gap-2\">\r\n <p class=\"text-sm font-medium text-fg\">{{ item.title }}</p>\r\n @if (item.timestamp) {\r\n <span class=\"shrink-0 text-xs text-fg-subtle\">{{ item.timestamp }}</span>\r\n }\r\n </div>\r\n @if (item.description) {\r\n <p class=\"mt-0.5 text-sm text-fg-muted\">{{ item.description }}</p>\r\n }\r\n </div>\r\n </div>\r\n }\r\n `,\r\n})\r\nexport class Timeline {\r\n readonly items = input.required<TimelineItem[]>();\r\n\r\n protected dotClasses(tone: MfTone | undefined): string {\r\n return cn('relative z-10 mt-1 h-2.5 w-2.5 shrink-0 rounded-full', DOT_TONE[tone ?? 'neutral']);\r\n }\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\n/**\r\n * Basılı durum `aria-pressed` üzerinden stillenir (tek kaynak — durum sınıfı ayrıca tutulmaz):\r\n * nötr `surface-active` zemin + tam `fg` metin. Vurgu rengi BİLEREK yok — biçimlendirme çubuğu\r\n * gibi yoğun kümelerde marka rengi gürültü olur (Radix/Linear aynı tercihi yapar).\r\n */\r\nexport const toggleVariants = cva(\r\n 'inline-flex shrink-0 cursor-pointer appearance-none items-center justify-center gap-1.5 rounded-md font-medium whitespace-nowrap text-fg-muted select-none ' +\r\n 'transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg ' +\r\n 'aria-pressed:bg-surface-active aria-pressed:text-fg ' +\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:opacity-50',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'h-control-sm px-2 text-xs',\r\n md: 'h-control-md px-2.5 text-sm',\r\n lg: 'h-control-lg px-3 text-sm',\r\n },\r\n appearance: {\r\n ghost: 'border-0 bg-transparent',\r\n outline: 'border border-border bg-surface aria-pressed:border-border-strong',\r\n },\r\n iconOnly: {\r\n true: 'aspect-square px-0',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { size: 'md', appearance: 'ghost', iconOnly: false },\r\n },\r\n);\r\n\r\nexport type ToggleSize = NonNullable<VariantProps<typeof toggleVariants>['size']>;\r\nexport type ToggleAppearance = NonNullable<VariantProps<typeof toggleVariants>['appearance']>;\r\n","import { Directive, booleanAttribute, computed, input, model } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { toggleVariants, type ToggleAppearance, type ToggleSize } from './toggle.variants';\r\n\r\n/**\r\n * `<button mfToggle [(pressed)]=\"bold\" aria-label=\"Kalın\"><span mfIcon>format_bold</span></button>`\r\n *\r\n * İki durumlu düğme — `aria-pressed` ile duyurulur (checkbox DEĞİL: eylem gibi görünen ama durum\r\n * taşıyan düğme, WAI-ARIA \"button\" deseni). İkon-tek kullanımda `aria-label` zorunlu, `iconOnly`\r\n * kare yapar. Birbirine bağlı düğmeler için `mf-toggle-group`.\r\n */\r\n@Directive({\r\n selector: 'button[mfToggle]',\r\n exportAs: 'mfToggle',\r\n host: {\r\n type: 'button',\r\n '[attr.aria-pressed]': 'pressed()',\r\n '[class]': 'classes()',\r\n '(click)': 'pressed.set(!pressed())',\r\n },\r\n})\r\nexport class Toggle {\r\n readonly pressed = model(false);\r\n readonly size = input<ToggleSize>('md');\r\n readonly appearance = input<ToggleAppearance>('ghost');\r\n readonly iconOnly = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly classes = computed(() =>\r\n cn(\r\n toggleVariants({\r\n size: this.size(),\r\n appearance: this.appearance(),\r\n iconOnly: this.iconOnly(),\r\n }),\r\n ),\r\n );\r\n}\r\n","import {\r\n Component,\r\n Directive,\r\n ElementRef,\r\n InjectionToken,\r\n booleanAttribute,\r\n computed,\r\n contentChildren,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n type Signal,\r\n} from '@angular/core';\r\nimport { cn, isRtl } from '@mesgflow/ui-kit/core';\r\nimport { toggleVariants, type ToggleAppearance, type ToggleSize } from './toggle.variants';\r\n\r\nexport type ToggleGroupType = 'single' | 'multiple';\r\n\r\n/** Öğelerin gruba eriştiği sözleşme — dosya içi sınıf sırası döngüsü olmasın diye arayüz. */\r\ninterface ToggleGroupContext {\r\n readonly size: Signal<ToggleSize>;\r\n readonly appearance: Signal<ToggleAppearance>;\r\n readonly disabled: Signal<boolean>;\r\n readonly tabStopValue: Signal<string | null>;\r\n isPressed(value: string): boolean;\r\n toggle(value: string): void;\r\n onKeydown(event: KeyboardEvent, item: ToggleGroupItem): void;\r\n onFocus(item: ToggleGroupItem): void;\r\n}\r\n\r\nconst MF_TOGGLE_GROUP = new InjectionToken<ToggleGroupContext>('mesgflow.toggle-group');\r\n\r\n/** `<button mfToggleGroupItem value=\"bold\" aria-label=\"Kalın\" iconOnly>…</button>` — bkz. `ToggleGroup`. */\r\n@Directive({\r\n selector: 'button[mfToggleGroupItem]',\r\n exportAs: 'mfToggleGroupItem',\r\n host: {\r\n type: 'button',\r\n '[attr.aria-pressed]': 'pressed()',\r\n '[attr.tabindex]': 'group.tabStopValue() === value() ? 0 : -1',\r\n '[disabled]': 'isDisabled()',\r\n '[class]': 'classes()',\r\n '(click)': 'group.toggle(value())',\r\n '(keydown)': 'group.onKeydown($event, this)',\r\n '(focus)': 'group.onFocus(this)',\r\n },\r\n})\r\nexport class ToggleGroupItem {\r\n /**\r\n * Zorunlu anlamda — ama `input.required` DEĞİL: grubun sekme durağı hesabı TÜM öğelerin\r\n * değerini okur; `@for` içinde `[value]` bağlandığında bir öğenin host bağlaması, girdileri\r\n * henüz atanmamış SONRAKİ öğeyi okuyup NG0950 fırlatıyordu (ThemeSwitcher testinde yakalandı).\r\n */\r\n readonly value = input('');\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n readonly iconOnly = input(false, { transform: booleanAttribute });\r\n\r\n protected readonly group = inject(MF_TOGGLE_GROUP);\r\n readonly element = inject<ElementRef<HTMLButtonElement>>(ElementRef);\r\n\r\n readonly isDisabled = computed(() => this.disabled() || this.group.disabled());\r\n protected readonly pressed = computed(() => this.group.isPressed(this.value()));\r\n protected readonly classes = computed(() =>\r\n cn(\r\n toggleVariants({\r\n size: this.group.size(),\r\n appearance: this.group.appearance(),\r\n iconOnly: this.iconOnly(),\r\n }),\r\n ),\r\n );\r\n}\r\n\r\n/**\r\n * `<mf-toggle-group type=\"multiple\" [(value)]=\"marks\" ariaLabel=\"Biçim\">\r\n * <button mfToggleGroupItem value=\"bold\" aria-label=\"Kalın\" iconOnly>…</button>\r\n * </mf-toggle-group>`\r\n *\r\n * Birbirine bağlı iki durumlu düğmeler. `value` HER ZAMAN bir dizi (tek modda en fazla bir öğe) —\r\n * iki mod için ayrı model tipi tutmamak için. `single`'da `allowEmpty=false` seçimi boşaltmayı\r\n * engeller (hizalama gibi daima bir değeri olan kümeler).\r\n *\r\n * Klavye: grup TEK sekme durağıdır (dolaşan tabindex — basılı ilk öğe, yoksa ilk etkin öğe, son\r\n * odaklanan hatırlanır); yatayda ←/→ (RTL'de görsel yöne göre ters), dikeyde ↑/↓, Home/End;\r\n * devre dışı öğeler atlanır, sarma yapılır. Semantik `role=\"group\"` + her öğede `aria-pressed`.\r\n * `@angular/aria/toolbar` BİLEREK kullanılmadı: projekte edilen tüketici düğmeleriyle kayıt\r\n * döngüsü, tıklama olmadan boş `valueChange` üretebiliyordu (bkz. `SegmentedControl` notu).\r\n */\r\n@Component({\r\n selector: 'mf-toggle-group',\r\n exportAs: 'mfToggleGroup',\r\n providers: [{ provide: MF_TOGGLE_GROUP, useExisting: ToggleGroup }],\r\n host: {\r\n role: 'group',\r\n '[attr.aria-label]': 'ariaLabel() || null',\r\n '[attr.data-orientation]': 'orientation()',\r\n '[class]': 'classes()',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class ToggleGroup implements ToggleGroupContext {\r\n readonly type = input<ToggleGroupType>('single');\r\n readonly value = model<readonly string[]>([]);\r\n readonly size = input<ToggleSize>('md');\r\n readonly appearance = input<ToggleAppearance>('ghost');\r\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n /** `single` modda basılı öğeye tekrar basmak seçimi boşaltabilir mi. */\r\n readonly allowEmpty = input(true, { transform: booleanAttribute });\r\n readonly ariaLabel = input('');\r\n\r\n private readonly items = contentChildren(ToggleGroupItem, { descendants: true });\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly lastFocused = signal<string | null>(null);\r\n\r\n private readonly enabledItems = computed(() => this.items().filter((i) => !i.isDisabled()));\r\n\r\n readonly tabStopValue = computed(() => {\r\n const enabled = this.enabledItems();\r\n const last = this.lastFocused();\r\n if (last !== null && enabled.some((i) => i.value() === last)) return last;\r\n const pressed = enabled.find((i) => this.isPressed(i.value()));\r\n return (pressed ?? enabled[0])?.value() ?? null;\r\n });\r\n\r\n /**\r\n * `outline`: bitişik şerit (Button Group ile aynı kenar birleştirme — iç köşeler kare, 1px\r\n * kenarlık çakışır, odaklı öğe üste çıkar). `ghost`: aralıklı, zeminsiz.\r\n */\r\n protected readonly classes = computed(() => {\r\n const vertical = this.orientation() === 'vertical';\r\n return cn(\r\n 'inline-flex',\r\n vertical ? 'flex-col' : 'flex-row',\r\n this.appearance() === 'outline'\r\n ? vertical\r\n ? '[&>*]:rounded-none [&>*:first-child]:rounded-t-md [&>*:last-child]:rounded-b-md [&>*:not(:first-child)]:-mt-px [&>*:focus-visible]:z-10'\r\n : '[&>*]:rounded-none [&>*:first-child]:rounded-s-md [&>*:last-child]:rounded-e-md [&>*:not(:first-child)]:-ms-px [&>*:focus-visible]:z-10'\r\n : 'gap-0.5',\r\n );\r\n });\r\n\r\n isPressed(value: string): boolean {\r\n return this.value().includes(value);\r\n }\r\n\r\n toggle(value: string): void {\r\n const current = this.value();\r\n const pressed = current.includes(value);\r\n if (this.type() === 'single') {\r\n if (pressed && !this.allowEmpty()) return;\r\n this.value.set(pressed ? [] : [value]);\r\n return;\r\n }\r\n const next = pressed ? current.filter((v) => v !== value) : [...current, value];\r\n // Öğe sırasını koru — tüketicinin gördüğü dizi tıklama sırasına göre oynamasın.\r\n const order = this.items().map((i) => i.value());\r\n this.value.set([...next].sort((a, b) => order.indexOf(a) - order.indexOf(b)));\r\n }\r\n\r\n onFocus(item: ToggleGroupItem): void {\r\n this.lastFocused.set(item.value());\r\n }\r\n\r\n onKeydown(event: KeyboardEvent, item: ToggleGroupItem): void {\r\n const enabled = this.enabledItems();\r\n const index = enabled.indexOf(item);\r\n if (index === -1 || enabled.length === 0) return;\r\n\r\n const vertical = this.orientation() === 'vertical';\r\n const rtl = !vertical && isRtl(this.host.nativeElement);\r\n const nextKey = vertical ? 'ArrowDown' : rtl ? 'ArrowLeft' : 'ArrowRight';\r\n const prevKey = vertical ? 'ArrowUp' : rtl ? 'ArrowRight' : 'ArrowLeft';\r\n\r\n let target: ToggleGroupItem | undefined;\r\n if (event.key === nextKey) target = enabled[(index + 1) % enabled.length];\r\n else if (event.key === prevKey) target = enabled[(index - 1 + enabled.length) % enabled.length];\r\n else if (event.key === 'Home') target = enabled[0];\r\n else if (event.key === 'End') target = enabled.at(-1);\r\n if (!target) return;\r\n\r\n event.preventDefault();\r\n this.lastFocused.set(target.value());\r\n target.element.nativeElement.focus();\r\n }\r\n}\r\n","import { Injectable, signal } from '@angular/core';\r\n\r\nexport type ToastTone = 'success' | 'danger' | 'info' | 'warning';\r\n/** @deprecated `ToastTone` kullan — `'error'` değeri `'danger'`ya taşındı (bkz. plan Faz 1a). */\r\nexport type ToastType = ToastTone;\r\n\r\nexport interface ToastAction {\r\n label: string;\r\n onClick: () => void;\r\n}\r\n\r\nexport interface ToastOptions {\r\n description?: string;\r\n /** ms. `0` → asla kendiliğinden kapanmaz (kullanıcı elle kapatana kadar kalır). Varsayılan 4500ms. */\r\n duration?: number;\r\n action?: ToastAction;\r\n}\r\n\r\nexport interface ToastItem {\r\n id: number;\r\n type: ToastTone;\r\n title: string;\r\n description?: string;\r\n action?: ToastAction;\r\n /** `true` — çıkış animasyonu (`animate-toast-out`) oynuyor, `EXIT_MS` sonra listeden gerçekten kaldırılır (bkz. `dismiss()`). */\r\n leaving: boolean;\r\n}\r\n\r\nconst AUTO_DISMISS_MS = 4500;\r\n/** `--duration-fast` (tokens/motion.css) ile birebir — `animate-toast-out`un süresi. */\r\nconst EXIT_MS = 120;\r\n\r\n/**\r\n * Uygulamanın tek, global toast kaynağı — signal-first, `providedIn: 'root'`.\r\n * Görsel katman `ToastHost`'ta (`<mf-toast-host>`, kök seviyede bir kez\r\n * render edilir) — burası SADECE state. Gömülebilir bir editör host\r\n * uygulamanın kendi bildirim sistemine bağımlı OLAMAZ, bu yüzden bu servis\r\n * bir ürün deposunun eski bildirim servisinden kite taşındı (2026-09-07) —\r\n * artık kütüphanenin kendi parçası.\r\n *\r\n * `success`/`error`/`info`/`warning`'in ikinci parametresi HEM düz bir\r\n * `description` string'i HEM `ToastOptions` kabul eder (geriye dönük\r\n * uyumluluk — mevcut `toasts.success('Kaydedildi', 'Değişiklikler\r\n * uygulandı.')` çağrıları DEĞİŞMEDEN çalışmaya devam eder).\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class ToastService {\r\n readonly items = signal<ToastItem[]>([]);\r\n /**\r\n * `ToastHost` tarafından kuruluşta ayarlanır (bkz. `toast-host.ts`\r\n * `[limit]` input'u) — aynı anda gösterilecek AZAMİ toast sayısı,\r\n * aşılırsa EN ESKİ (henüz çıkış animasyonu oynamayan) toast'lar ANINDA\r\n * (animasyonsuz) kaldırılır. `null` (varsayılan) → sınırsız.\r\n */\r\n readonly limit = signal<number | null>(null);\r\n private nextId = 0;\r\n\r\n success(title: string, options?: string | ToastOptions): void {\r\n this.push('success', title, options);\r\n }\r\n\r\n error(title: string, options?: string | ToastOptions): void {\r\n this.push('danger', title, options);\r\n }\r\n\r\n info(title: string, options?: string | ToastOptions): void {\r\n this.push('info', title, options);\r\n }\r\n\r\n warning(title: string, options?: string | ToastOptions): void {\r\n this.push('warning', title, options);\r\n }\r\n\r\n /**\r\n * İki aşamalı: önce `leaving:true` işaretler (panel `animate-toast-out`\r\n * oynatır — bkz. `toast-host.html`), `EXIT_MS` sonra listeden gerçekten\r\n * çıkarır. Zaten çıkış oynayan bir öğede tekrar çağrılırsa (ör. kullanıcı\r\n * X'e hızlı hızlı tıklarsa) YOK SAYILIR — `list.map` idempotent.\r\n */\r\n dismiss(id: number): void {\r\n const item = this.items().find((i) => i.id === id);\r\n if (!item || item.leaving) return;\r\n this.items.update((list) => list.map((i) => (i.id === id ? { ...i, leaving: true } : i)));\r\n const reducedMotion =\r\n typeof matchMedia !== 'undefined' && matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n setTimeout(\r\n () => {\r\n this.items.update((list) => list.filter((i) => i.id !== id));\r\n },\r\n reducedMotion ? 0 : EXIT_MS,\r\n );\r\n }\r\n\r\n /** Şu an gösterilen (henüz çıkış oynamayan) TÜM toast'ları kapatır — her biri kendi çıkış animasyonuyla, `dismiss()`'in aynısı, tek tek. */\r\n dismissAll(): void {\r\n for (const item of this.items()) {\r\n if (!item.leaving) this.dismiss(item.id);\r\n }\r\n }\r\n\r\n private push(type: ToastTone, title: string, options?: string | ToastOptions): void {\r\n const opts: ToastOptions =\r\n typeof options === 'string' ? { description: options } : (options ?? {});\r\n const id = ++this.nextId;\r\n const duration = opts.duration ?? AUTO_DISMISS_MS;\r\n\r\n this.items.update((list) => {\r\n const next: ToastItem[] = [\r\n ...list,\r\n { id, type, title, description: opts.description, action: opts.action, leaving: false },\r\n ];\r\n const limit = this.limit();\r\n if (limit == null) return next;\r\n\r\n let overflow = next.filter((i) => !i.leaving).length - limit;\r\n if (overflow <= 0) return next;\r\n return next.filter((item) => {\r\n if (item.leaving || overflow <= 0) return true;\r\n overflow--;\r\n return false;\r\n });\r\n });\r\n\r\n if (duration > 0) setTimeout(() => this.dismiss(id), duration);\r\n }\r\n}\r\n","import { Component, computed, effect, inject, input } from '@angular/core';\r\nimport { cn, MF_TOAST_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { ToastService, type ToastItem, type ToastTone } from './toast.service';\r\n\r\nconst ICON_BY_TYPE: Record<ToastTone, string> = {\r\n success: 'check_circle',\r\n danger: 'error',\r\n warning: 'warning',\r\n info: 'info',\r\n};\r\n\r\n/**\r\n * Onceden SADECE 20px'lik ikonun rengi tona gore degisiyordu, karti kendisi\r\n * (kenarlik/govde) her tipte AYNI gorunuyordu (gercek bulgu). Sol kenar\r\n * cubugu artik rol token'ini (`border-s-{tone}`, moda gore takas OLUR --\r\n * light 600/700, dark 400 -- ayni `--mf-X` metin/ikon rolu, sidebar/tabs\r\n * \"ray\" motifiyle TUTARLI). Ikon cipi Badge/Chip'in tonal isaret rol\r\n * token'iyla AYNI: `bg-X-tint` (`color-mix()` tabanli).\r\n */\r\nconst ACCENT_BY_TYPE: Record<ToastTone, string> = {\r\n success: 'border-s-success',\r\n danger: 'border-s-danger',\r\n warning: 'border-s-warning',\r\n info: 'border-s-info',\r\n};\r\n\r\n/** Sadece zemin — ikonun KENDİ `text-{tone}` class'ı ayrı kalıyor (bkz. template, mevcut testlerin `span[mfIcon]` üstünde aradığı class). */\r\nconst CHIP_BG_BY_TYPE: Record<ToastTone, string> = {\r\n success: 'bg-success-tint',\r\n danger: 'bg-danger-tint',\r\n warning: 'bg-warning-tint',\r\n info: 'bg-info-tint',\r\n};\r\n\r\n/**\r\n * Sol kenar rengi tona göre değişiyor — `border-{t,r,b}-hairline` (3 yön AYRI\r\n * uzun-el utility) BİLEREK `border-hairline` KISALTMASI DEĞİL: kısaltma\r\n * `border-left-color`'ı da yazar, `ACCENT_BY_TYPE`'ın `border-s-{tone}-600`'ü\r\n * ile AYNI özgüllükte çakışır ve kazanan üretilen CSS'in sırasına (öngörülemez)\r\n * kalırdı — `cn()`/twMerge bu STOK-STOK çakışmayı normalde çözer ama bu dize\r\n * şablon içinde HAM birleştiriliyor (bkz. `docs/tr/mimari.md` twMerge gotcha'sı).\r\n * Mikro glassmorphism (2026-09 Deep Emerald geçişi) — `glassSurface`\r\n * reçetesi BİLEREK KULLANILMAZ: onun kısaltma `border-hairline`'ı yine AYNI\r\n * ham-birleştirme çakışmasına düşerdi (dört kenarı da boyar, sol kenarın\r\n * tona göre rengini ezerdi) — bu yüzden `supports-[]`/`reduced-transparency`\r\n * class'ları elle, `bg-overlay` katı fallback'iyle birlikte yazılıyor.\r\n */\r\nconst CARD_BASE =\r\n 'pointer-events-auto flex items-start gap-3 rounded-lg border-t border-e border-b border-s-2 ' +\r\n 'border-t-hairline border-e-hairline border-b-hairline ' +\r\n 'bg-overlay supports-[backdrop-filter]:bg-glass supports-[backdrop-filter]:backdrop-blur-md ' +\r\n 'reduced-transparency:bg-overlay reduced-transparency:backdrop-blur-none p-4 shadow-2';\r\n\r\nexport type ToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\r\n\r\n/** `bottom-*` konumlarda `flex-col-reverse` — yeni toast alt kenardan İÇERİ girip eskileri YUKARI iter (bir bildirim yığınının doğal büyüme yönü). */\r\nconst POSITION_CLASSES: Record<ToastPosition, string> = {\r\n 'top-right': 'top-6 right-6 flex-col',\r\n 'top-left': 'top-6 left-6 flex-col',\r\n 'bottom-right': 'bottom-6 right-6 flex-col-reverse',\r\n 'bottom-left': 'bottom-6 left-6 flex-col-reverse',\r\n};\r\n\r\n/**\r\n * `<mf-toast-host position=\"bottom-right\" [limit]=\"3\" />` — host uygulamanın\r\n * KÖK seviyesinde bir kez render edilir (auth ekranları dahil her yerde\r\n * görünür olsun diye). `limit`, `ToastService.limit`'e bir kerelik (kuruluşta)\r\n * yazılır — `ToastHost` görsel katman, sınır mantığı servis tarafında yaşar\r\n * (bkz. `toast.service.ts`).\r\n */\r\n@Component({\r\n selector: 'mf-toast-host',\r\n imports: [Icon, Button],\r\n host: { '[class]': 'hostClasses()' },\r\n templateUrl: './toast-host.html',\r\n})\r\nexport class ToastHost {\r\n protected readonly toasts = inject(ToastService);\r\n protected readonly iconFor = (type: ToastTone) => ICON_BY_TYPE[type];\r\n protected readonly chipBgFor = (type: ToastTone) => CHIP_BG_BY_TYPE[type];\r\n protected readonly cardClassFor = (item: ToastItem) =>\r\n cn(CARD_BASE, ACCENT_BY_TYPE[item.type], {\r\n 'animate-toast-in': !item.leaving,\r\n 'animate-toast-out': item.leaving,\r\n });\r\n\r\n /** Kapat butonunun `aria-label`'ı — toast'ın kendi başlığıyla birleştirilir. Verilmezse `MF_TOAST_LABELS`. */\r\n readonly dismissLabel = input<string>();\r\n readonly position = input<ToastPosition>('top-right');\r\n /** Aynı anda gösterilecek azami toast sayısı — bkz. `ToastService.limit`. `null` (varsayılan) → sınırsız. */\r\n readonly limit = input<number | null>(null);\r\n\r\n private readonly toastLabels = inject(MF_TOAST_LABELS);\r\n protected readonly effectiveDismissLabel = computed(\r\n () => this.dismissLabel() ?? this.toastLabels().dismiss,\r\n );\r\n\r\n protected readonly hostClasses = computed(() =>\r\n cn(\r\n 'pointer-events-none fixed z-50 flex w-full max-w-sm gap-2',\r\n POSITION_CLASSES[this.position()],\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => this.toasts.limit.set(this.limit()));\r\n }\r\n\r\n protected onAction(item: ToastItem): void {\r\n item.action?.onClick();\r\n this.toasts.dismiss(item.id);\r\n }\r\n}\r\n","@for (item of toasts.items(); track item.id) {\r\n <div role=\"alert\" [class]=\"cardClassFor(item)\">\r\n <div\r\n [class]=\"\r\n 'flex h-8 w-8 shrink-0 items-center justify-center rounded-md ' + chipBgFor(item.type)\r\n \"\r\n >\r\n <span\r\n mfIcon\r\n [size]=\"16\"\r\n [class.text-success]=\"item.type === 'success'\"\r\n [class.text-danger]=\"item.type === 'danger'\"\r\n [class.text-warning]=\"item.type === 'warning'\"\r\n [class.text-info]=\"item.type === 'info'\"\r\n >\r\n {{ iconFor(item.type) }}\r\n </span>\r\n </div>\r\n\r\n <div class=\"min-w-0 flex-1\">\r\n <p class=\"text-sm font-semibold text-fg\">{{ item.title }}</p>\r\n @if (item.description) {\r\n <p class=\"mt-0.5 text-sm whitespace-pre-line text-fg-muted\">{{ item.description }}</p>\r\n }\r\n @if (item.action; as action) {\r\n <button\r\n mfButton\r\n appearance=\"text\"\r\n tone=\"primary\"\r\n size=\"sm\"\r\n type=\"button\"\r\n class=\"-ms-2 mt-1.5\"\r\n (click)=\"onAction(item)\"\r\n >\r\n {{ action.label }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <button\r\n mfButton\r\n appearance=\"text\"\r\n tone=\"neutral\"\r\n size=\"icon\"\r\n shape=\"square\"\r\n type=\"button\"\r\n class=\"-mt-1.5 -me-1.5\"\r\n [attr.aria-label]=\"effectiveDismissLabel() + ': ' + item.title\"\r\n (click)=\"toasts.dismiss(item.id)\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n </div>\r\n}\r\n","import { Toolbar as AriaToolbar } from '@angular/aria/toolbar';\r\nimport { Component } from '@angular/core';\r\n\r\n/**\r\n * `<mf-toolbar><button mfToolbarButton value=\"bold\">B</button>...</mf-toolbar>`\r\n *\r\n * Genel amaçlı gruplu buton çubuğu — zengin metin editörü/tuval araç\r\n * çubukları için düşünüldü. ARIA/klavye (roving tabindex, ok tuşu\r\n * navigasyonu) `@angular/aria/toolbar`'ın `Toolbar` pattern'inden\r\n * `hostDirectives` ile geliyor — `SegmentedControl`'ün AYNI pattern ailesini\r\n * kullandığı ama SEÇİM DURUMU (tek/çoklu) tuttuğu yere karşılık, bu primitif\r\n * seçim durumu TUTMAZ: tekil aksiyon düğmeleri için `mfToolbarButton`\r\n * yeter, dışlayıcı bir alt-grup gerekiyorsa (ör. hizalama) tüketici kendi\r\n * `<div ngToolbarWidgetGroup [multi]=\"false\">` sarmalayıcısını ekler (bkz.\r\n * `@angular/aria/toolbar`'ın kendi JSDoc örneği).\r\n */\r\n@Component({\r\n selector: 'mf-toolbar',\r\n exportAs: 'mfToolbar',\r\n hostDirectives: [{ directive: AriaToolbar, inputs: ['orientation', 'disabled', 'wrap'] }],\r\n host: {\r\n class: 'flex items-center gap-0.5 rounded-lg border border-hairline bg-surface p-1',\r\n },\r\n template: '<ng-content />',\r\n})\r\nexport class Toolbar {}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const toolbarButtonVariants = cva(\r\n 'flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-sm border-0 bg-transparent text-fg-muted transition-colors duration-fast ease-emphasis active:scale-[0.99] ' +\r\n 'hover:bg-surface-alt hover:text-fg focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring ' +\r\n 'disabled:pointer-events-none disabled:opacity-50 disabled:active:scale-100',\r\n {\r\n variants: {\r\n active: {\r\n true: 'bg-primary-tint text-primary-tint-fg',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { active: false },\r\n },\r\n);\r\n\r\nexport type ToolbarButtonActive = VariantProps<typeof toolbarButtonVariants>['active'];\r\n","import { ToolbarWidget as AriaToolbarWidget } from '@angular/aria/toolbar';\r\nimport { Directive, computed, inject, input } from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { toolbarButtonVariants } from './toolbar.variants';\r\n\r\n/**\r\n * `<button mfToolbarButton value=\"bold\" [pressed]=\"isBold()\">B</button>` —\r\n * `mf-toolbar` içine konur. `pressed`, bir `ngToolbarWidgetGroup` sarmalayıcısı\r\n * OLMADAN da (ör. bağımsız bir toggle — kalın/italik gibi birbirinden bağımsız\r\n * açma-kapama düğmeleri) tüketicinin kendi state'inden görsel \"aktif\" durumunu\r\n * bildirmesi için var; bir grup içindeyse `widget.selected()` zaten aynı\r\n * görevi görür, ikisi OR'lanıyor.\r\n */\r\n@Directive({\r\n selector: 'button[mfToolbarButton]',\r\n hostDirectives: [{ directive: AriaToolbarWidget, inputs: ['value', 'disabled', 'id'] }],\r\n host: { '[attr.type]': \"'button'\", '[class]': 'classes()' },\r\n})\r\nexport class ToolbarButton {\r\n private readonly widget = inject(AriaToolbarWidget);\r\n readonly pressed = input(false);\r\n\r\n protected readonly classes = computed(() =>\r\n cn(toolbarButtonVariants({ active: this.pressed() || this.widget.selected() })),\r\n );\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n/** `<mf-toolbar-separator />` — `mf-toolbar` içindeki buton gruplarını ayırmak için dikey çizgi. */\r\n@Component({\r\n selector: 'mf-toolbar-separator',\r\n host: {\r\n class: 'mx-1 h-5 w-px shrink-0 self-center bg-border',\r\n role: 'separator',\r\n 'aria-orientation': 'vertical',\r\n },\r\n template: '',\r\n})\r\nexport class ToolbarSeparator {}\r\n","import { Overlay, type ConnectedPosition, type OverlayRef } from '@angular/cdk/overlay';\r\nimport { DomPortal, TemplatePortal } from '@angular/cdk/portal';\r\nimport {\r\n Directive,\r\n ElementRef,\r\n OnDestroy,\r\n TemplateRef,\r\n ViewContainerRef,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nexport type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';\r\n\r\nconst POSITIONS: Record<TooltipPosition, ConnectedPosition[]> = {\r\n top: [\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n ],\r\n bottom: [\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\r\n ],\r\n left: [\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n ],\r\n right: [\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8 },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8 },\r\n ],\r\n};\r\n\r\n/** `role`/`pointer-events-none` DIŞINDAKİ görsel kabuk — CDK'nın `panelClass`'ı ile OVERLAY PANELİNİN kendisine uygulanır (bkz. `show()`), hem düz metin hem şablon içeriği AYNI balon çerçevesini paylaşır. */\r\nconst BUBBLE_CLASSES = [\r\n 'rounded-sm',\r\n 'bg-surface-inverse',\r\n 'px-2',\r\n 'py-1',\r\n 'text-xs',\r\n 'font-medium',\r\n 'whitespace-nowrap',\r\n 'text-fg-inverse',\r\n 'shadow-2',\r\n];\r\n\r\n/**\r\n * `<button mfButton [mfTooltip]=\"'Filtreler'\">` (düz metin) veya\r\n * `<button mfButton [mfTooltipContent]=\"richTpl\">` (bkz. aşağıdaki örnek —\r\n * zengin/reaktif içerik) — hover/focus'ta CDK Overlay ile konumlanan bir\r\n * balon gösterir. `mfTooltipContent` VERİLMİŞSE `mfTooltip` YOK SAYILIR.\r\n *\r\n * ```html\r\n * <button mfButton [mfTooltipContent]=\"kbdHint\">Kaydet</button>\r\n * <ng-template #kbdHint>\r\n * Kaydet <kbd mfKbd>Ctrl</kbd>+<kbd mfKbd>S</kbd>\r\n * </ng-template>\r\n * ```\r\n *\r\n * Düz metin YOLU (ayrı bir Angular component/`ComponentPortal` kurmadan) ham\r\n * bir DOM node'u ile çiziliyor — statik metin için fazla makine olurdu.\r\n * Şablon YOLU `TemplatePortal` kullanır (gerçek Angular içeriği — binding/\r\n * directive/başka bir bileşen barındırabilir), bunun için `ViewContainerRef`\r\n * gerekiyor.\r\n */\r\n@Directive({\r\n selector: '[mfTooltip], [mfTooltipContent]',\r\n exportAs: 'mfTooltip',\r\n host: {\r\n '(mouseenter)': 'scheduleShow()',\r\n '(mouseleave)': 'hide()',\r\n '(focus)': 'show()',\r\n '(blur)': 'hide()',\r\n '(keydown.escape)': 'hide()',\r\n '(click)': 'hide()',\r\n },\r\n})\r\nexport class Tooltip implements OnDestroy {\r\n /** Boş string verilirse (ve `mfTooltipContent` de yoksa) tooltip tamamen devre dışı kalır (ör. koşullu etiketler için). */\r\n readonly mfTooltip = input('');\r\n /** Verilmişse `mfTooltip`'in YERİNE geçer — bkz. sınıf üstündeki JSDoc örneği. */\r\n readonly mfTooltipContent = input<TemplateRef<unknown> | null>(null);\r\n readonly tooltipPosition = input<TooltipPosition>('top');\r\n\r\n private readonly overlay = inject(Overlay);\r\n private readonly elementRef = inject(ElementRef<HTMLElement>);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private overlayRef?: OverlayRef;\r\n private bubbleEl?: HTMLElement;\r\n private showHandle?: ReturnType<typeof setTimeout>;\r\n\r\n protected scheduleShow(): void {\r\n if (!this.mfTooltip() && !this.mfTooltipContent()) return;\r\n clearTimeout(this.showHandle);\r\n this.showHandle = setTimeout(() => this.show(), 350);\r\n }\r\n\r\n protected show(): void {\r\n const template = this.mfTooltipContent();\r\n const text = this.mfTooltip();\r\n if ((!template && !text) || this.overlayRef) return;\r\n\r\n const positionStrategy = this.overlay\r\n .position()\r\n .flexibleConnectedTo(this.elementRef)\r\n .withPositions(POSITIONS[this.tooltipPosition()])\r\n .withPush(true);\r\n\r\n this.overlayRef = this.overlay.create({\r\n positionStrategy,\r\n scrollStrategy: this.overlay.scrollStrategies.reposition(),\r\n panelClass: [...BUBBLE_CLASSES, 'animate-overlay-in'],\r\n });\r\n this.overlayRef.overlayElement.setAttribute('role', 'tooltip');\r\n this.overlayRef.overlayElement.classList.add('pointer-events-none');\r\n\r\n if (template) {\r\n this.overlayRef.attach(new TemplatePortal(template, this.viewContainerRef));\r\n return;\r\n }\r\n\r\n // Düz `appendChild` YETMİYOR: CDK'nın konumlandırma stratejisi (flexibleConnectedTo)\r\n // sadece `OverlayRef.attach()` çağrıldığında çalışıyor — atlanırsa panel {0,0,0,0}\r\n // boyutunda kalıp hiçbir yerde görünmüyor (gerçek bulgu, ui-kit'te yakalandı).\r\n // `DomPortal` gerçek bir Angular component'i olmadan (ComponentPortal'a gerek\r\n // kalmadan) ham bir DOM node'unu attach akışına sokuyor — ama `DomPortal`\r\n // node'un ZATEN bir parent'a bağlı olmasını şart koşuyor (detach sonrası eski\r\n // yerine geri koyabilmek için konumunu hatırlıyor), o yüzden önce `body`'ye\r\n // ekleyip Portal'ı ondan SONRA kuruyoruz.\r\n const bubble = document.createElement('span');\r\n bubble.textContent = text;\r\n document.body.appendChild(bubble);\r\n this.overlayRef.attach(new DomPortal(bubble));\r\n this.bubbleEl = bubble;\r\n }\r\n\r\n /**\r\n * Public: `SearchInput` gibi, kendi state değişimiyle tooltip'i ANINDA\r\n * kapatmak isteyen tüketiciler için (bkz. search-input.ts `expand()`) —\r\n * BİLEREK senkron: tooltip hover/focus/Escape gibi yüksek frekanslı,\r\n * anlık etkileşimlerle kapanıyor, `Popover`'ın gecikmeli-dispose deseni\r\n * (bkz. `popover.ts` `EXIT_MS`) burada gereksiz karmaşıklık + testlerin\r\n * beklediği \"blur → anında kaldırılır\" sözleşmesini bozardı (bkz.\r\n * `tooltip.spec.ts`). Giriş animasyonu (`show()`teki `animate-overlay-in`)\r\n * yeterli — önceden tooltip'in HİÇ animasyonu yoktu (gerçek bulgu).\r\n */\r\n hide(): void {\r\n clearTimeout(this.showHandle);\r\n this.overlayRef?.dispose();\r\n this.overlayRef = undefined;\r\n // `dispose()` DomPortal'ı \"attach öncesi\" body konumuna geri koyuyor,\r\n // DOM'dan silmiyor — silinmezse hover'dan çıkınca balon body'nin sonunda\r\n // öksüz kalıp görünür kalıyordu (gerçek bulgu, birden fazla satırda\r\n // sırayla hover edince ui-kit'te yakalandı). Şablon yolunda `bubbleEl`\r\n // hiç atanmadığı için bu satır NO-OP.\r\n this.bubbleEl?.remove();\r\n this.bubbleEl = undefined;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.hide();\r\n }\r\n}\r\n","import { ElementRef, computed, signal } from '@angular/core';\r\n\r\nexport type TourPlacement = 'bottom' | 'top' | 'start' | 'end';\r\n\r\nexport interface TourStep {\r\n /**\r\n * Vurgulanacak öğe: CSS seçicisi, öğe ya da `ElementRef`. Verilmezse adım ekran ortasında\r\n * bir karşılama/kapanış kartı olarak gösterilir (spot ışığı deliksiz karartır).\r\n */\r\n target?: string | Element | ElementRef<Element>;\r\n title: string;\r\n content: string;\r\n /** Kartın hedefe göre yeri — mantıksal (`start`/`end` RTL'de yer değiştirir). Sığmazsa karşı taraf. */\r\n placement?: TourPlacement;\r\n}\r\n\r\nexport type TourResult = 'completed' | 'skipped';\r\n\r\nexport interface TourOptions {\r\n /** Hedefin çevresindeki boşluk (px). */\r\n padding?: number;\r\n /** Her adım değişiminde (0 tabanlı indeks) — analitik ya da hedefin görünür olması için. */\r\n stepChange?: (index: number, step: TourStep) => void;\r\n}\r\n\r\nexport interface SpotlightRect {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/** Bir tur çalışmasının durumu — servis ile spot ışığı ve kart bileşenleri bunu paylaşır. */\r\nexport class TourRun {\r\n readonly index = signal(0);\r\n /** Hedefin viewport'taki kutusu (padding dahil); hedefsiz adımda `null`. */\r\n readonly rect = signal<SpotlightRect | null>(null);\r\n\r\n readonly step = computed(() => this.steps[this.index()]!);\r\n readonly isFirst = computed(() => this.index() === 0);\r\n readonly isLast = computed(() => this.index() === this.steps.length - 1);\r\n\r\n constructor(\r\n readonly steps: readonly TourStep[],\r\n private readonly onNavigate: (index: number) => void,\r\n private readonly onFinish: (result: TourResult) => void,\r\n ) {}\r\n\r\n next(): void {\r\n if (this.isLast()) this.onFinish('completed');\r\n else this.onNavigate(this.index() + 1);\r\n }\r\n\r\n back(): void {\r\n if (!this.isFirst()) this.onNavigate(this.index() - 1);\r\n }\r\n\r\n skip(): void {\r\n this.onFinish('skipped');\r\n }\r\n}\r\n","import { A11yModule } from '@angular/cdk/a11y';\r\nimport { Component, ElementRef, afterRenderEffect, inject } from '@angular/core';\r\nimport { Button } from '@mesgflow/ui-kit/button';\r\nimport { MF_TOUR_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { TourRun } from './tour.model';\r\n\r\nlet tourCardIdSeq = 0;\r\n\r\n/**\r\n * Adım kartı — modal `role=\"dialog\"`, odak kartın içinde tutulur (`cdkTrapFocus`). Her adım\r\n * değişiminde odak kartın KENDİSİNE taşınır: ekran okuyucu `aria-labelledby` (başlık) +\r\n * `aria-describedby` (içerik) üzerinden yeni adımı baştan okur. Esc turu atlar.\r\n */\r\n@Component({\r\n selector: 'mf-tour-card',\r\n imports: [A11yModule, Button, Icon],\r\n templateUrl: './tour-card.html',\r\n})\r\nexport class TourCard {\r\n protected readonly run = inject(TourRun);\r\n protected readonly labels = inject(MF_TOUR_LABELS);\r\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n private readonly id = `mf-tour-${++tourCardIdSeq}`;\r\n protected readonly titleId = `${this.id}-title`;\r\n protected readonly contentId = `${this.id}-content`;\r\n\r\n constructor() {\r\n afterRenderEffect(() => {\r\n this.run.index();\r\n this.host.nativeElement.querySelector<HTMLElement>('[role=\"dialog\"]')?.focus();\r\n });\r\n }\r\n}\r\n","<div\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n tabindex=\"-1\"\r\n cdkTrapFocus\r\n [attr.aria-labelledby]=\"titleId\"\r\n [attr.aria-describedby]=\"contentId\"\r\n class=\"w-[min(20rem,calc(100vw-2rem))] animate-overlay-in rounded-xl border border-hairline bg-overlay p-4 shadow-3 outline-none\"\r\n (keydown.escape)=\"run.skip()\"\r\n>\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <span class=\"font-mono text-eyebrow text-help uppercase tabular-nums\">\r\n {{ run.index() + 1 }} {{ labels().stepOf }} {{ run.steps.length }}\r\n </span>\r\n <button\r\n type=\"button\"\r\n class=\"-me-1.5 inline-flex size-7 cursor-pointer appearance-none items-center justify-center rounded-md border-0 bg-transparent text-fg-subtle transition-colors duration-fast ease-emphasis hover:bg-state-hover hover:text-fg focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus-ring\"\r\n [attr.aria-label]=\"labels().skip\"\r\n (click)=\"run.skip()\"\r\n >\r\n <span mfIcon [size]=\"16\">close</span>\r\n </button>\r\n </div>\r\n\r\n <h2 [id]=\"titleId\" class=\"mt-1.5 font-display text-base font-semibold text-fg\">\r\n {{ run.step().title }}\r\n </h2>\r\n <p [id]=\"contentId\" class=\"mt-1 text-sm text-fg-muted\">{{ run.step().content }}</p>\r\n\r\n <div class=\"mt-4 flex items-center gap-2\">\r\n <!-- İlerleme: adım başına bir çizgi; salt görsel, sayı zaten yukarıda. -->\r\n <div class=\"flex flex-1 items-center gap-1\" aria-hidden=\"true\">\r\n @for (step of run.steps; track $index) {\r\n <span\r\n class=\"h-1 flex-1 rounded-full transition-colors duration-base ease-emphasis\"\r\n [class]=\"$index <= run.index() ? 'bg-help' : 'bg-surface-alt'\"\r\n ></span>\r\n }\r\n </div>\r\n @if (!run.isFirst()) {\r\n <button\r\n mfButton\r\n appearance=\"text\"\r\n tone=\"neutral\"\r\n size=\"sm\"\r\n type=\"button\"\r\n (click)=\"run.back()\"\r\n >\r\n {{ labels().back }}\r\n </button>\r\n }\r\n <button mfButton tone=\"help\" size=\"sm\" type=\"button\" (click)=\"run.next()\">\r\n {{ run.isLast() ? labels().done : labels().next }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { Component, inject } from '@angular/core';\r\nimport { TourRun } from './tour.model';\r\n\r\n/** Dialog arka planıyla aynı karartma (bkz. motion.css `.mf-dialog-backdrop`), biraz daha koyu. */\r\nconst SCRIM = 'color-mix(in srgb, var(--color-neutral-975) 55%, transparent)';\r\n\r\n/**\r\n * Tam ekran katman: tıklamaları yutar (tur modal) ve hedefin çevresi dışını karartır. Delik,\r\n * hedef kutusuna oturan bir öğenin çok büyük `box-shadow`'u — maske/SVG yolu gerekmez, konumu\r\n * `transition` ile adımlar arasında kayar. Hedefsiz adımda düz karartma.\r\n */\r\n@Component({\r\n selector: 'mf-tour-spotlight',\r\n host: { class: 'fixed inset-0 block' },\r\n template: `\r\n @if (run.rect(); as rect) {\r\n <div class=\"absolute inset-0\" aria-hidden=\"true\"></div>\r\n <div\r\n aria-hidden=\"true\"\r\n class=\"pointer-events-none fixed rounded-lg outline outline-2 outline-offset-0 outline-help transition-[top,left,width,height] duration-base ease-emphasis\"\r\n [style.top.px]=\"rect.top\"\r\n [style.left.px]=\"rect.left\"\r\n [style.width.px]=\"rect.width\"\r\n [style.height.px]=\"rect.height\"\r\n [style.box-shadow]=\"'0 0 0 200vmax ' + scrim\"\r\n ></div>\r\n } @else {\r\n <div class=\"absolute inset-0\" aria-hidden=\"true\" [style.background-color]=\"scrim\"></div>\r\n }\r\n `,\r\n})\r\nexport class TourSpotlight {\r\n protected readonly run = inject(TourRun);\r\n protected readonly scrim = SCRIM;\r\n}\r\n","import {\r\n createFlexibleConnectedPositionStrategy,\r\n createGlobalPositionStrategy,\r\n createOverlayRef,\r\n createRepositionScrollStrategy,\r\n type ConnectedPosition,\r\n type OverlayRef,\r\n} from '@angular/cdk/overlay';\r\nimport { ComponentPortal } from '@angular/cdk/portal';\r\nimport { DOCUMENT, ElementRef, Injector, Service, inject } from '@angular/core';\r\nimport { isRtl } from '@mesgflow/ui-kit/core';\r\nimport { TourCard } from './tour-card';\r\nimport {\r\n TourRun,\r\n type SpotlightRect,\r\n type TourOptions,\r\n type TourPlacement,\r\n type TourResult,\r\n type TourStep,\r\n} from './tour.model';\r\nimport { TourSpotlight } from './tour-spotlight';\r\n\r\nconst GAP = 12;\r\nconst DEFAULT_PADDING = 6;\r\n\r\n/** Tercih edilen taraf önce, sığmazsa karşısı, sonra diğer eksen. */\r\nconst POSITIONS: Record<TourPlacement, ConnectedPosition[]> = {\r\n bottom: [\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: GAP },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -GAP },\r\n ],\r\n top: [\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -GAP },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: GAP },\r\n ],\r\n end: [\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: GAP },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -GAP },\r\n ],\r\n start: [\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -GAP },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: GAP },\r\n ],\r\n};\r\n\r\n/**\r\n * `const result = await tour.start([{ target: '#new-campaign', title: '…', content: '…' }, …]);`\r\n *\r\n * Ürün turu / coachmark — `help` tonu tam bunun için. İki overlay: tam ekran spot ışığı (karartır,\r\n * tıklamaları yutar) ve hedefe bağlı adım kartı. Her adımda hedef görünür alana kaydırılır\r\n * (azaltılmış harekette anında), kaydırma/yeniden boyutlandırmada delik ve kart birlikte izler.\r\n * Bulunamayan hedef ortalanmış karta düşer (tur kırılmaz). Aynı anda tek tur; bitince odak\r\n * turdan önceki öğeye döner. Sonuç: `'completed'` ya da `'skipped'` (Esc, ×).\r\n */\r\n@Service()\r\nexport class TourService {\r\n private readonly injector = inject(Injector);\r\n private readonly document = inject(DOCUMENT);\r\n private active: Promise<TourResult> | null = null;\r\n\r\n get isActive(): boolean {\r\n return this.active !== null;\r\n }\r\n\r\n start(steps: readonly TourStep[], options: TourOptions = {}): Promise<TourResult> {\r\n if (this.active) return this.active;\r\n if (steps.length === 0) return Promise.resolve('completed');\r\n\r\n this.active = new Promise<TourResult>((resolve) => {\r\n const doc = this.document;\r\n const view = doc.defaultView;\r\n const padding = options.padding ?? DEFAULT_PADDING;\r\n const previousFocus = doc.activeElement as HTMLElement | null;\r\n const direction = isRtl(doc.documentElement) ? 'rtl' : 'ltr';\r\n let target: Element | null = null;\r\n let frame = 0;\r\n\r\n const run: TourRun = new TourRun(\r\n steps,\r\n (index) => show(index),\r\n (result) => finish(result),\r\n );\r\n const injector = Injector.create({\r\n providers: [{ provide: TourRun, useValue: run }],\r\n parent: this.injector,\r\n });\r\n\r\n const spotlight = createOverlayRef(this.injector, {\r\n positionStrategy: createGlobalPositionStrategy(this.injector),\r\n width: '100vw',\r\n height: '100vh',\r\n direction,\r\n });\r\n spotlight.attach(new ComponentPortal(TourSpotlight, null, injector));\r\n\r\n const card: OverlayRef = createOverlayRef(this.injector, { direction });\r\n\r\n const measure = () => {\r\n frame = 0;\r\n if (!target) {\r\n run.rect.set(null);\r\n return;\r\n }\r\n const box = target.getBoundingClientRect();\r\n run.rect.set({\r\n top: box.top - padding,\r\n left: box.left - padding,\r\n width: box.width + padding * 2,\r\n height: box.height + padding * 2,\r\n } satisfies SpotlightRect);\r\n card.updatePosition();\r\n };\r\n const schedule = () => {\r\n if (!frame) frame = view?.requestAnimationFrame(measure) ?? 0;\r\n };\r\n\r\n const place = (step: TourStep) => {\r\n const strategy = target\r\n ? createFlexibleConnectedPositionStrategy(this.injector, target as HTMLElement)\r\n .withPositions(POSITIONS[step.placement ?? 'bottom'])\r\n .withViewportMargin(12)\r\n .withPush(true)\r\n : createGlobalPositionStrategy(this.injector).centerHorizontally().centerVertically();\r\n card.updatePositionStrategy(strategy);\r\n card.updateScrollStrategy(createRepositionScrollStrategy(this.injector));\r\n };\r\n\r\n const show = (index: number) => {\r\n const step = steps[index]!;\r\n target = resolveTarget(step.target, doc);\r\n run.index.set(index);\r\n options.stepChange?.(index, step);\r\n if (target) {\r\n const reduced = view?.matchMedia?.('(prefers-reduced-motion: reduce)').matches ?? true;\r\n (target as HTMLElement).scrollIntoView?.({\r\n block: 'center',\r\n inline: 'nearest',\r\n behavior: reduced ? 'auto' : 'smooth',\r\n });\r\n }\r\n place(step);\r\n if (!card.hasAttached()) card.attach(new ComponentPortal(TourCard, null, injector));\r\n measure();\r\n };\r\n\r\n const finish = (result: TourResult) => {\r\n view?.removeEventListener('scroll', schedule, true);\r\n view?.removeEventListener('resize', schedule);\r\n if (frame) view?.cancelAnimationFrame(frame);\r\n card.dispose();\r\n spotlight.dispose();\r\n this.active = null;\r\n previousFocus?.focus?.();\r\n resolve(result);\r\n };\r\n\r\n view?.addEventListener('scroll', schedule, true);\r\n view?.addEventListener('resize', schedule);\r\n show(0);\r\n });\r\n\r\n return this.active;\r\n }\r\n}\r\n\r\nfunction resolveTarget(target: TourStep['target'], doc: Document): Element | null {\r\n if (!target) return null;\r\n if (typeof target === 'string') return doc.querySelector(target);\r\n return target instanceof ElementRef ? target.nativeElement : target;\r\n}\r\n","import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const treeRowVariants = cva(\r\n 'flex cursor-pointer items-center gap-1 rounded-sm py-1 pe-2 text-fg-muted 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 {\r\n variants: {\r\n selected: {\r\n true: 'bg-primary-tint text-primary-tint-fg',\r\n false: 'hover:bg-surface-alt hover:text-fg',\r\n },\r\n disabled: {\r\n true: 'pointer-events-none opacity-50',\r\n false: '',\r\n },\r\n },\r\n defaultVariants: { selected: false, disabled: false },\r\n },\r\n);\r\n\r\nexport type TreeRowSelected = VariantProps<typeof treeRowVariants>['selected'];\r\n","import {\r\n Tree as AriaTree,\r\n TreeItem as AriaTreeItem,\r\n TreeItemGroup as AriaTreeItemGroup,\r\n} from '@angular/aria/tree';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport { Component, effect, forwardRef, input, model } from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { ValueAccessorBase, cn } from '@mesgflow/ui-kit/core';\r\nimport { treeRowVariants } from './tree.variants';\r\n\r\nexport interface TreeNode<T> {\r\n id: string;\r\n label: string;\r\n value: T;\r\n children?: TreeNode<T>[];\r\n disabled?: boolean;\r\n}\r\n\r\n/**\r\n * `<mf-tree [nodes]=\"layers\" [(value)]=\"selectedIds\" />` — katman/yapı\r\n * paneli gibi iç içe, klavye gezintili ağaçlar için. ARIA/klavye (ok\r\n * tuşları, typeahead, seviyeye göre girinti) `@angular/aria/tree`'nin\r\n * `Tree`/`TreeItem`/`TreeItemGroup` pattern'inden geliyor — dokümantasyonun\r\n * KENDİ önerdiği ÖZYİNELEMELİ (`ngTemplateOutlet` + kendi kendine referans\r\n * veren `#treeNodes` template) render deseni birebir izlendi, çünkü veri\r\n * derinliği (`TreeNode.children`) derleme zamanında bilinmiyor.\r\n */\r\n@Component({\r\n selector: 'mf-tree',\r\n exportAs: 'mfTree',\r\n host: { class: 'block' },\r\n imports: [AriaTree, AriaTreeItem, AriaTreeItemGroup, NgTemplateOutlet, Icon],\r\n templateUrl: './tree.html',\r\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Tree), multi: true }],\r\n})\r\nexport class Tree<T> extends ValueAccessorBase<T[]> implements ControlValueAccessor {\r\n readonly nodes = input.required<TreeNode<T>[]>();\r\n readonly value = model<T[]>([]);\r\n readonly multi = input(false);\r\n readonly ariaLabel = input('');\r\n /** Tüm dalları açık başlatır (ör. arama sonuçları) — kullanıcı yine tek tek kapatabilir. */\r\n readonly expandAll = input(false);\r\n\r\n constructor() {\r\n super();\r\n // `value()` `ngTree`'nin KENDİ iç seçim mantığından İKİ-YÖNLÜ bağlamayla\r\n // (tree.html `[(value)]`) değişiyor — tek bir \"seçim değişti\" metodu YOK,\r\n // bu yüzden CVA bildirimini bir effect ile köprülüyoruz. İLK çalışma\r\n // (kurulumda, henüz gerçek bir kullanıcı etkileşimi YOKKEN) atlanır.\r\n let first = true;\r\n effect(() => {\r\n const v = this.value();\r\n if (first) {\r\n first = false;\r\n return;\r\n }\r\n this.onChange(v);\r\n this.onTouched();\r\n });\r\n }\r\n\r\n writeValue(value: T[]): void {\r\n this.value.set(value);\r\n }\r\n\r\n protected rowClasses(selected: boolean | undefined, disabled: boolean): string {\r\n return cn(treeRowVariants({ selected: !!selected, disabled }));\r\n }\r\n}\r\n","<ul\r\n ngTree\r\n #treeRef=\"ngTree\"\r\n [(value)]=\"value\"\r\n [multi]=\"multi()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n class=\"text-sm\"\r\n>\r\n <ng-template\r\n [ngTemplateOutlet]=\"treeNodes\"\r\n [ngTemplateOutletContext]=\"{ $implicit: nodes(), parent: treeRef }\"\r\n />\r\n</ul>\r\n\r\n<ng-template #treeNodes let-nodes let-parent=\"parent\">\r\n @for (node of nodes; track node.id) {\r\n <li\r\n ngTreeItem\r\n #item=\"ngTreeItem\"\r\n [parent]=\"parent\"\r\n [value]=\"node.value\"\r\n [label]=\"node.label\"\r\n [disabled]=\"!!node.disabled\"\r\n [expanded]=\"expandAll()\"\r\n >\r\n <span\r\n [class]=\"rowClasses(item.selected(), !!node.disabled)\"\r\n [style.padding-inline-start.px]=\"item.level() * 16\"\r\n >\r\n @if (node.children && node.children.length > 0) {\r\n <span\r\n mfIcon\r\n [size]=\"16\"\r\n class=\"shrink-0 transition-transform duration-fast rtl:-scale-x-100\"\r\n [class.rotate-90]=\"item.expanded()\"\r\n [class.rtl:-rotate-90]=\"item.expanded()\"\r\n >chevron_right</span\r\n >\r\n } @else {\r\n <span class=\"w-4 shrink-0\" aria-hidden=\"true\"></span>\r\n }\r\n <span class=\"truncate\">{{ node.label }}</span>\r\n </span>\r\n @if (node.children && node.children.length > 0) {\r\n <ul role=\"group\">\r\n <ng-template ngTreeItemGroup [ownedBy]=\"item\" #group=\"ngTreeItemGroup\">\r\n <ng-template\r\n [ngTemplateOutlet]=\"treeNodes\"\r\n [ngTemplateOutletContext]=\"{ $implicit: node.children, parent: group }\"\r\n />\r\n </ng-template>\r\n </ul>\r\n }\r\n </li>\r\n }\r\n</ng-template>\r\n","import type { TreeNode } from '@mesgflow/ui-kit/tree';\r\n\r\n/** Küçük harf + aksan atma + ı→i — \"istanbul\" \"İstanbul\"u, \"cagri\" \"Çağrı\"yı bulur. */\r\nfunction fold(text: string): string {\r\n return text.toLocaleLowerCase().normalize('NFD').replace(/\\p{M}/gu, '').replace(/ı/g, 'i');\r\n}\r\n\r\n/**\r\n * Etiketi sorguyu içeren düğümleri, ATALARIYLA birlikte tutar (bağlam kaybolmasın — \"Kadıköy\"\r\n * bulunduğunda \"İstanbul › Kadıköy\" yolu görünür). Eşleşen bir düğümün çocukları da kalır\r\n * (bir kategoriyi aramak altındakileri de gösterir). Boş sorgu ağacı aynen döner.\r\n */\r\nexport function filterTree<T>(nodes: readonly TreeNode<T>[], query: string): TreeNode<T>[] {\r\n const q = fold(query.trim());\r\n if (!q) return [...nodes];\r\n const walk = (list: readonly TreeNode<T>[]): TreeNode<T>[] =>\r\n list.flatMap((node) => {\r\n if (fold(node.label).includes(q)) return [node];\r\n const children = node.children ? walk(node.children) : [];\r\n return children.length ? [{ ...node, children }] : [];\r\n });\r\n return walk(nodes);\r\n}\r\n\r\n/** `value → label` eşlemesi (tetikleyici metni/yongaları için) — değer kimliğiyle (`===`). */\r\nexport function flattenTree<T>(nodes: readonly TreeNode<T>[]): Map<T, string> {\r\n const map = new Map<T, string>();\r\n const walk = (list: readonly TreeNode<T>[]) =>\r\n list.forEach((node) => {\r\n map.set(node.value, node.label);\r\n if (node.children) walk(node.children);\r\n });\r\n walk(nodes);\r\n return map;\r\n}\r\n","import { OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n ElementRef,\r\n afterRenderEffect,\r\n booleanAttribute,\r\n computed,\r\n forwardRef,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\r\nimport { Chip } from '@mesgflow/ui-kit/chip';\r\nimport { MF_TREE_SELECT_LABELS, ValueAccessorBase, cn, type MfSize } from '@mesgflow/ui-kit/core';\r\nimport { Icon } from '@mesgflow/ui-kit/icon';\r\nimport { Input } from '@mesgflow/ui-kit/input';\r\nimport { Popover } from '@mesgflow/ui-kit/popover';\r\nimport { selectTriggerVariants } from '@mesgflow/ui-kit/select';\r\nimport { Tree, type TreeNode } from '@mesgflow/ui-kit/tree';\r\nimport { filterTree, flattenTree } from './tree-filter';\r\n\r\n/**\r\n * `<mf-tree-select [nodes]=\"regions\" [(value)]=\"chosen\" multi searchable />`\r\n *\r\n * Hiyerarşik seçenekler için Select — kategori, bölge, klasör. Tetikleyici Select ile AYNI\r\n * görünüm (çoklu seçimde yongalar + \"+N\"); panel kitin `Tree`'si (WAI-ARIA tree: oklar, Home/End,\r\n * yazarak ara, Enter/Space seçim — `@angular/aria/tree`'den).\r\n *\r\n * `searchable`: panelin başında aksan duyarsız arama — eşleşmeler ATALARIYLA tutulur ve dallar\r\n * açılır (bkz. `filterTree`). Tek seçimde seçim paneli kapatır ve odağı tetikleyiciye döndürür;\r\n * çoklu seçimde panel açık kalır. `value` her zaman dizi (Tree ile aynı sözleşme).\r\n */\r\n@Component({\r\n selector: 'mf-tree-select',\r\n exportAs: 'mfTreeSelect',\r\n imports: [OverlayModule, Chip, Icon, Input, Popover, Tree],\r\n host: { class: 'block' },\r\n templateUrl: './tree-select.html',\r\n providers: [\r\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TreeSelect), multi: true },\r\n ],\r\n})\r\nexport class TreeSelect<T> extends ValueAccessorBase<T[]> implements ControlValueAccessor {\r\n readonly nodes = input.required<TreeNode<T>[]>();\r\n readonly value = model<T[]>([]);\r\n readonly multi = input(false, { transform: booleanAttribute });\r\n readonly searchable = input(false, { transform: booleanAttribute });\r\n readonly placeholder = input<string>();\r\n readonly size = input<MfSize>('md');\r\n readonly hasError = input(false);\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n /** Tetikleyicinin (ve ağacın) erişilebilir adı — görünür bir etiket yoksa zorunlu. */\r\n readonly ariaLabel = input('');\r\n readonly maxVisibleChips = input(2);\r\n\r\n protected readonly labels = inject(MF_TREE_SELECT_LABELS);\r\n private readonly trigger = viewChild.required<ElementRef<HTMLButtonElement>>('trigger');\r\n private readonly panel = viewChild<ElementRef<HTMLElement>>('panel');\r\n\r\n protected readonly open = signal(false);\r\n protected readonly query = signal('');\r\n private readonly formDisabled = signal(false);\r\n\r\n protected readonly isDisabled = computed(() => this.disabled() || this.formDisabled());\r\n protected readonly effectivePlaceholder = computed(\r\n () => this.placeholder() ?? this.labels().placeholder,\r\n );\r\n protected readonly visibleNodes = computed(() => filterTree(this.nodes(), this.query()));\r\n protected readonly searching = computed(() => this.query().trim().length > 0);\r\n\r\n private readonly labelByValue = computed(() => flattenTree(this.nodes()));\r\n protected readonly selectedLabels = computed(() =>\r\n this.value()\r\n .map((v) => this.labelByValue().get(v))\r\n .filter((label): label is string => !!label),\r\n );\r\n protected readonly visibleChips = computed(() =>\r\n this.selectedLabels().slice(0, this.maxVisibleChips()),\r\n );\r\n protected readonly overflowCount = computed(() =>\r\n Math.max(0, this.selectedLabels().length - this.maxVisibleChips()),\r\n );\r\n\r\n protected readonly triggerClasses = computed(() =>\r\n cn(selectTriggerVariants({ size: this.size(), hasError: this.hasError() })),\r\n );\r\n\r\n constructor() {\r\n super();\r\n // Panel açılınca odağı içeri taşı: arama kutusu, yoksa ağacın ETKİN öğesi. Ağaç dolaşan\r\n // tabindex kullanır — tuşlar `tabindex=\"0\"` olan treeitem'da işlenir; `role=\"tree\"` kabına\r\n // odak vermek oklarla gezinmeyi ölü bırakıyordu (gerçek tarayıcıda yakalandı).\r\n afterRenderEffect(() => {\r\n if (!this.open()) return;\r\n const panel = this.panel()?.nativeElement;\r\n untracked(() =>\r\n panel\r\n ?.querySelector<HTMLElement>('input, [role=\"treeitem\"][tabindex=\"0\"], [role=\"treeitem\"]')\r\n ?.focus(),\r\n );\r\n });\r\n }\r\n\r\n protected toggle(): void {\r\n if (this.isDisabled()) return;\r\n if (this.open()) this.close(false);\r\n else {\r\n this.query.set('');\r\n this.open.set(true);\r\n }\r\n }\r\n\r\n protected onTriggerKeydown(event: KeyboardEvent): void {\r\n if (event.key === 'ArrowDown' && !this.open()) {\r\n event.preventDefault();\r\n this.toggle();\r\n }\r\n }\r\n\r\n protected onTreeValue(values: T[]): void {\r\n const next = this.multi() ? values : values.slice(-1);\r\n const changed =\r\n next.length !== this.value().length || next.some((v, i) => v !== this.value()[i]);\r\n if (!changed) return;\r\n this.value.set(next);\r\n this.onChange(next);\r\n this.onTouched();\r\n if (!this.multi() && next.length) this.close(true);\r\n }\r\n\r\n protected close(restoreFocus: boolean): void {\r\n this.open.set(false);\r\n if (restoreFocus) this.trigger().nativeElement.focus();\r\n }\r\n\r\n writeValue(value: T[] | null): void {\r\n this.value.set(value ?? []);\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.formDisabled.set(disabled);\r\n }\r\n}\r\n","<button\r\n #trigger\r\n type=\"button\"\r\n cdkOverlayOrigin\r\n #origin=\"cdkOverlayOrigin\"\r\n [class]=\"triggerClasses()\"\r\n [disabled]=\"isDisabled()\"\r\n [attr.aria-label]=\"ariaLabel() || null\"\r\n [attr.aria-expanded]=\"open()\"\r\n aria-haspopup=\"tree\"\r\n (click)=\"toggle()\"\r\n (keydown)=\"onTriggerKeydown($event)\"\r\n>\r\n @if (selectedLabels().length === 0) {\r\n <span class=\"truncate text-fg-subtle\">{{ effectivePlaceholder() }}</span>\r\n } @else if (multi()) {\r\n <span class=\"flex min-w-0 flex-1 flex-wrap items-center gap-1\">\r\n @for (label of visibleChips(); track label) {\r\n <mf-chip size=\"sm\">{{ label }}</mf-chip>\r\n }\r\n @if (overflowCount() > 0) {\r\n <mf-chip size=\"sm\">+{{ overflowCount() }}</mf-chip>\r\n }\r\n </span>\r\n } @else {\r\n <span class=\"truncate\">{{ selectedLabels()[0] }}</span>\r\n }\r\n <span mfIcon [size]=\"18\" class=\"shrink-0 text-fg-subtle\">unfold_more</span>\r\n</button>\r\n\r\n<mf-popover\r\n [origin]=\"origin\"\r\n [open]=\"open()\"\r\n placement=\"bottom-start\"\r\n padding=\"sm\"\r\n [matchTriggerWidth]=\"true\"\r\n (closed)=\"close(true)\"\r\n>\r\n <div #panel class=\"flex max-h-80 flex-col gap-1\">\r\n @if (searchable()) {\r\n <input\r\n mfInput\r\n size=\"sm\"\r\n type=\"search\"\r\n autocomplete=\"off\"\r\n [placeholder]=\"labels().searchPlaceholder\"\r\n [attr.aria-label]=\"labels().searchPlaceholder\"\r\n [value]=\"query()\"\r\n (input)=\"query.set($any($event.target).value)\"\r\n />\r\n }\r\n <div class=\"min-h-0 overflow-y-auto\">\r\n @if (visibleNodes().length === 0) {\r\n <p class=\"px-2.5 py-6 text-center text-sm text-fg-subtle\" role=\"status\">\r\n {{ labels().noResults }}\r\n </p>\r\n } @else {\r\n <mf-tree\r\n [nodes]=\"visibleNodes()\"\r\n [value]=\"value()\"\r\n (valueChange)=\"onTreeValue($event)\"\r\n [multi]=\"multi()\"\r\n [expandAll]=\"searching()\"\r\n [ariaLabel]=\"ariaLabel() || effectivePlaceholder()\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n</mf-popover>\r\n","/*\r\n * Public API Surface of @mesgflow/ui-kit — birincil giriş noktası.\r\n *\r\n * Her satır bir ikincil giriş noktasının (`@mesgflow/ui-kit/<klasör>`) kendi\r\n * `index.ts` barrel'ını yeniden dışa verir — tüketici `import { Button }\r\n * from '@mesgflow/ui-kit'` yazmaya devam eder, ama isterse `import { Button }\r\n * from '@mesgflow/ui-kit/button'` ile yalnız o girişi de çekebilir (bkz.\r\n * `@angular/cdk`'nin `./overlay`/`./a11y` deseni).\r\n */\r\nexport * from './core';\r\n\r\nexport * from './accordion';\r\nexport * from './alert';\r\nexport * from './avatar';\r\nexport * from './avatar-group';\r\nexport * from './badge';\r\nexport * from './banner';\r\nexport * from './box-input';\r\nexport * from './brand';\r\nexport * from './breadcrumb';\r\nexport * from './button';\r\nexport * from './button-group';\r\nexport * from './card';\r\nexport * from './chart';\r\nexport * from './checkbox';\r\nexport * from './chip';\r\nexport * from './code-block';\r\nexport * from './collapsible';\r\nexport * from './color-picker';\r\nexport * from './combobox';\r\nexport * from './command';\r\nexport * from './context-menu';\r\nexport * from './copy-button';\r\nexport * from './date-picker';\r\nexport * from './description-list';\r\nexport * from './dialog';\r\nexport * from './divider';\r\nexport * from './dropzone';\r\nexport * from './empty-state';\r\nexport * from './field';\r\nexport * from './hover-card';\r\nexport * from './icon';\r\nexport * from './input';\r\nexport * from './kbd';\r\nexport * from './link';\r\nexport * from './menu';\r\nexport * from './number-input';\r\nexport * from './otp-input';\r\nexport * from './page-header';\r\nexport * from './pagination';\r\nexport * from './password-input';\r\nexport * from './popover';\r\nexport * from './progress';\r\nexport * from './radio';\r\nexport * from './rating';\r\nexport * from './scroll-area';\r\nexport * from './search-input';\r\nexport * from './segmented-control';\r\nexport * from './select';\r\nexport * from './sidebar';\r\nexport * from './skeleton';\r\nexport * from './slider';\r\nexport * from './spinner';\r\nexport * from './splitter';\r\nexport * from './stat-tile';\r\nexport * from './stepper';\r\nexport * from './switch';\r\nexport * from './table';\r\nexport * from './tabs';\r\nexport * from './tag-input';\r\nexport * from './time-picker';\r\nexport * from './theme-switcher';\r\nexport * from './timeline';\r\nexport * from './toggle';\r\nexport * from './toast';\r\nexport * from './toolbar';\r\nexport * from './tooltip';\r\nexport * from './tour';\r\nexport * from './tree';\r\nexport * from './tree-select';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["AriaAccordionGroup","cn","AriaAccordionTrigger","AriaAccordionPanel","Icon","MF_ALERT_LABELS","Button","SIZE_CLASSES","MF_AVATAR_GROUP_LABELS","Avatar","FILL","ValueAccessorBase","MF_BOX_INPUT_LABELS","NumberInput","MF_BREADCRUMB_LABELS","Link","Spinner","MF_CHART_LABELS","focusRecipe","overlaySurface","MF_CHIP_LABELS","MF_COPY_LABELS","CopyButton","MF_COLOR_PICKER_LABELS","i1","Popover","MF_COMBOBOX_LABELS","MF_COMMAND_LABELS","MF_DATE_LOCALE","Kbd","DialogSurface","DialogService","Tooltip","isSameDayFns","MF_DATE_PICKER_LABELS","Input","InputGroup","InputPrefix","InputSuffix","glassSurface","MF_DIALOG_LABELS","EXIT_MS","CdkDialog","MF_DROPZONE_LABELS","MF_CHARACTER_COUNT_LABELS","controlSize","controlSurface","disabledRecipe","AriaMenu","AriaMenuItem","AriaMenuTrigger","MF_OTP_INPUT_LABELS","Breadcrumb","CELL_BASE","MF_PAGINATION_LABELS","MF_PASSWORD_INPUT_LABELS","MF_PROGRESS_LABELS","nextId","MF_RATING_LABELS","isRtl","scrollFromInlineStart","MF_SEARCH_INPUT_LABELS","AriaToolbar","AriaToolbarWidgetGroup","AriaToolbarWidget","MF_SELECT_LABELS","Chip","MF_SIDEBAR_LABELS","inlineStartRatio","MF_COMMON_LABELS","Card","Sparkline","MF_STEPPER_LABELS","MF_TABLE_LABELS","Checkbox","operatorLabelFor","dateRangeForPreset","Select","Calendar","mergeLabels","Skeleton","EmptyState","SearchInput","MF_TABS_LABELS","AriaTabList","AriaTab","AriaTabPanel","AriaTabs","MF_TIME_PICKER_LABELS","ScrollArea","MF_THEME_SWITCHER_LABELS","ToggleGroup","ToggleGroupItem","MF_TOAST_LABELS","POSITIONS","MF_TOUR_LABELS","AriaTree","AriaTreeItem","AriaTreeItemGroup","MF_TREE_SELECT_LABELS","selectTriggerVariants","Tree"],"mappings":"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"}
|