@mesgflow/ui-kit 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/fesm2022/mesgflow-ui-kit-accordion.mjs +6 -6
  2. package/fesm2022/mesgflow-ui-kit-agenda.mjs +3 -3
  3. package/fesm2022/mesgflow-ui-kit-alert.mjs +3 -3
  4. package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +3 -3
  5. package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +3 -3
  6. package/fesm2022/mesgflow-ui-kit-avatar.mjs +3 -3
  7. package/fesm2022/mesgflow-ui-kit-badge.mjs +3 -3
  8. package/fesm2022/mesgflow-ui-kit-banner.mjs +3 -3
  9. package/fesm2022/mesgflow-ui-kit-blocks.mjs +16 -16
  10. package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -1
  11. package/fesm2022/mesgflow-ui-kit-box-input.mjs +3 -3
  12. package/fesm2022/mesgflow-ui-kit-brand.mjs +3 -3
  13. package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +3 -3
  14. package/fesm2022/mesgflow-ui-kit-button-group.mjs +3 -3
  15. package/fesm2022/mesgflow-ui-kit-button.mjs +3 -3
  16. package/fesm2022/mesgflow-ui-kit-card.mjs +12 -12
  17. package/fesm2022/mesgflow-ui-kit-carousel.mjs +3 -3
  18. package/fesm2022/mesgflow-ui-kit-chart.mjs +12 -12
  19. package/fesm2022/mesgflow-ui-kit-checkbox.mjs +3 -3
  20. package/fesm2022/mesgflow-ui-kit-chip.mjs +3 -3
  21. package/fesm2022/mesgflow-ui-kit-code-block.mjs +3 -3
  22. package/fesm2022/mesgflow-ui-kit-collapsible.mjs +9 -9
  23. package/fesm2022/mesgflow-ui-kit-color-picker.mjs +3 -3
  24. package/fesm2022/mesgflow-ui-kit-combobox.mjs +4 -4
  25. package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
  26. package/fesm2022/mesgflow-ui-kit-command.mjs +15 -16
  27. package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -1
  28. package/fesm2022/mesgflow-ui-kit-context-menu.mjs +3 -3
  29. package/fesm2022/mesgflow-ui-kit-copy-button.mjs +6 -6
  30. package/fesm2022/mesgflow-ui-kit-core.mjs +9 -4
  31. package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
  32. package/fesm2022/mesgflow-ui-kit-countdown.mjs +3 -3
  33. package/fesm2022/mesgflow-ui-kit-date-picker.mjs +12 -12
  34. package/fesm2022/mesgflow-ui-kit-description-list.mjs +3 -3
  35. package/fesm2022/mesgflow-ui-kit-dialog.mjs +197 -34
  36. package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
  37. package/fesm2022/mesgflow-ui-kit-divider.mjs +3 -3
  38. package/fesm2022/mesgflow-ui-kit-drawer.mjs +4 -4
  39. package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -1
  40. package/fesm2022/mesgflow-ui-kit-dropzone.mjs +3 -3
  41. package/fesm2022/mesgflow-ui-kit-empty-state.mjs +3 -3
  42. package/fesm2022/mesgflow-ui-kit-field.mjs +38 -7
  43. package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
  44. package/fesm2022/mesgflow-ui-kit-file-upload.mjs +3 -3
  45. package/fesm2022/mesgflow-ui-kit-hover-card.mjs +6 -6
  46. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +4 -0
  47. package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
  48. package/fesm2022/mesgflow-ui-kit-icon.mjs +3 -3
  49. package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +3 -3
  50. package/fesm2022/mesgflow-ui-kit-input.mjs +21 -19
  51. package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
  52. package/fesm2022/mesgflow-ui-kit-kbd.mjs +3 -3
  53. package/fesm2022/mesgflow-ui-kit-lightbox.mjs +9 -9
  54. package/fesm2022/mesgflow-ui-kit-link.mjs +3 -3
  55. package/fesm2022/mesgflow-ui-kit-listbox.mjs +3 -3
  56. package/fesm2022/mesgflow-ui-kit-mention.mjs +6 -6
  57. package/fesm2022/mesgflow-ui-kit-menu.mjs +12 -12
  58. package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +3 -3
  59. package/fesm2022/mesgflow-ui-kit-notification-center.mjs +3 -3
  60. package/fesm2022/mesgflow-ui-kit-number-input.mjs +3 -3
  61. package/fesm2022/mesgflow-ui-kit-otp-input.mjs +3 -3
  62. package/fesm2022/mesgflow-ui-kit-page-header.mjs +6 -6
  63. package/fesm2022/mesgflow-ui-kit-pagination.mjs +3 -3
  64. package/fesm2022/mesgflow-ui-kit-password-input.mjs +47 -71
  65. package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
  66. package/fesm2022/mesgflow-ui-kit-popover.mjs +3 -3
  67. package/fesm2022/mesgflow-ui-kit-progress.mjs +3 -3
  68. package/fesm2022/mesgflow-ui-kit-qr-code.mjs +766 -0
  69. package/fesm2022/mesgflow-ui-kit-qr-code.mjs.map +1 -0
  70. package/fesm2022/mesgflow-ui-kit-radio.mjs +6 -6
  71. package/fesm2022/mesgflow-ui-kit-rating.mjs +3 -3
  72. package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +3 -3
  73. package/fesm2022/mesgflow-ui-kit-search-input.mjs +3 -3
  74. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +34 -22
  75. package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
  76. package/fesm2022/mesgflow-ui-kit-select.mjs +3 -3
  77. package/fesm2022/mesgflow-ui-kit-sidebar.mjs +12 -12
  78. package/fesm2022/mesgflow-ui-kit-skeleton.mjs +3 -3
  79. package/fesm2022/mesgflow-ui-kit-slider.mjs +6 -6
  80. package/fesm2022/mesgflow-ui-kit-sortable.mjs +6 -6
  81. package/fesm2022/mesgflow-ui-kit-spinner.mjs +3 -3
  82. package/fesm2022/mesgflow-ui-kit-split-button.mjs +3 -3
  83. package/fesm2022/mesgflow-ui-kit-splitter.mjs +12 -12
  84. package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +3 -3
  85. package/fesm2022/mesgflow-ui-kit-stepper.mjs +6 -6
  86. package/fesm2022/mesgflow-ui-kit-switch.mjs +3 -3
  87. package/fesm2022/mesgflow-ui-kit-table.mjs +21 -21
  88. package/fesm2022/mesgflow-ui-kit-tabs.mjs +27 -27
  89. package/fesm2022/mesgflow-ui-kit-tag-input.mjs +3 -3
  90. package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +3 -3
  91. package/fesm2022/mesgflow-ui-kit-theming.mjs +3 -3
  92. package/fesm2022/mesgflow-ui-kit-time-picker.mjs +3 -3
  93. package/fesm2022/mesgflow-ui-kit-timeline.mjs +3 -3
  94. package/fesm2022/mesgflow-ui-kit-toast.mjs +6 -6
  95. package/fesm2022/mesgflow-ui-kit-toggle.mjs +9 -9
  96. package/fesm2022/mesgflow-ui-kit-toolbar.mjs +9 -9
  97. package/fesm2022/mesgflow-ui-kit-tooltip.mjs +3 -3
  98. package/fesm2022/mesgflow-ui-kit-tour.mjs +9 -9
  99. package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +3 -3
  100. package/fesm2022/mesgflow-ui-kit-tree-select.mjs +3 -3
  101. package/fesm2022/mesgflow-ui-kit-tree.mjs +3 -3
  102. package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +3 -3
  103. package/fesm2022/mesgflow-ui-kit.mjs +1 -0
  104. package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
  105. package/package.json +5 -1
  106. package/tokens.json +1583 -1583
  107. package/types/mesgflow-ui-kit-command.d.ts +2 -2
  108. package/types/mesgflow-ui-kit-core.d.ts +10 -2
  109. package/types/mesgflow-ui-kit-dialog.d.ts +97 -12
  110. package/types/mesgflow-ui-kit-field.d.ts +24 -2
  111. package/types/mesgflow-ui-kit-input.d.ts +2 -0
  112. package/types/mesgflow-ui-kit-password-input.d.ts +43 -6
  113. package/types/mesgflow-ui-kit-qr-code.d.ts +160 -0
  114. package/types/mesgflow-ui-kit-segmented-control.d.ts +19 -11
  115. package/types/mesgflow-ui-kit.d.ts +1 -0
@@ -1,7 +1,7 @@
1
1
  import * as _mesgflow_ui_kit_command from '@mesgflow/ui-kit/command';
2
2
  import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
3
3
  import * as _angular_core from '@angular/core';
4
- import { DialogRef } from '@angular/cdk/dialog';
4
+ import * as _mesgflow_ui_kit_dialog from '@mesgflow/ui-kit/dialog';
5
5
 
6
6
  /** `mf-command`'ın tek öğesi — `data` tüketicinin kendi yükü (rota, eylem kimliği vb.). */
7
7
  interface MfCommandItem<T = unknown> {
@@ -125,7 +125,7 @@ interface CommandPaletteData<T = unknown> {
125
125
  */
126
126
  declare class CommandPalette<T = unknown> {
127
127
  protected readonly data: CommandPaletteData<T>;
128
- protected readonly ref: DialogRef<MfCommandItem<T>, CommandPalette<T>>;
128
+ protected readonly ref: _mesgflow_ui_kit_dialog.MfDialogRef<MfCommandItem<T>, CommandPalette<T>>;
129
129
  /** `DialogService` çıkış animasyonu turu — `Dialog`'un aynı reaktif sınıfı (bkz. dialog.service.ts). */
130
130
  private readonly surface;
131
131
  protected readonly closing: _angular_core.Signal<boolean>;
@@ -384,6 +384,12 @@ interface MfPasswordInputLabels {
384
384
  show: string;
385
385
  hide: string;
386
386
  }
387
+ interface MfQrCodeLabels {
388
+ /** `role="img"` için varsayılan erişilebilir ad. */
389
+ ariaLabel: string;
390
+ /** İçerik seçilen hata düzeltme seviyesiyle sığmadığında. */
391
+ error: string;
392
+ }
387
393
  interface MfChipLabels {
388
394
  remove: string;
389
395
  }
@@ -622,6 +628,7 @@ interface MfLabels {
622
628
  stepper: MfStepperLabels;
623
629
  progress: MfProgressLabels;
624
630
  passwordInput: MfPasswordInputLabels;
631
+ qrCode: MfQrCodeLabels;
625
632
  chip: MfChipLabels;
626
633
  alert: MfAlertLabels;
627
634
  breadcrumb: MfBreadcrumbLabels;
@@ -696,6 +703,7 @@ declare const MF_OTP_INPUT_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.M
696
703
  declare const MF_STEPPER_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfStepperLabels>>;
697
704
  declare const MF_PROGRESS_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfProgressLabels>>;
698
705
  declare const MF_PASSWORD_INPUT_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfPasswordInputLabels>>;
706
+ declare const MF_QR_CODE_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfQrCodeLabels>>;
699
707
  declare const MF_CHIP_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfChipLabels>>;
700
708
  declare const MF_ALERT_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfAlertLabels>>;
701
709
  declare const MF_BREADCRUMB_LABELS: InjectionToken<Signal<_mesgflow_ui_kit_core.MfBreadcrumbLabels>>;
@@ -754,5 +762,5 @@ interface ProvideMesgflowUiOptions {
754
762
  */
755
763
  declare function provideMesgflowUi(options?: ProvideMesgflowUiOptions): EnvironmentProviders;
756
764
 
757
- export { MF_AGENDA_LABELS, MF_ALERT_LABELS, MF_AUTH_CARD_LABELS, MF_AVATAR_GROUP_LABELS, MF_BOX_INPUT_LABELS, MF_BREADCRUMB_LABELS, MF_CAROUSEL_LABELS, MF_CHARACTER_COUNT_LABELS, MF_CHART_LABELS, MF_CHIP_LABELS, MF_COLOR_PICKER_LABELS, MF_COMBOBOX_LABELS, MF_COMMAND_LABELS, MF_COMMON_LABELS, MF_COPY_LABELS, MF_COUNTDOWN_LABELS, MF_DATE_LOCALE, MF_DATE_PICKER_LABELS, MF_DIALOG_LABELS, MF_DROPZONE_LABELS, MF_FILE_UPLOAD_LABELS, MF_INLINE_EDIT_LABELS, MF_INVITE_MEMBERS_LABELS, MF_LABELS, MF_LIGHTBOX_LABELS, MF_MENTION_LABELS, MF_NOTIFICATION_CENTER_LABELS, MF_OTP_INPUT_LABELS, MF_PAGINATION_LABELS, MF_PANEL_GROUP_LABELS, MF_PASSWORD_INPUT_LABELS, MF_PROGRESS_LABELS, MF_RATING_LABELS, MF_SEARCH_INPUT_LABELS, MF_SELECT_LABELS, MF_SIDEBAR_LABELS, MF_SLIDER_LABELS, MF_SORTABLE_LABELS, MF_SPLIT_BUTTON_LABELS, MF_STAT_TILE_LABELS, MF_STEPPER_LABELS, MF_TABLE_LABELS, MF_TABS_LABELS, MF_THEME_SWITCHER_LABELS, MF_TIME_PICKER_LABELS, MF_TOAST_LABELS, MF_TOUR_LABELS, MF_TRANSFER_LIST_LABELS, MF_TREE_SELECT_LABELS, SlidingIndicator, ValueAccessorBase, cn, containerSurface, controlSize, controlSurface, disabledRecipe, errorRecipe, exitDurationMs, focusRecipe, glassSurface, inlineStartRatio, isRtl, mergeLabels, mfLabelsEn, nextId, overlayPositions, overlaySurface, parseCssDuration, pointerPositions, prefersReducedMotion, pressRecipe, provideMesgflowUi, scrollFromInlineStart, transitionRecipe };
758
- export type { DeepPartial, MfAgendaLabels, MfAlertLabels, MfAuthCardLabels, MfAvatarGroupLabels, MfBoxInputLabels, MfBreadcrumbLabels, MfCarouselLabels, MfCharacterCountLabels, MfChartLabels, MfChipLabels, MfColorPickerLabels, MfComboboxLabels, MfCommandLabels, MfCommonLabels, MfControlSize, MfCopyLabels, MfCountdownLabels, MfDatePickerLabels, MfDialogLabels, MfDropzoneLabels, MfFileUploadLabels, MfInlineEditLabels, MfInviteMembersLabels, MfLabels, MfLightboxLabels, MfMentionLabels, MfNotificationCenterLabels, MfOtpInputLabels, MfPaginationLabels, MfPanelGroupLabels, MfPasswordInputLabels, MfPlacement, MfProgressLabels, MfRatingLabels, MfSearchInputLabels, MfSelectLabels, MfSidebarLabels, MfSize, MfSliderLabels, MfSortableLabels, MfSplitButtonLabels, MfStatTileLabels, MfStepperLabels, MfTableFilterLabels, MfTableFilterOperatorLabels, MfTableLabels, MfTablePaginationLabels, MfTabsLabels, MfThemeSwitcherLabels, MfTimePickerLabels, MfToastLabels, MfTone, MfTourLabels, MfTransferListLabels, MfTreeSelectLabels, ProvideMesgflowUiOptions, SlidingIndicatorAxis };
765
+ export { MF_AGENDA_LABELS, MF_ALERT_LABELS, MF_AUTH_CARD_LABELS, MF_AVATAR_GROUP_LABELS, MF_BOX_INPUT_LABELS, MF_BREADCRUMB_LABELS, MF_CAROUSEL_LABELS, MF_CHARACTER_COUNT_LABELS, MF_CHART_LABELS, MF_CHIP_LABELS, MF_COLOR_PICKER_LABELS, MF_COMBOBOX_LABELS, MF_COMMAND_LABELS, MF_COMMON_LABELS, MF_COPY_LABELS, MF_COUNTDOWN_LABELS, MF_DATE_LOCALE, MF_DATE_PICKER_LABELS, MF_DIALOG_LABELS, MF_DROPZONE_LABELS, MF_FILE_UPLOAD_LABELS, MF_INLINE_EDIT_LABELS, MF_INVITE_MEMBERS_LABELS, MF_LABELS, MF_LIGHTBOX_LABELS, MF_MENTION_LABELS, MF_NOTIFICATION_CENTER_LABELS, MF_OTP_INPUT_LABELS, MF_PAGINATION_LABELS, MF_PANEL_GROUP_LABELS, MF_PASSWORD_INPUT_LABELS, MF_PROGRESS_LABELS, MF_QR_CODE_LABELS, MF_RATING_LABELS, MF_SEARCH_INPUT_LABELS, MF_SELECT_LABELS, MF_SIDEBAR_LABELS, MF_SLIDER_LABELS, MF_SORTABLE_LABELS, MF_SPLIT_BUTTON_LABELS, MF_STAT_TILE_LABELS, MF_STEPPER_LABELS, MF_TABLE_LABELS, MF_TABS_LABELS, MF_THEME_SWITCHER_LABELS, MF_TIME_PICKER_LABELS, MF_TOAST_LABELS, MF_TOUR_LABELS, MF_TRANSFER_LIST_LABELS, MF_TREE_SELECT_LABELS, SlidingIndicator, ValueAccessorBase, cn, containerSurface, controlSize, controlSurface, disabledRecipe, errorRecipe, exitDurationMs, focusRecipe, glassSurface, inlineStartRatio, isRtl, mergeLabels, mfLabelsEn, nextId, overlayPositions, overlaySurface, parseCssDuration, pointerPositions, prefersReducedMotion, pressRecipe, provideMesgflowUi, scrollFromInlineStart, transitionRecipe };
766
+ export type { DeepPartial, MfAgendaLabels, MfAlertLabels, MfAuthCardLabels, MfAvatarGroupLabels, MfBoxInputLabels, MfBreadcrumbLabels, MfCarouselLabels, MfCharacterCountLabels, MfChartLabels, MfChipLabels, MfColorPickerLabels, MfComboboxLabels, MfCommandLabels, MfCommonLabels, MfControlSize, MfCopyLabels, MfCountdownLabels, MfDatePickerLabels, MfDialogLabels, MfDropzoneLabels, MfFileUploadLabels, MfInlineEditLabels, MfInviteMembersLabels, MfLabels, MfLightboxLabels, MfMentionLabels, MfNotificationCenterLabels, MfOtpInputLabels, MfPaginationLabels, MfPanelGroupLabels, MfPasswordInputLabels, MfPlacement, MfProgressLabels, MfQrCodeLabels, MfRatingLabels, MfSearchInputLabels, MfSelectLabels, MfSidebarLabels, MfSize, MfSliderLabels, MfSortableLabels, MfSplitButtonLabels, MfStatTileLabels, MfStepperLabels, MfTableFilterLabels, MfTableFilterOperatorLabels, MfTableLabels, MfTablePaginationLabels, MfTabsLabels, MfThemeSwitcherLabels, MfTimePickerLabels, MfToastLabels, MfTone, MfTourLabels, MfTransferListLabels, MfTreeSelectLabels, ProvideMesgflowUiOptions, SlidingIndicatorAxis };
@@ -1,8 +1,10 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef } from '@angular/core';
2
+ import { Signal, ComponentRef, TemplateRef } from '@angular/core';
3
3
  import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
4
4
  import * as i1 from '@angular/cdk/drag-drop';
5
5
  import { DialogRef } from '@angular/cdk/dialog';
6
+ import { OverlayRef } from '@angular/cdk/overlay';
7
+ import { Observable } from 'rxjs';
6
8
  import { ComponentType } from '@angular/cdk/portal';
7
9
  import * as class_variance_authority_types from 'class-variance-authority/types';
8
10
  import { VariantProps } from 'class-variance-authority';
@@ -160,9 +162,20 @@ declare class Dialog {
160
162
  * kuralının uygulama noktası: dialog gövdesi + içerik aynı anda kaymaz.
161
163
  */
162
164
  readonly fillBody: _angular_core.InputSignal<boolean>;
165
+ /**
166
+ * `true` (varsayılan): kapat (X) düğmesi `close` olayını yayınladıktan SONRA
167
+ * dialog'u kendisi de kapatır (`MfDialogRef.close()` — idempotent, tüketicinin
168
+ * `(close)` handler'ında sonuçla yaptığı kapanış önce davranır ve kazanır).
169
+ * `false`: yalnızca `close` yayınlanır — kapanışı tamamen tüketici yönetir.
170
+ */
171
+ readonly autoClose: _angular_core.InputSignalWithTransform<boolean, unknown>;
163
172
  readonly close: _angular_core.OutputEmitterRef<void>;
164
173
  protected readonly surface: DialogSurface;
165
174
  protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfDialogLabels>;
175
+ /** Görünür başlığın id'si — CDK konteynerinin `aria-labelledby`'ı buna bağlanır. */
176
+ protected readonly titleId: string;
177
+ private readonly mfRef;
178
+ private readonly cdkRef;
166
179
  private readonly elementRef;
167
180
  private readonly cdkDrag;
168
181
  private readonly scrollBody;
@@ -184,6 +197,8 @@ declare class Dialog {
184
197
  protected readonly headerBorder: _angular_core.Signal<boolean>;
185
198
  protected readonly footerBorder: _angular_core.Signal<boolean>;
186
199
  constructor();
200
+ /** Kapat (X): önce `close` olayı (tüketici sonuçla kapatabilsin), sonra — `autoClose` ise — ref'in kendisi. */
201
+ protected onDismiss(): void;
187
202
  protected updateScrollShadow(): void;
188
203
  /**
189
204
  * Ctrl/Cmd+Enter — tek yerde çözülür, her form bedava kazanır. Kaydet düğmesi
@@ -194,9 +209,72 @@ declare class Dialog {
194
209
  */
195
210
  protected requestSubmit(): void;
196
211
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Dialog, never>;
197
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Dialog, "mf-dialog", ["mfDialog"], { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fillBody": { "alias": "fillBody"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["[dialog-header]", "*", "[dialog-footer]"], true, [{ directive: typeof i1.CdkDrag; inputs: {}; outputs: {}; }]>;
212
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Dialog, "mf-dialog", ["mfDialog"], { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fillBody": { "alias": "fillBody"; "required": false; "isSignal": true; }; "autoClose": { "alias": "autoClose"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["[dialog-header]", "*", "[dialog-footer]"], true, [{ directive: typeof i1.CdkDrag; inputs: {}; outputs: {}; }]>;
198
213
  }
199
214
 
215
+ /** `open` → (`close()` çağrıldı, çıkış animasyonu oynuyor) `closing` → (dispose edildi) `closed`. */
216
+ type DialogState = 'open' | 'closing' | 'closed';
217
+ /**
218
+ * `DialogService.open()`/`openDrawer()`'ın döndürdüğü, kite ait dialog referansı.
219
+ *
220
+ * CDK `DialogRef`'in günlük kullanılan yüzeyini (`close`, `closed`,
221
+ * `componentInstance`, `disableClose`, `backdropClick`, `keydownEvents` …)
222
+ * birebir DELEGE eder — yani eski `ref.closed.subscribe(...)` kodu aynen derlenir.
223
+ * Üstüne kitin kendi dünyasını ekler:
224
+ *
225
+ * - `afterClosed()` — `await` edilebilir sonuç (çıkış animasyonu BİTTİKTEN sonra çözülür).
226
+ * - `state` — `'open' | 'closing' | 'closed'` signal'i (şablonda/`computed`'ta okunur).
227
+ * - `surface` — boyut/maximize/kirli-form durumuna tipli erişim (`setSize`, `toggleMaximize`,
228
+ * `registerDirty`, `markClean` kısayolları).
229
+ * - `cdk` — ham CDK referansı (kaçış kapısı; ör. `updatePosition()`).
230
+ *
231
+ * `close()` İDEMPOTENT'tir: çıkış animasyonu sürerken ya da kirli-form onayı
232
+ * açıkken gelen ek çağrılar yok sayılır (bkz. `dialog.service.ts` `closePredicate`).
233
+ *
234
+ * İçerik component'i içinde `injectDialogRef<Sonuç>()` ile alınır.
235
+ */
236
+ declare class MfDialogRef<R = unknown, C = unknown> {
237
+ readonly cdk: DialogRef<R, C>;
238
+ readonly surface: DialogSurface;
239
+ readonly closed: Observable<R | undefined>;
240
+ readonly backdropClick: Observable<MouseEvent>;
241
+ readonly keydownEvents: Observable<KeyboardEvent>;
242
+ readonly outsidePointerEvents: Observable<MouseEvent>;
243
+ readonly overlayRef: OverlayRef;
244
+ readonly id: string;
245
+ private readonly isClosed;
246
+ private readonly result;
247
+ /** Dialog'un yaşam döngüsü — `closing` çıkış animasyonu boyunca. */
248
+ readonly state: Signal<DialogState>;
249
+ constructor(cdk: DialogRef<R, C>, surface: DialogSurface);
250
+ /** Açılan component örneği (şablonla açıldıysa ve kapandıktan sonra `null`). */
251
+ get componentInstance(): C | null;
252
+ get componentRef(): ComponentRef<C> | null;
253
+ /** `true` iken ESC/backdrop kapatmaz; programatik `close()` yine çalışır. */
254
+ get disableClose(): boolean | undefined;
255
+ set disableClose(value: boolean | undefined);
256
+ /** Dialog'u (çıkış animasyonu + kirli-form koruması üzerinden) kapatır. İdempotent. */
257
+ close(result?: R): void;
258
+ /** Kapanış tamamlandığında (animasyon dahil) sonuçla çözülür; ESC/backdrop'ta `undefined`. */
259
+ afterClosed(): Promise<R | undefined>;
260
+ /** Açıkken genişlik basamağını değiştirir (`sm`…`xl`, `full`). */
261
+ setSize(size: DialogSize): void;
262
+ toggleMaximize(): void;
263
+ /** Kirli-form sorusunu kaydeder — ESC/backdrop/X kapanışında `true` dönerse onay sorulur. */
264
+ registerDirty(check: () => boolean): void;
265
+ /** Başarılı kayıttan hemen önce — sonraki `close()` kirli-form onayı sormaz. */
266
+ markClean(): void;
267
+ }
268
+ /**
269
+ * `DIALOG_DATA`'nın kite ait adı — AYNI token nesnesi, CDK'dan ayrıca import
270
+ * etmeye gerek kalmasın diye. `inject(MF_DIALOG_DATA)` ≡ `injectDialogData()`.
271
+ */
272
+ declare const MF_DIALOG_DATA: _angular_core.InjectionToken<any>;
273
+ /** İçerik component'inde `DialogService.open(..., { data })` ile geçilen veriyi okur. */
274
+ declare function injectDialogData<D>(): D;
275
+ /** İçerik component'inde kendi dialog referansını alır — `ref.close(sonuç)`. */
276
+ declare function injectDialogRef<R = unknown, C = unknown>(): MfDialogRef<R, C>;
277
+
200
278
  /**
201
279
  * `<button mfDialogResizeHandle [ariaLabel]="...">` — `Dialog`'un (dialog.ts)
202
280
  * sağ-alt köşesinde, `DialogSurface.customSize`'ı besleyen serbest boyutlandırma
@@ -231,9 +309,10 @@ declare class DialogResizeHandle {
231
309
  * engelleme davranışının TAMAMI CDK'dan geliyor, burada TEKRAR YAZILMADI — bkz.
232
310
  * projects/ui-kit/README.md "a11y checklist" bölümündeki "elle yazmak son çare" ilkesi).
233
311
  *
234
- * İçerik component'i (tüketicinin kendi form component'i, ör. `ConfirmDialog`) `@angular/cdk/dialog`'un
235
- * KENDİ `DIALOG_DATA`/`DialogRef` token'larını doğrudan `inject()` eder — ekstra bir
236
- * sarmalayıcı token'a gerek yok. Boyut/placement/maximize/drag/resize/sheet durumu
312
+ * `open()` kite ait `MfDialogRef` döndürür (CDK `DialogRef` yüzeyini delege eder +
313
+ * `afterClosed()`/`state`/`surface`). İçerik component'i `injectDialogRef()`/
314
+ * `injectDialogData()` (bkz. dialog-ref.ts) kullanır — CDK'nın kendi `DialogRef`/
315
+ * `DIALOG_DATA` token'larını inject etmek de çalışmaya devam eder. Boyut/placement/maximize/drag/resize/sheet durumu
237
316
  * `DialogSurface` (bkz. o dosya) üzerinden, `providers` ile o dialog'un injector'ına
238
317
  * verilir — `Dialog` (dialog.ts) bunu DI'dan okuyarak render eder.
239
318
  *
@@ -250,7 +329,9 @@ declare class DialogResizeHandle {
250
329
  * kendi reaktif `animate-dialog-out`/`animate-sheet-out`/`animate-drawer-out` class'ıyla
251
330
  * görsel olarak kapanır), ikinci çağrıda (zaten `closing()===true`) gerçek `dispose()`'a
252
331
  * izin veriyoruz. ESC/backdrop/programatik `dialogRef.close(...)` HEPSİ bu predicate'ten
253
- * geçtiği için davranış tekdüze. `prefers-reduced-motion` gecikmeyi tamamen atlıyor —
332
+ * geçtiği için davranış tekdüze. Animasyon sürerken gelen EK `close()` çağrıları
333
+ * yok sayılır (`disposeArmed` yalnızca zamanlayıcı tarafından kurulur) — X düğmesi +
334
+ * tüketicinin `(close)` handler'ı aynı anda kapatsa bile animasyon kesilmez. `prefers-reduced-motion` gecikmeyi tamamen atlıyor —
254
335
  * AMA kirli-form kontrolünden SONRA: koruma reduced-motion kullanıcılarında da çalışmalı.
255
336
  *
256
337
  * **Kirli form koruması**: `surface.isDirty()` `true` dönerse kapanış iptal edilip
@@ -271,7 +352,7 @@ declare class DialogService {
271
352
  * Bir component'i ya da bir `TemplateRef'i açar (şablon yolu `<mf-drawer>` gibi
272
353
  * bildirimsel sarmalayıcılar içindir — şablonun injector'ı da `DialogSurface'i görür).
273
354
  */
274
- open<R = void, D = undefined, C = unknown>(component: ComponentType<C> | TemplateRef<C>, options?: DialogOptions<D>): DialogRef<R, C>;
355
+ open<R = void, D = undefined, C = unknown>(component: ComponentType<C> | TemplateRef<C>, options?: DialogOptions<D>): MfDialogRef<R, C>;
275
356
  /**
276
357
  * Kayıt oluştur/düzenle formlarının TEK açılış noktası — sağdan drawer.
277
358
  * `maximizable` bilerek zorla kapatılıyor: drawer zaten tam yükseklik, büyütme
@@ -283,7 +364,7 @@ declare class DialogService {
283
364
  */
284
365
  openDrawer<R = void, D = undefined, C = unknown>(component: ComponentType<C>, options?: Omit<DialogOptions<D>, 'placement'> & {
285
366
  placement?: Exclude<DialogPlacement, 'center'>;
286
- }): DialogRef<R, C>;
367
+ }): MfDialogRef<R, C>;
287
368
  /** `Promise<boolean>` döner — `if (await dialog.confirm(...))` çağıran taraf için `.subscribe()` zincirinden daha sade. */
288
369
  confirm(data: ConfirmDialogData): Promise<boolean>;
289
370
  /**
@@ -298,8 +379,12 @@ declare class DialogService {
298
379
  * kaldırıldı).
299
380
  */
300
381
  confirmDiscard(): Promise<boolean>;
301
- /** 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. */
302
- getSurface(ref: DialogRef<any, any>): DialogSurface | undefined;
382
+ /**
383
+ * Tüketici bir ref'i kapatmadan ÖNCE kirli mi diye sormak istiyorsa — kendi `closePredicate`'inin
384
+ * async akışıyla yarışmamak için `DialogSurface`'e doğrudan erişim. `MfDialogRef` için
385
+ * `ref.surface` tercih edilir; ham CDK ref'i (ör. içerikte inject edilen) de kabul edilir.
386
+ */
387
+ getSurface(ref: DialogRef<any, any> | MfDialogRef<any, any>): DialogSurface | undefined;
303
388
  /** `confirm()`'in silme kısayolu — `tone:'danger'` + varsayılan "Sil" etiketi. */
304
389
  confirmDelete(data: Omit<ConfirmDialogData, 'tone'>): Promise<boolean>;
305
390
  /** Tek butonlu bilgilendirme modu — sonuç önemsiz olduğu için `Promise<void>` döner. */
@@ -361,5 +446,5 @@ declare const dialogVariants: (props?: ({
361
446
  } & class_variance_authority_types.ClassProp) | undefined) => string;
362
447
  type DialogVariants = VariantProps<typeof dialogVariants>;
363
448
 
364
- export { ConfirmDialog, Dialog, DialogResizeHandle, DialogService, DialogSurface, dialogVariants };
365
- export type { ConfirmDialogData, ConfirmTone, DialogCustomSize, DialogOptions, DialogPlacement, DialogSize, DialogVariants, DrawerSide };
449
+ export { ConfirmDialog, Dialog, DialogResizeHandle, DialogService, DialogSurface, MF_DIALOG_DATA, MfDialogRef, dialogVariants, injectDialogData, injectDialogRef };
450
+ export type { ConfirmDialogData, ConfirmTone, DialogCustomSize, DialogOptions, DialogPlacement, DialogSize, DialogState, DialogVariants, DrawerSide };
@@ -12,6 +12,10 @@ import * as _angular_core from '@angular/core';
12
12
  * - `aria-required="true"` → `required` iken.
13
13
  * Hata metni `role="alert"` DEĞİL, `aria-live="polite"` — her tuş vuruşunda
14
14
  * ekran okuyucuyu kesmesin. `error` `string | undefined` kabul eder.
15
+ *
16
+ * Etiket satırında eylem: `[mfFieldLabelAction]` işaretli çocuk (ör. "Şifremi
17
+ * unuttum" bağlantısı) etiketin sağına, label'ın KARDEŞİ olarak projekte edilir —
18
+ * bkz. `FieldLabelAction`. Etiket boşsa da satır eylem için çizilir.
15
19
  */
16
20
  declare class Field {
17
21
  readonly label: _angular_core.InputSignal<string>;
@@ -21,6 +25,8 @@ declare class Field {
21
25
  readonly required: _angular_core.InputSignal<boolean>;
22
26
  /** `true` ise kalan yüksekliği doldurur (`flex-1 min-h-0`). */
23
27
  readonly grow: _angular_core.InputSignal<boolean>;
28
+ private readonly labelAction;
29
+ protected readonly hasLabelRow: _angular_core.Signal<boolean>;
24
30
  private readonly host;
25
31
  private readonly baseId;
26
32
  protected readonly hintId: string;
@@ -29,7 +35,23 @@ declare class Field {
29
35
  protected readonly describedId: _angular_core.Signal<string | null>;
30
36
  constructor();
31
37
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Field, never>;
32
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<Field, "mf-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
38
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<Field, "mf-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "for": { "alias": "for"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "grow": { "alias": "grow"; "required": false; "isSignal": true; }; }, {}, ["labelAction"], ["[mfFieldLabelAction]", "*"], true, never>;
39
+ }
40
+
41
+ /**
42
+ * `<a mfLink mfFieldLabelAction routerLink="/forgot-password">Şifremi unuttum</a>` —
43
+ * `mf-field` içine konan öğeyi etiket satırının SAĞINA taşır (yaygın "etiket + eylem"
44
+ * kalıbı: parola alanının yanında "Şifremi unuttum").
45
+ *
46
+ * Öğe `<label>`'ın İÇİNE değil, KARDEŞİNE projekte edilir — label içindeki bir bağlantı
47
+ * tıklamayı alana yönlendirir ve ekran okuyucuda etiket adına karışırdı. DOM sırası =
48
+ * görsel sıra (etiket → eylem → alan), sekme sırası da buna uyar.
49
+ *
50
+ * `ms-auto`: etiket yoksa ya da dar ekranda alt satıra sarıldığında da sağda kalır.
51
+ */
52
+ declare class FieldLabelAction {
53
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldLabelAction, never>;
54
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FieldLabelAction, "[mfFieldLabelAction]", never, {}, {}, never, never, true, never>;
33
55
  }
34
56
 
35
- export { Field };
57
+ export { Field, FieldLabelAction };
@@ -164,6 +164,8 @@ declare class InputSuffix {
164
164
  * textarea `rows` arttıkça bu tabanın üstüne doğal büyüyor. `min-h-(--control-h-*)`
165
165
  * — Tailwind v4'ün parantezli kısayolu, `--control-h-*` token'ına (radius.css)
166
166
  * doğrudan referans, ayrı bir `min-h-control-*` utility'si tanımlamaya gerek yok.
167
+ * `py-*` + satır yüksekliği + kenarlık token'ı AŞMAMALI — aşarsa `min-h` etkisiz kalır ve
168
+ * alan `mf-input-group`/`mfButton`'dan uzun çıkar (lg eskiden `py-2` + `text-base` = 42px ≠ 40px).
167
169
  *
168
170
  * `hasError` (invalid DEĞİL): `@angular/forms/signals`'ın `[formField]`
169
171
  * directive'i, AYNI native elemandaki başka bir directive'in `invalid`/
@@ -1,7 +1,17 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { ControlValueAccessor } from '@angular/forms';
3
- import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
3
+ import { ValueAccessorBase, MfSize } from '@mesgflow/ui-kit/core';
4
4
 
5
+ /**
6
+ * Parola alanının `autocomplete` ipucu — parola yöneticileri/tarayıcı bunu okur:
7
+ * - `current-password` (varsayılan): giriş formu — kayıtlı parolayı doldurur.
8
+ * - `new-password`: kayıt/parola değiştirme — güçlü parola ÖNERİR, eskisini doldurmaz
9
+ * (hem "yeni" hem "tekrar" alanında kullanılır).
10
+ * - `off`: modern tarayıcılar parola alanlarında çoğunlukla YOK SAYAR — sadece
11
+ * gerçekten tek kullanımlık alanlarda (ör. API anahtarı onayı) kullanın.
12
+ * - Diğer geçerli token dizileri de kabul edilir (ör. `section-billing current-password`).
13
+ */
14
+ type PasswordAutocomplete = 'current-password' | 'new-password' | 'off' | (string & {});
5
15
  /**
6
16
  * `<mf-password-input [(value)]="password" />` — `InputGroup` üstüne kompoze
7
17
  * edilmiş, sağda göster/gizle düğmesi taşıyan parola alanı (emsal:
@@ -9,27 +19,54 @@ import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
9
19
  * kullanma deseni). `type="password"`/`"text"` arasında geçiş SADECE
10
20
  * görünürlük içindir — değer her zaman `value` model'inde düz metin olarak
11
21
  * tutulur.
22
+ *
23
+ * Parola yöneticisi uyumu: `autocomplete` (varsayılan `current-password`) ve
24
+ * `name` iç `<input>`'a iletilir; `autocapitalize="off"`/`spellcheck="false"`
25
+ * sabit — parola görünür moda (`type="text"`) geçtiğinde de mobil klavye büyük
26
+ * harfe çevirmez, yazım denetimi parolayı bir sözlük servisine göndermez.
27
+ * Signal Forms `[formField]` bağlandığında `name`/`required`/`readonly`/`disabled`
28
+ * alan durumundan OTOMATİK doldurulur.
29
+ *
30
+ * `size`: `input[mfInput]`/`mf-input-group` ile AYNI yükseklik/dolgu/font token'ları —
31
+ * aynı boydaki düz bir `mfInput` ile yan yana hizalı durur; göster/gizle ikonu boyla büyür.
32
+ *
33
+ * Önek: `[mfInputPrefix]` işaretli çocuk (ör. `<span mfIcon mfInputPrefix>lock</span>`)
34
+ * alanın soluna, `mf-input-group`'un önek yuvasına projekte edilir — metin başlangıcı
35
+ * önekli bir `mf-input-group` ile aynı. Önek dekoratif kabul edilir (`aria-hidden`).
12
36
  */
13
37
  declare class PasswordInput extends ValueAccessorBase<string> implements ControlValueAccessor {
14
38
  readonly value: _angular_core.ModelSignal<string>;
39
+ readonly size: _angular_core.InputSignal<MfSize>;
15
40
  readonly placeholder: _angular_core.InputSignal<string>;
16
- readonly disabled: _angular_core.InputSignal<boolean>;
17
- readonly hasError: _angular_core.InputSignal<boolean>;
41
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
42
+ readonly hasError: _angular_core.InputSignalWithTransform<boolean, unknown>;
18
43
  /** İç `<input>`'un id'si — harici bir `<label for>` / `mf-field for` ile ilişkilendirmek için. */
19
44
  readonly inputId: _angular_core.InputSignal<string | undefined>;
20
45
  readonly ariaLabel: _angular_core.InputSignal<string>;
21
- readonly fullWidth: _angular_core.InputSignal<boolean>;
46
+ readonly fullWidth: _angular_core.InputSignalWithTransform<boolean, unknown>;
22
47
  readonly showLabel: _angular_core.InputSignal<string | undefined>;
23
48
  readonly hideLabel: _angular_core.InputSignal<string | undefined>;
49
+ /** Parola yöneticisi ipucu — bkz. `PasswordAutocomplete`. */
50
+ readonly autocomplete: _angular_core.InputSignal<PasswordAutocomplete>;
51
+ /** İç `<input>`'un `name`'i — form gönderimi ve parola yöneticilerinin alanı tanıması için. */
52
+ readonly name: _angular_core.InputSignal<string | undefined>;
53
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
54
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
24
55
  private readonly passwordLabels;
25
56
  protected readonly effectiveShowLabel: _angular_core.Signal<string>;
26
57
  protected readonly effectiveHideLabel: _angular_core.Signal<string>;
58
+ /** Reactive Forms `control.disable()` — `disabled` girdisiyle VEYA'lanır. */
59
+ private readonly formDisabled;
60
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
27
61
  protected readonly visible: _angular_core.WritableSignal<boolean>;
28
- writeValue(value: string): void;
62
+ protected readonly toggleIconSize: _angular_core.Signal<number>;
63
+ writeValue(value: string | null): void;
64
+ setDisabledState(disabled: boolean): void;
29
65
  protected toggle(): void;
30
66
  protected onInput(raw: string): void;
31
67
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasswordInput, never>;
32
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordInput, "mf-password-input", ["mfPasswordInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "hideLabel": { "alias": "hideLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
68
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordInput, "mf-password-input", ["mfPasswordInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "hideLabel": { "alias": "hideLabel"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["[mfInputPrefix]"], true, never>;
33
69
  }
34
70
 
35
71
  export { PasswordInput };
72
+ export type { PasswordAutocomplete };
@@ -0,0 +1,160 @@
1
+ import * as _mesgflow_ui_kit_qr_code from '@mesgflow/ui-kit/qr-code';
2
+ import * as _angular_core from '@angular/core';
3
+
4
+ /** Hata düzeltme seviyesi — kurtarılabilir hasar oranı: L ~%7, M ~%15, Q ~%25, H ~%30. */
5
+ type QrEcc = 'L' | 'M' | 'Q' | 'H';
6
+ interface QrEncodeOptions {
7
+ /** Varsayılan `'M'`. */
8
+ ecc?: QrEcc;
9
+ /** 1–40, varsayılan 1. */
10
+ minVersion?: number;
11
+ /** 1–40, varsayılan 40. */
12
+ maxVersion?: number;
13
+ /**
14
+ * Seçilen sürüm (boyut) büyümeden daha yüksek bir hata düzeltme seviyesi sığıyorsa
15
+ * onu kullanır — aynı boyutta bedava dayanıklılık. Varsayılan `true`.
16
+ */
17
+ boostEcc?: boolean;
18
+ }
19
+ interface QrMatrix {
20
+ /** Modül cinsinden kenar (21–177) — sessiz bölge (quiet zone) HARİÇ. */
21
+ readonly size: number;
22
+ /** 1–40. */
23
+ readonly version: number;
24
+ /** Gerçekte kullanılan seviye (`boostEcc` ile istenenden yüksek olabilir). */
25
+ readonly ecc: QrEcc;
26
+ readonly mask: number;
27
+ /** `modules[y][x]` — `true` koyu modül. */
28
+ readonly modules: readonly (readonly boolean[])[];
29
+ /** `isFunction[y][x]` — finder/timing/alignment/format/version modülü (veri değil). */
30
+ readonly isFunction: readonly (readonly boolean[])[];
31
+ }
32
+ /** İçerik, `maxVersion` ve seçilen `ecc` ile sığmıyor. */
33
+ declare class QrCapacityError extends Error {
34
+ constructor();
35
+ }
36
+ /**
37
+ * Metni (UTF-8; tamamen rakamsa numeric, büyük harf/rakam/` $%*+-./:` ise
38
+ * alphanumeric kip) ya da ham baytları bir QR matrisine kodlar. En küçük uygun
39
+ * sürümü ve en düşük cezalı maskeyi seçer.
40
+ *
41
+ * @throws {QrCapacityError} içerik sığmıyorsa.
42
+ */
43
+ declare function encodeQr(data: string | Uint8Array, options?: QrEncodeOptions): QrMatrix;
44
+
45
+ /** Veri modüllerinin çizim biçimi. */
46
+ type QrModuleShape = 'square' | 'rounded' | 'dots';
47
+ /** Üç köşedeki konum (finder) desenlerinin biçimi. */
48
+ type QrFinderShape = 'square' | 'rounded';
49
+ interface QrGeometry {
50
+ /** Modül cinsinden QR kenarı (sessiz bölge hariç). */
51
+ readonly size: number;
52
+ /** Veri + timing + alignment modülleri — tek `<path>` (tek path = komşu modüller arasında AA dikişi yok). */
53
+ readonly dataPath: string;
54
+ /** Finder dış halkaları (`fill-rule="evenodd"`). */
55
+ readonly finderOuterPath: string;
56
+ /** Finder iç 3×3 gözleri. */
57
+ readonly finderInnerPath: string;
58
+ /** Logo için boşaltılan kare (modül); logo yoksa 0. */
59
+ readonly excavated: number;
60
+ }
61
+ /**
62
+ * Logo için merkezde boşaltılacak kare kenarı (modül). QR kenarıyla aynı
63
+ * paritede (tek) tutulur ki kare tam ortalansın; oran 0–0.3 arası kırpılır
64
+ * (H seviyesi ~%30 hasarı kurtarır — alan olarak 0.3² ≈ %9, güvenli pay).
65
+ */
66
+ declare function excavationSize(size: number, ratio: number): number;
67
+ /** Kodlanmış matrisi saf SVG yol dizelerine çevirir — DOM'suz, `computed()` içinde çağrılır. */
68
+ declare function qrGeometry(matrix: QrMatrix, shape: QrModuleShape, finder: QrFinderShape, logoRatio: number): QrGeometry;
69
+ interface QrSvgStringOptions {
70
+ /** Sessiz bölge (modül), varsayılan 4 — baskı/dışa aktarım için standart. */
71
+ margin?: number;
72
+ /** Piksel kenar, varsayılan 256. */
73
+ pixelSize?: number;
74
+ foreground?: string;
75
+ background?: string;
76
+ }
77
+ /** Bağımsız bir `<svg>` belgesi (indirme/paylaşım için) — logo katmanı HTML olduğu için dahil DEĞİL. */
78
+ declare function qrSvgString(geometry: QrGeometry, options?: QrSvgStringOptions): string;
79
+
80
+ /**
81
+ * `<mf-qr-code data="…"><img mfQrCodeLogo src="logo.svg" alt="" /></mf-qr-code>` —
82
+ * QR'ın ortasına yerleştirilen logo. Varlığı hata düzeltmeyi otomatik `H`'ye
83
+ * yükseltir ve altındaki modülleri boşaltır. Dekoratif olduğu için `alt=""`
84
+ * önerilir — erişilebilir ad `mf-qr-code`'un kendi `aria-label`'ındadır.
85
+ */
86
+ declare class QrCodeLogo {
87
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QrCodeLogo, never>;
88
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<QrCodeLogo, "[mfQrCodeLogo]", never, {}, {}, never, never, true, never>;
89
+ }
90
+ /**
91
+ * `<mf-qr-code data="https://mesgflow.dev" />`
92
+ *
93
+ * Saf SVG QR kod — kodlayıcı kitin içinde (`qr-encoder.ts`, Nayuki portu), ek
94
+ * bağımlılık yok; tüm geometri `computed()` ile üretilir, DOM API'si
95
+ * kullanılmaz (SSR güvenli).
96
+ *
97
+ * - `shape`: `square` (klasik) · `rounded` (akışkan, komşu modüllerle birleşen) · `dots`.
98
+ * - `finder`: köşe desenleri `square` / `rounded`.
99
+ * - `ecc`: L/M/Q/H — logo varsa otomatik `H`. Aynı boyutta daha yüksek seviye
100
+ * sığıyorsa zaten yükseltilir (`boostEcc`).
101
+ * - `margin`: sessiz bölge (modül). Okuyucular ≥ 2 ister; baskı için 4.
102
+ * - Logo: `[mfQrCodeLogo]` içerik (bkz. `QrCodeLogo`).
103
+ * - `toSvgString()`: indirme/paylaşım için bağımsız SVG.
104
+ *
105
+ * Renk: varsayılan beyaz kart üstünde siyah modül — BİLİNÇLİ ham renk istisnası:
106
+ * kameralar koyu-üstünde-açık (ters) QR'ı güvenilir okuyamaz, bu yüzden koyu temada
107
+ * da açık kart kalır. `foreground`/`background` (herhangi bir CSS rengi, `var(--…)`
108
+ * dahil) ile değiştirilir — satır içi stil olduğu için sınıf sırası çakışması yok;
109
+ * modüller `currentColor`, logo kutusu zemini miras alır. Koyu modül / açık zemin ve
110
+ * yeterli kontrast (≥ ~4:1) korunmalı.
111
+ *
112
+ * İçerik sığmazsa hata fırlatmaz: yerinde erişilebilir bir hata durumu çizer ve
113
+ * `encoded` çıkışı `null` yayar.
114
+ */
115
+ declare class QrCode {
116
+ /** Kodlanacak içerik (URL, metin, `WIFI:…`, `mailto:` vb.). */
117
+ readonly data: _angular_core.InputSignal<string>;
118
+ /** Piksel kenar (sessiz bölge dahil). */
119
+ readonly size: _angular_core.InputSignalWithTransform<number, unknown>;
120
+ readonly ecc: _angular_core.InputSignal<QrEcc>;
121
+ /** Sessiz bölge, modül cinsinden. */
122
+ readonly margin: _angular_core.InputSignalWithTransform<number, unknown>;
123
+ readonly shape: _angular_core.InputSignal<QrModuleShape>;
124
+ readonly finder: _angular_core.InputSignal<QrFinderShape>;
125
+ /** Logo karesinin QR kenarına oranı (0–0.3); yalnızca `[mfQrCodeLogo]` varken etkili. */
126
+ readonly logoSize: _angular_core.InputSignalWithTransform<number, unknown>;
127
+ /** Modül rengi (CSS rengi). Verilmezse siyah. */
128
+ readonly foreground: _angular_core.InputSignal<string | undefined>;
129
+ /** Zemin rengi (CSS rengi). Verilmezse beyaz. */
130
+ readonly background: _angular_core.InputSignal<string | undefined>;
131
+ /** `role="img"` erişilebilir adı — verilmezse `MF_QR_CODE_LABELS.ariaLabel`. İçeriği anlatan bir ad önerilir. */
132
+ readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
133
+ /** Her yeniden kodlamada matris (hata durumunda `null`). */
134
+ readonly encoded: _angular_core.OutputEmitterRef<QrMatrix | null>;
135
+ private readonly labels;
136
+ private readonly logo;
137
+ protected readonly hasLogo: _angular_core.Signal<boolean>;
138
+ protected readonly effectiveEcc: _angular_core.Signal<QrEcc>;
139
+ protected readonly matrix: _angular_core.Signal<QrMatrix | null>;
140
+ protected readonly geometry: _angular_core.Signal<_mesgflow_ui_kit_qr_code.QrGeometry | null>;
141
+ protected readonly quietZone: _angular_core.Signal<number>;
142
+ protected readonly viewBox: _angular_core.Signal<string>;
143
+ /** Logo kutusunun piksel kenarı — boşaltılan karenin ekrandaki karşılığı. */
144
+ protected readonly logoBoxPx: _angular_core.Signal<number>;
145
+ protected readonly crisp: _angular_core.Signal<boolean>;
146
+ protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
147
+ protected readonly hostClasses: _angular_core.Signal<string>;
148
+ constructor();
149
+ /**
150
+ * Bağımsız SVG belgesi — logo katmanı dahil DEĞİL. İçerik sığmıyorsa `null`.
151
+ * Renkler verilmezse `foreground`/`background` girdileri (onlar da yoksa siyah/beyaz);
152
+ * `var(--…)` gibi bağlama bağlı değerler dışa aktarımda çözülmez — somut renk geçin.
153
+ */
154
+ toSvgString(options?: QrSvgStringOptions): string | null;
155
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QrCode, never>;
156
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QrCode, "mf-qr-code", ["mfQrCode"], { "data": { "alias": "data"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ecc": { "alias": "ecc"; "required": false; "isSignal": true; }; "margin": { "alias": "margin"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "finder": { "alias": "finder"; "required": false; "isSignal": true; }; "logoSize": { "alias": "logoSize"; "required": false; "isSignal": true; }; "foreground": { "alias": "foreground"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "encoded": "encoded"; }, ["logo"], ["[mfQrCodeLogo]"], true, never>;
157
+ }
158
+
159
+ export { QrCapacityError, QrCode, QrCodeLogo, encodeQr, excavationSize, qrGeometry, qrSvgString };
160
+ export type { QrEcc, QrEncodeOptions, QrFinderShape, QrGeometry, QrMatrix, QrModuleShape, QrSvgStringOptions };
@@ -14,8 +14,16 @@ interface SegmentedOption<T> {
14
14
  * farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving
15
15
  * tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın
16
16
  * `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —
17
- * dokümantasyondaki kompozisyon şekli birebir izlendi (dıştaki `ngToolbar`,
18
- * içteki `ngToolbarWidgetGroup [multi]="false"`).
17
+ * dokümantasyondaki kompozisyon şekli izlendi (dıştaki `ngToolbar`, içteki
18
+ * `ngToolbarWidgetGroup`).
19
+ *
20
+ * SEÇİM toolbar'dan DEĞİL, bileşenin kendisinden: `@angular/aria` 22.2 toolbar'ın
21
+ * `value`/`valueChange`'ini ve grubun `multi`'sini KALDIRDI (toolbar artık yalnızca
22
+ * gezinme). Kit önceden derlendiği için tüketicide derleme hatası çıkmıyor, tıklama
23
+ * sessizce etkisiz kalıyordu (gerçek bulgu, 0.6–0.8). Artık tıklama + Enter/Space
24
+ * doğrudan `select()`'i çağırır — 22.1 ve 22.2'de aynı çalışır. Widget'ın `[value]`'su
25
+ * yalnızca 22.1'in zorunlu girdisi için duruyor (22.2'de düğmenin DOM `value`'suna düşer).
26
+ * Seçili durum `aria-pressed` ile duyurulur (toolbar hiçbir sürümde vermiyor).
19
27
  *
20
28
  * Seçili parça core'un `[mfSlidingIndicator]`'ıyla (Tabs ile aynı motor) yay
21
29
  * eğrisiyle kayar; aria/toolbar seçili öznitelik vermediği için hedef
@@ -27,19 +35,19 @@ declare class SegmentedControl<T> extends ValueAccessorBase<T | null> implements
27
35
  readonly size: _angular_core.InputSignal<"sm" | "md" | null | undefined>;
28
36
  readonly ariaLabel: _angular_core.InputSignal<string>;
29
37
  readonly disabled: _angular_core.InputSignal<boolean>;
30
- protected readonly toolbarValue: _angular_core.Signal<T[]>;
31
38
  protected readonly trackClasses: _angular_core.Signal<string>;
32
39
  writeValue(value: T | null): void;
33
40
  /**
34
- * `@angular/aria/toolbar`'ın kendi widget-kayıt döngüsü, gerçek bir tıklama
35
- * OLMADAN da BOŞ bir dizi ile (`values: []`) tetiklenebiliyor (gerçek bulgu
36
- * — bir seçeneğe tıklarken bile araya giren, seçimle ilgisiz iç kayıt
37
- * event'leri). `this.value` her event'te güncellenir (görsel durum ETKİLENMEZ,
38
- * zaten `values[0]` genelde mevcut değerle AYNI), ama CVA `onChange`/`onTouched`
39
- * SADECE dolu bir dizi (gerçek bir seçim) geldiğinde tetiklenir — aksi halde
40
- * Reactive Forms'a sahte "null'a değişti" bildirimleri sızardı.
41
+ * Seçili seçeneğe tekrar basmak seçimi KALDIRMAZ (segmented control'de her zaman bir
42
+ * seçim durur) ve değişiklik bildirmez; CVA `onChange` yalnızca gerçek bir değişimde.
43
+ */
44
+ protected select(value: T): void;
45
+ /**
46
+ * Enter/Space: 22.1'in toolbar'ı bu tuşları kendisi yakalayıp `preventDefault` ettiği
47
+ * için düğmenin yerel `click`'i gelmiyordu; 22.2'de geliyor. Burada seçip varsayılanı
48
+ * engellemek iki sürümde de TEK seçim üretir.
41
49
  */
42
- protected onToolbarValueChange(values: readonly T[]): void;
50
+ protected onActivateKey(event: Event, value: T): void;
43
51
  protected itemClasses(option: SegmentedOption<T>): string;
44
52
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentedControl<any>, never>;
45
53
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SegmentedControl<any>, "mf-segmented-control", ["mfSegmentedControl"], { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
@@ -54,6 +54,7 @@ export * from '@mesgflow/ui-kit/pagination';
54
54
  export * from '@mesgflow/ui-kit/password-input';
55
55
  export * from '@mesgflow/ui-kit/popover';
56
56
  export * from '@mesgflow/ui-kit/progress';
57
+ export * from '@mesgflow/ui-kit/qr-code';
57
58
  export * from '@mesgflow/ui-kit/radio';
58
59
  export * from '@mesgflow/ui-kit/rating';
59
60
  export * from '@mesgflow/ui-kit/scroll-area';