@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,31 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { BreadcrumbItem } from '@mesgflow/ui-kit/breadcrumb';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* `<mf-page-header title="Ekip" [breadcrumbItems]="[...]">
|
|
6
|
+
* <div mfPageHeaderActions><button mfButton>Davet et</button></div>
|
|
7
|
+
* </mf-page-header>`
|
|
8
|
+
*
|
|
9
|
+
* `breadcrumbItems` boşsa (varsayılan) `mf-breadcrumb` HİÇ render EDİLMEZ —
|
|
10
|
+
* tek seviyeli sayfalarda (ör. "Ayarlar") gereksiz bir tek-öğeli iz
|
|
11
|
+
* gösterilmesin diye.
|
|
12
|
+
*
|
|
13
|
+
* Yerleşim KAPSAYICI sorgusuyla (`@container`) — viewport'a değil başlığın
|
|
14
|
+
* kendi genişliğine bakar: 32rem'den dar bir kapsayıcıda (kenar çubuğu açık
|
|
15
|
+
* tablet, bölünmüş panel) aksiyonlar başlığın ALTINA iner, başlığı ezmez.
|
|
16
|
+
*/
|
|
17
|
+
declare class PageHeader {
|
|
18
|
+
readonly title: i0.InputSignal<string>;
|
|
19
|
+
readonly description: i0.InputSignal<string>;
|
|
20
|
+
readonly breadcrumbItems: i0.InputSignal<BreadcrumbItem[]>;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PageHeader, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PageHeader, "mf-page-header", ["mfPageHeader"], { "title": { "alias": "title"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "breadcrumbItems": { "alias": "breadcrumbItems"; "required": false; "isSignal": true; }; }, {}, never, ["[mfPageHeaderActions]"], true, never>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** `<div mfPageHeaderActions><button mfButton>...</button></div>` — bkz. `page-header.ts`'in JSDoc'u. */
|
|
26
|
+
declare class PageHeaderActions {
|
|
27
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PageHeaderActions, never>;
|
|
28
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<PageHeaderActions, "[mfPageHeaderActions]", never, {}, {}, never, never, true, never>;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { PageHeader, PageHeaderActions };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as _mesgflow_ui_kit_pagination from '@mesgflow/ui-kit/pagination';
|
|
2
|
+
import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
|
|
3
|
+
import * as _angular_core from '@angular/core';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<mf-pagination [pageCount]="20" [(page)]="page" />`
|
|
7
|
+
*
|
|
8
|
+
* Tablo dışı listeler (kart ızgarası, arama sonuçları) için bağımsız sayfalama. Table'ın
|
|
9
|
+
* kendi sayfalamasıyla AYNI görsel dil: aktif sayfa nötr zemin + alt kenarda 2px marka rayı
|
|
10
|
+
* ("buradasın" motifi), dolu blok değil.
|
|
11
|
+
*
|
|
12
|
+
* Öğe sayısı sabittir (bkz. `paginationRange`) — sayfa değiştikçe düğmeler kaymaz. `compact`:
|
|
13
|
+
* sayı listesi yerine "Sayfa 3 / 20" (dar alanlar, mobil). `<nav>` landmark'ı + aktif sayfada
|
|
14
|
+
* `aria-current="page"`; sayfa düğmeleri "Page 3" gibi tam adla duyurulur; üç nokta gizlidir.
|
|
15
|
+
*/
|
|
16
|
+
declare class Pagination {
|
|
17
|
+
readonly page: _angular_core.ModelSignal<number>;
|
|
18
|
+
readonly pageCount: _angular_core.InputSignal<number>;
|
|
19
|
+
/** Aktif sayfanın iki yanında gösterilecek sayfa sayısı. */
|
|
20
|
+
readonly siblings: _angular_core.InputSignal<number>;
|
|
21
|
+
/** İlk/son sayfaya atlama düğmeleri. */
|
|
22
|
+
readonly showEdges: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
23
|
+
readonly compact: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
24
|
+
readonly size: _angular_core.InputSignal<"sm" | "md">;
|
|
25
|
+
/** Verilmezse `MfLabels.pagination.navAriaLabel` — sayfada birden çok sayfalama varsa ayırt edin. */
|
|
26
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
27
|
+
protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfPaginationLabels>;
|
|
28
|
+
protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
|
|
29
|
+
protected readonly safeCount: _angular_core.Signal<number>;
|
|
30
|
+
protected readonly current: _angular_core.Signal<number>;
|
|
31
|
+
protected readonly items: _angular_core.Signal<_mesgflow_ui_kit_pagination.PaginationItem[]>;
|
|
32
|
+
protected cell(active?: boolean): string;
|
|
33
|
+
protected goTo(page: number): void;
|
|
34
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Pagination, never>;
|
|
35
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Pagination, "mf-pagination", ["mfPagination"], { "page": { "alias": "page"; "required": false; "isSignal": true; }; "pageCount": { "alias": "pageCount"; "required": true; "isSignal": true; }; "siblings": { "alias": "siblings"; "required": false; "isSignal": true; }; "showEdges": { "alias": "showEdges"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; }, never, never, true, never>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
type PaginationItem = number | 'ellipsis-start' | 'ellipsis-end';
|
|
39
|
+
/**
|
|
40
|
+
* Görünen sayfa öğeleri — SABİT uzunlukta: `2 × boundaries + 2 × siblings + 3` (sayfa sayısı
|
|
41
|
+
* bundan azsa hepsi). Böylece sayfa değiştikçe öğe sayısı oynamaz, düğmeler zıplamaz (Table
|
|
42
|
+
* sayfalamasındaki değişken uzunluklu listenin aksine). Üç nokta tek bir sayfanın yerini
|
|
43
|
+
* tutuyorsa üç nokta yerine o sayfa gösterilir (… yalnızca ≥2 sayfayı gizler).
|
|
44
|
+
*
|
|
45
|
+
* `paginationRange(6, 20)` → `[1, 'ellipsis-start', 5, 6, 7, 'ellipsis-end', 20]`
|
|
46
|
+
*/
|
|
47
|
+
declare function paginationRange(current: number, pageCount: number, siblings?: number, boundaries?: number): PaginationItem[];
|
|
48
|
+
|
|
49
|
+
export { Pagination, paginationRange };
|
|
50
|
+
export type { PaginationItem };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<mf-password-input [(value)]="password" />` — `InputGroup` üstüne kompoze
|
|
7
|
+
* edilmiş, sağda göster/gizle düğmesi taşıyan parola alanı (emsal:
|
|
8
|
+
* `NumberInput`/`DateRangePicker`'ın AYNI `mf-input-group` kabuğunu
|
|
9
|
+
* kullanma deseni). `type="password"`/`"text"` arasında geçiş SADECE
|
|
10
|
+
* görünürlük içindir — değer her zaman `value` model'inde düz metin olarak
|
|
11
|
+
* tutulur.
|
|
12
|
+
*/
|
|
13
|
+
declare class PasswordInput extends ValueAccessorBase<string> implements ControlValueAccessor {
|
|
14
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
15
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
16
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
17
|
+
readonly hasError: _angular_core.InputSignal<boolean>;
|
|
18
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
19
|
+
readonly fullWidth: _angular_core.InputSignal<boolean>;
|
|
20
|
+
readonly showLabel: _angular_core.InputSignal<string | undefined>;
|
|
21
|
+
readonly hideLabel: _angular_core.InputSignal<string | undefined>;
|
|
22
|
+
private readonly passwordLabels;
|
|
23
|
+
protected readonly effectiveShowLabel: _angular_core.Signal<string>;
|
|
24
|
+
protected readonly effectiveHideLabel: _angular_core.Signal<string>;
|
|
25
|
+
protected readonly visible: _angular_core.WritableSignal<boolean>;
|
|
26
|
+
writeValue(value: string): void;
|
|
27
|
+
protected toggle(): void;
|
|
28
|
+
protected onInput(raw: string): void;
|
|
29
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasswordInput, never>;
|
|
30
|
+
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; }; "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>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { PasswordInput };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { CdkOverlayOrigin, ConnectedPosition } from '@angular/cdk/overlay';
|
|
3
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
4
|
+
import { VariantProps } from 'class-variance-authority';
|
|
5
|
+
|
|
6
|
+
type PopoverPlacement = 'bottom-start' | 'bottom-end' | 'top-start' | 'top-end' | 'top' | 'bottom' | 'left' | 'right' | 'right-start';
|
|
7
|
+
/**
|
|
8
|
+
* `<button cdkOverlayOrigin #trigger="cdkOverlayOrigin" (click)="open.set(true)">...</button>`
|
|
9
|
+
* `<mf-popover [origin]="trigger" [(open)]="open">...içerik (ng-content)...</mf-popover>`
|
|
10
|
+
*
|
|
11
|
+
* `Select`/`TableColumnsMenu`/`TableFilterMenu`/`DatePicker`'ın HER BİRİNİN
|
|
12
|
+
* ayrı ayrı yazdığı `cdkConnectedOverlay` + pozisyon dizisi + backdrop/ESC
|
|
13
|
+
* kapama iskeletini TEK yerde toplayan genel amaçlı panel primitifi (bkz.
|
|
14
|
+
* README "Yeni bir primitif gerektiğinde"). YENİ kullanım noktaları bunu
|
|
15
|
+
* kullanmalı — mevcut dört bileşenin buna taşınması BİLEREK bu değişiklikle
|
|
16
|
+
* birlikte yapılmadı: her biri kendi klavye/vurgu (highlight) mantığını
|
|
17
|
+
* Popover'ın panel içeriğiyle nasıl kompoze edeceğine karar vermeli, ayrı ve
|
|
18
|
+
* her ekranın tarayıcıda tek tek doğrulanmasını gerektiren bir iş.
|
|
19
|
+
*
|
|
20
|
+
* `origin`, CDK'nın `cdkOverlayOrigin` directive'inin `exportAs` referansı —
|
|
21
|
+
* ayrı bir wrapper directive'e gerek yok, CDK zaten sağlıyor.
|
|
22
|
+
*/
|
|
23
|
+
declare class Popover {
|
|
24
|
+
readonly origin: _angular_core.InputSignal<CdkOverlayOrigin>;
|
|
25
|
+
readonly open: _angular_core.ModelSignal<boolean>;
|
|
26
|
+
readonly placement: _angular_core.InputSignal<PopoverPlacement>;
|
|
27
|
+
readonly padding: _angular_core.InputSignal<"none" | "sm" | "md" | "lg" | null | undefined>;
|
|
28
|
+
/** Backdrop şeffaf ama TIKLANABİLİR — dışarı tıklayınca kapanması için var, görsel karartma YOK. */
|
|
29
|
+
readonly hasBackdrop: _angular_core.InputSignal<boolean>;
|
|
30
|
+
/** `true` ise panel tetikleyiciden DAR olamaz (min-width) — genişleyebilir, küçülemez. */
|
|
31
|
+
readonly matchTriggerWidth: _angular_core.InputSignal<boolean>;
|
|
32
|
+
readonly panelClass: _angular_core.InputSignal<string>;
|
|
33
|
+
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
34
|
+
/**
|
|
35
|
+
* `open()` MANTIKSAL durumu taşır (tüketici `[(open)]` ile doğrudan
|
|
36
|
+
* yazabilir — ör. `Select`'in bir seçenek tıklamasında `this.open.set(false)`
|
|
37
|
+
* çağırması). `attached()` ise CDK'ya bağlanan GERÇEK durum: `open()`
|
|
38
|
+
* `false`'a düştüğünde panel ANINDA kaldırılmaz, `closing` işaretlenip
|
|
39
|
+
* `animate-overlay-out` oynatılır, `EXIT_MS` sonra `attached` da `false`
|
|
40
|
+
* olur. Bu ikili, `DialogService.open()`'daki `closePredicate` gecikmesiyle
|
|
41
|
+
* AYNI doktrini CDK Overlay tarafında uyguluyor (CDK'nın `cdkConnectedOverlay`'i
|
|
42
|
+
* Dialog'un aksine bir "kapanışı ertele" kancası SUNMUYOR, bu yüzden
|
|
43
|
+
* `effect()` tabanlı bu yaklaşım gerekiyor).
|
|
44
|
+
*/
|
|
45
|
+
protected readonly attached: _angular_core.WritableSignal<boolean>;
|
|
46
|
+
protected readonly closing: _angular_core.WritableSignal<boolean>;
|
|
47
|
+
private exitTimer?;
|
|
48
|
+
protected readonly positions: _angular_core.Signal<ConnectedPosition[]>;
|
|
49
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
50
|
+
constructor();
|
|
51
|
+
protected close(): void;
|
|
52
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Popover, never>;
|
|
53
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Popover, "mf-popover", ["mfPopover"], { "origin": { "alias": "origin"; "required": true; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "hasBackdrop": { "alias": "hasBackdrop"; "required": false; "isSignal": true; }; "matchTriggerWidth": { "alias": "matchTriggerWidth"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "closed": "closed"; }, never, ["*"], true, never>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
declare const popoverPanelVariants: (props?: ({
|
|
57
|
+
padding?: "none" | "sm" | "md" | "lg" | null | undefined;
|
|
58
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
59
|
+
type PopoverPadding = VariantProps<typeof popoverPanelVariants>['padding'];
|
|
60
|
+
|
|
61
|
+
export { Popover, popoverPanelVariants };
|
|
62
|
+
export type { PopoverPadding, PopoverPlacement };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
3
|
+
import { VariantProps } from 'class-variance-authority';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<mf-progress [value]="42" />` (belirlenmiş) veya `<mf-progress
|
|
7
|
+
* indeterminate />` (belirsiz — yükleme/tarama gibi süresi bilinmeyen
|
|
8
|
+
* işlemler). `animate-progress-slide` keyframe'i `Table`'ın `showStaleOverlay`
|
|
9
|
+
* şeridiyle AYNI (tokens.css'te tek tanım, bkz. table.html) — iki yerde ayrı
|
|
10
|
+
* ayrı animasyon TANIMLANMADI.
|
|
11
|
+
*/
|
|
12
|
+
declare class Progress {
|
|
13
|
+
readonly value: _angular_core.InputSignal<number>;
|
|
14
|
+
readonly indeterminate: _angular_core.InputSignal<boolean>;
|
|
15
|
+
readonly size: _angular_core.InputSignal<"sm" | "md" | null | undefined>;
|
|
16
|
+
/** `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`. */
|
|
17
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
18
|
+
private readonly progressLabels;
|
|
19
|
+
protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
|
|
20
|
+
protected readonly clampedValue: _angular_core.Signal<number>;
|
|
21
|
+
protected readonly trackClasses: _angular_core.Signal<string>;
|
|
22
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Progress, never>;
|
|
23
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Progress, "mf-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare const progressTrackVariants: (props?: ({
|
|
27
|
+
size?: "sm" | "md" | null | undefined;
|
|
28
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
29
|
+
type ProgressSize = VariantProps<typeof progressTrackVariants>['size'];
|
|
30
|
+
|
|
31
|
+
export { Progress, progressTrackVariants };
|
|
32
|
+
export type { ProgressSize };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { MfSize } from '@mesgflow/ui-kit/core';
|
|
3
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
4
|
+
|
|
5
|
+
type RadioGroupOrientation = 'horizontal' | 'vertical';
|
|
6
|
+
/**
|
|
7
|
+
* `<mf-radio-group [(value)]="plan"><label><input type="radio" mfRadio
|
|
8
|
+
* [value]="'pro'" /> Pro</label>...</mf-radio-group>`
|
|
9
|
+
*
|
|
10
|
+
* Projekte edilen `input[mfRadio]` öğeleri DI ile bu bileşene bağlanır
|
|
11
|
+
* (`Radio`'nun `inject(RadioGroup)`'u — bkz. `radio.ts`), `name`/`checked`/
|
|
12
|
+
* `disabled` GRUPTAN gelir; her `mfRadio` KENDİ `mf-radio-group` atası
|
|
13
|
+
* DIŞINDA kullanılamaz.
|
|
14
|
+
*
|
|
15
|
+
* Ok tuşu navigasyonu/roving tabindex için ÖZEL bir odak yöneticisi
|
|
16
|
+
* (`@angular/aria`'da radio pattern'i olmadığı için akla gelen CDK
|
|
17
|
+
* `FocusKeyManager`) BİLEREK YOK — hepsi AYNI native `name` attribute'unu
|
|
18
|
+
* paylaşan gerçek `<input type="radio">` öğeleri olduğu için tarayıcı bunu
|
|
19
|
+
* ZATEN ücretsiz sağlıyor (native radio grubu semantiği). Üstüne bir odak
|
|
20
|
+
* yöneticisi eklemek gerçek davranışı TEKRARLAYIP çakıştırırdı.
|
|
21
|
+
*/
|
|
22
|
+
declare class RadioGroup<T = unknown> implements ControlValueAccessor {
|
|
23
|
+
readonly value: _angular_core.ModelSignal<T | null>;
|
|
24
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
25
|
+
readonly orientation: _angular_core.InputSignal<RadioGroupOrientation>;
|
|
26
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
27
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
28
|
+
private onChange;
|
|
29
|
+
private onTouched;
|
|
30
|
+
protected readonly hostClasses: _angular_core.Signal<"flex items-center gap-4" | "flex flex-col gap-2">;
|
|
31
|
+
writeValue(value: T | null): void;
|
|
32
|
+
registerOnChange(fn: (value: T | null) => void): void;
|
|
33
|
+
registerOnTouched(fn: () => void): void;
|
|
34
|
+
/** `Radio`'nun `(change)` işleyicisinden çağrılır — bkz. `radio.ts`. */
|
|
35
|
+
onRadioChange(value: T): void;
|
|
36
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioGroup<any>, never>;
|
|
37
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioGroup<any>, "mf-radio-group", ["mfRadioGroup"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["*"], true, never>;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* `<input type="radio" mfRadio [value]="'pro'" />` — `Checkbox` (bkz.
|
|
42
|
+
* checkbox.ts) ile AYNI "native accent-color" deseni, `rounded-full` dışında
|
|
43
|
+
* fark yok. Bir `mf-radio-group` ATASI ZORUNLU — `name`/`checked`/`disabled`
|
|
44
|
+
* DI ile ondan okunur (bkz. `radio-group.ts`'in JSDoc'u); grup dışında
|
|
45
|
+
* kullanılırsa `inject(RadioGroup)` hata fırlatır (fail-fast).
|
|
46
|
+
*/
|
|
47
|
+
declare class Radio<T = unknown> {
|
|
48
|
+
protected readonly group: RadioGroup<T>;
|
|
49
|
+
readonly size: _angular_core.InputSignal<MfSize>;
|
|
50
|
+
readonly value: _angular_core.InputSignal<T | undefined>;
|
|
51
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
52
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
53
|
+
protected onChange(): void;
|
|
54
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Radio<any>, never>;
|
|
55
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<Radio<any>, "input[type=radio][mfRadio]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { Radio, RadioGroup };
|
|
59
|
+
export type { RadioGroupOrientation };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as _mesgflow_ui_kit_core from '@mesgflow/ui-kit/core';
|
|
2
|
+
import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
|
|
3
|
+
import * as _angular_core from '@angular/core';
|
|
4
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* `<mf-rating [(value)]="score" />` · salt okunur ortalama: `<mf-rating [value]="3.7" readonly />`
|
|
8
|
+
*
|
|
9
|
+
* Etkileşimli mod yerel `<input type="radio">`'lar üzerine kurulu (görsel olarak gizli): ok tuşu
|
|
10
|
+
* gezinmesi, tek sekme durağı, form davranışı tarayıcıdan gelir — `role="radiogroup"` + her
|
|
11
|
+
* yıldız "3 out of 5" gibi adlı bir radyo. Üzerine gelince önizleme; seçili yıldıza tekrar
|
|
12
|
+
* tıklamak temizler (`allowClear`). Salt okunur mod tek bir `role="img"` ("3.7 out of 5");
|
|
13
|
+
* ondalıklar yıldızın kısmen dolmasıyla gösterilir (ortalama puanlar için).
|
|
14
|
+
*/
|
|
15
|
+
declare class Rating extends ValueAccessorBase<number> implements ControlValueAccessor {
|
|
16
|
+
readonly value: _angular_core.ModelSignal<number>;
|
|
17
|
+
readonly max: _angular_core.InputSignal<number>;
|
|
18
|
+
readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
19
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
20
|
+
/** Seçili yıldıza tekrar tıklamak değeri 0'a çeker. */
|
|
21
|
+
readonly allowClear: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
22
|
+
readonly size: _angular_core.InputSignal<number>;
|
|
23
|
+
/** Verilmezse `MfLabels.rating.ariaLabel`. */
|
|
24
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
25
|
+
protected readonly labels: _angular_core.Signal<_mesgflow_ui_kit_core.MfRatingLabels>;
|
|
26
|
+
protected readonly name: string;
|
|
27
|
+
protected readonly hover: _angular_core.WritableSignal<number | null>;
|
|
28
|
+
private readonly formDisabled;
|
|
29
|
+
protected readonly isDisabled: _angular_core.Signal<boolean>;
|
|
30
|
+
protected readonly stars: _angular_core.Signal<number[]>;
|
|
31
|
+
/** Görüntülenen değer — önizleme varsa o, yoksa gerçek değer. */
|
|
32
|
+
protected readonly shown: _angular_core.Signal<number>;
|
|
33
|
+
protected readonly hostLabel: _angular_core.Signal<string>;
|
|
34
|
+
/** Yıldızın doluluk yüzdesi (0–100) — salt okunur ondalıklar için kısmi. */
|
|
35
|
+
protected fill(star: number): number;
|
|
36
|
+
protected starLabel(star: number): string;
|
|
37
|
+
/**
|
|
38
|
+
* TEK giriş noktası `click`: tarayıcı ok tuşuyla radyo seçiminde de `click` üretir. `change`
|
|
39
|
+
* ayrıca dinlenmez — seçili radyoya tıklamak `change` üretmediğinden temizleme yalnızca
|
|
40
|
+
* click'te yakalanabiliyor, ikisini birden dinlemek ise yeni seçimde çift tetiklenirdi.
|
|
41
|
+
*/
|
|
42
|
+
protected choose(star: number): void;
|
|
43
|
+
/**
|
|
44
|
+
* Klavyeyle temizleme: Delete/Backspace. Seçili radyoda Space tarayıcıda `click` üretmez
|
|
45
|
+
* (radyo zaten seçili — gerçek tarayıcıda doğrulandı), bu yüzden fareyle yeniden tıklamanın
|
|
46
|
+
* klavye karşılığı ayrı bir tuş.
|
|
47
|
+
*/
|
|
48
|
+
protected clear(event: Event): void;
|
|
49
|
+
protected preview(star: number | null): void;
|
|
50
|
+
writeValue(value: number | null): void;
|
|
51
|
+
setDisabledState(disabled: boolean): void;
|
|
52
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Rating, never>;
|
|
53
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Rating, "mf-rating", ["mfRating"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "allowClear": { "alias": "allowClear"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { Rating };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
type ScrollAreaOrientation = 'vertical' | 'horizontal';
|
|
4
|
+
/**
|
|
5
|
+
* `<mf-scroll-area class="max-h-64"><div class="p-4">...uzun içerik...</div></mf-scroll-area>`
|
|
6
|
+
* — kenar "solma" maskesi (`mask-image`, `TabScroller`'ın AYNI tekniği —
|
|
7
|
+
* bkz. `tabs/tab-scroller.ts` — ama ok-düğmesi/`scrollByDir` YOK, burada
|
|
8
|
+
* gerek yok) kaydırılabilir olduğunu ima eder. Native scrollbar GİZLENMİYOR
|
|
9
|
+
* (`TabScroller`'ın aksine) — `tokens/color.css`'teki global
|
|
10
|
+
* `scrollbar-width:thin` sayesinde ZATEN ince/tema-uyumlu, kullanıcının
|
|
11
|
+
* scrollbar'ı GÖRMESİ genel amaçlı bir kaydırma alanında faydalı.
|
|
12
|
+
*/
|
|
13
|
+
declare class ScrollArea {
|
|
14
|
+
readonly orientation: _angular_core.InputSignal<ScrollAreaOrientation>;
|
|
15
|
+
private readonly elementRef;
|
|
16
|
+
private readonly vertical;
|
|
17
|
+
protected readonly canScrollStart: _angular_core.WritableSignal<boolean>;
|
|
18
|
+
protected readonly canScrollEnd: _angular_core.WritableSignal<boolean>;
|
|
19
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
20
|
+
constructor();
|
|
21
|
+
protected updateEdges(): void;
|
|
22
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScrollArea, never>;
|
|
23
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScrollArea, "mf-scroll-area", ["mfScrollArea"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { ScrollArea };
|
|
27
|
+
export type { ScrollAreaOrientation };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* `<mf-search-input [(value)]="term" [loading]="fetching()" placeholder="Ara..." />`
|
|
7
|
+
*
|
|
8
|
+
* Kapalıyken sadece bir ikon-buton genişliğinde (ikon tıklanabilir/odaklanabilir
|
|
9
|
+
* — hem mouse hem klavye ile genişliyor), odak alınca/tıklanınca genişliyor.
|
|
10
|
+
* Yazarken debounce süresi boyunca VE (varsa) dışarıdan verilen `loading`
|
|
11
|
+
* true olduğu sürece dönen bir spinner gösteriyor — "arıyor" hissi debounce
|
|
12
|
+
* bitiminde kaybolmuyor, gerçek sorgu sonucu gelene kadar sürüyor.
|
|
13
|
+
*
|
|
14
|
+
* Component (directive değil) — Field/Switch gibi gerçek iç yapı (ikon+input+
|
|
15
|
+
* temizle butonu+genişleme animasyonu) gerektiriyor (bkz. projects/ui-kit/README.md
|
|
16
|
+
* "Directive mi, component mi?").
|
|
17
|
+
*/
|
|
18
|
+
declare class SearchInput extends ValueAccessorBase<string> implements ControlValueAccessor {
|
|
19
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
20
|
+
readonly placeholder: _angular_core.InputSignal<string | undefined>;
|
|
21
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
22
|
+
readonly tooltipLabel: _angular_core.InputSignal<string | undefined>;
|
|
23
|
+
/** Tüketicinin gerçek veri çekme durumu — debounce bittikten sonra da spinner'ı sürdürür. */
|
|
24
|
+
readonly loading: _angular_core.InputSignal<boolean>;
|
|
25
|
+
readonly debounceMs: _angular_core.InputSignal<number>;
|
|
26
|
+
/**
|
|
27
|
+
* `false` → her zaman tam genişlikte açık, ikon tıklanabilir bir "kapı"
|
|
28
|
+
* değil (bkz. `table/table.ts` — bir VERİ TABLOSUNDA arama gizlenmez,
|
|
29
|
+
* bu bir navbar deseni; Table `[collapsible]="false"` geçiyor).
|
|
30
|
+
* Varsayılan `true` — bu bileşenin bugünkü tek gerçek davranışı, henüz
|
|
31
|
+
* başka bir tüketici yok ama gelecekte navbar/toolbar gibi dar bağlamlarda
|
|
32
|
+
* ihtiyaç olabilir diye korunuyor.
|
|
33
|
+
*/
|
|
34
|
+
readonly collapsible: _angular_core.InputSignal<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* `true` → kutu sabit `w-64` (256px) yerine kapsayıcısının TAM genişliğinde
|
|
37
|
+
* açılır — kutunun panelin geri kalanıyla (ör. yan yana duran bir sekme
|
|
38
|
+
* listesiyle) aynı genişlikte hizalanması gereken bağlamlar için.
|
|
39
|
+
* `collapsible` ile birlikte anlamlı (`[collapsible]="false"` olmadan
|
|
40
|
+
* daralmış hâl `w-10` sabit kalır, `fullWidth` sadece GENİŞLEMİŞ genişliği
|
|
41
|
+
* değiştirir). Varsayılan `false` — navbar/toolbar'daki bugünkü sabit
|
|
42
|
+
* genişlik davranışı değişmez.
|
|
43
|
+
*/
|
|
44
|
+
readonly fullWidth: _angular_core.InputSignal<boolean>;
|
|
45
|
+
private readonly searchInputLabels;
|
|
46
|
+
protected readonly effectivePlaceholder: _angular_core.Signal<string>;
|
|
47
|
+
protected readonly effectiveAriaLabel: _angular_core.Signal<string>;
|
|
48
|
+
protected readonly effectiveTooltipLabel: _angular_core.Signal<string>;
|
|
49
|
+
protected readonly effectiveClearAriaLabel: _angular_core.Signal<string>;
|
|
50
|
+
private readonly expandedState;
|
|
51
|
+
/** `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. */
|
|
52
|
+
protected readonly expanded: _angular_core.Signal<boolean>;
|
|
53
|
+
/** `w-64`/`w-10` yerine `w-full` — bkz. `fullWidth` doc yorumu. */
|
|
54
|
+
protected readonly inputWidthClass: _angular_core.Signal<"w-full cursor-text pe-8 ps-9" | "w-64 cursor-text pe-8 ps-9" | "w-10 cursor-pointer caret-transparent pe-2 ps-9">;
|
|
55
|
+
protected readonly draft: _angular_core.WritableSignal<string>;
|
|
56
|
+
protected readonly pending: _angular_core.WritableSignal<boolean>;
|
|
57
|
+
protected readonly showSpinner: _angular_core.Signal<boolean>;
|
|
58
|
+
private readonly inputEl;
|
|
59
|
+
private readonly tooltipRef;
|
|
60
|
+
private debounceHandle?;
|
|
61
|
+
constructor();
|
|
62
|
+
writeValue(value: string): void;
|
|
63
|
+
protected expand(): void;
|
|
64
|
+
protected collapseIfEmpty(): void;
|
|
65
|
+
protected onInput(raw: string): void;
|
|
66
|
+
protected clear(): void;
|
|
67
|
+
protected onEscape(): void;
|
|
68
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchInput, never>;
|
|
69
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchInput, "mf-search-input", ["mfSearchInput"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "tooltipLabel": { "alias": "tooltipLabel"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export { SearchInput };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import { ValueAccessorBase } from '@mesgflow/ui-kit/core';
|
|
4
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
5
|
+
import { VariantProps } from 'class-variance-authority';
|
|
6
|
+
|
|
7
|
+
interface SegmentedOption<T> {
|
|
8
|
+
label: string;
|
|
9
|
+
value: T;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* `<mf-segmented-control [options]="opts" [(value)]="mode" />` — hizalama,
|
|
13
|
+
* cihaz önizlemesi gibi KISA/tek-seçimli seçenek kümeleri için. `Tabs`'tan
|
|
14
|
+
* farkı: içerik paneli YOK, sadece bir değer seçimi. ARIA/klavye (roving
|
|
15
|
+
* tabindex, ok tuşu navigasyonu) `@angular/aria/toolbar`'ın
|
|
16
|
+
* `Toolbar`/`ToolbarWidgetGroup`/`ToolbarWidget` pattern'inden geliyor —
|
|
17
|
+
* dokümantasyondaki kompozisyon şekli birebir izlendi (dıştaki `ngToolbar`,
|
|
18
|
+
* içteki `ngToolbarWidgetGroup [multi]="false"`).
|
|
19
|
+
*/
|
|
20
|
+
declare class SegmentedControl<T> extends ValueAccessorBase<T | null> implements ControlValueAccessor {
|
|
21
|
+
readonly options: _angular_core.InputSignal<SegmentedOption<T>[]>;
|
|
22
|
+
readonly value: _angular_core.ModelSignal<T | null>;
|
|
23
|
+
readonly size: _angular_core.InputSignal<"sm" | "md" | null | undefined>;
|
|
24
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
25
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
26
|
+
protected readonly toolbarValue: _angular_core.Signal<T[]>;
|
|
27
|
+
protected readonly trackClasses: _angular_core.Signal<string>;
|
|
28
|
+
writeValue(value: T | null): void;
|
|
29
|
+
/**
|
|
30
|
+
* `@angular/aria/toolbar`'ın kendi widget-kayıt döngüsü, gerçek bir tıklama
|
|
31
|
+
* OLMADAN da BOŞ bir dizi ile (`values: []`) tetiklenebiliyor (gerçek bulgu
|
|
32
|
+
* — bir seçeneğe tıklarken bile araya giren, seçimle ilgisiz iç kayıt
|
|
33
|
+
* event'leri). `this.value` her event'te güncellenir (görsel durum ETKİLENMEZ,
|
|
34
|
+
* zaten `values[0]` genelde mevcut değerle AYNI), ama CVA `onChange`/`onTouched`
|
|
35
|
+
* SADECE dolu bir dizi (gerçek bir seçim) geldiğinde tetiklenir — aksi halde
|
|
36
|
+
* Reactive Forms'a sahte "null'a değişti" bildirimleri sızardı.
|
|
37
|
+
*/
|
|
38
|
+
protected onToolbarValueChange(values: readonly T[]): void;
|
|
39
|
+
protected itemClasses(option: SegmentedOption<T>): string;
|
|
40
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentedControl<any>, never>;
|
|
41
|
+
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>;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
declare const segmentedTrackVariants: (props?: ({
|
|
45
|
+
size?: "sm" | "md" | null | undefined;
|
|
46
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
47
|
+
declare const segmentedItemVariants: (props?: ({
|
|
48
|
+
selected?: boolean | null | undefined;
|
|
49
|
+
disabled?: boolean | null | undefined;
|
|
50
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
51
|
+
type SegmentedControlSize = VariantProps<typeof segmentedTrackVariants>['size'];
|
|
52
|
+
|
|
53
|
+
export { SegmentedControl, segmentedItemVariants, segmentedTrackVariants };
|
|
54
|
+
export type { SegmentedControlSize, SegmentedOption };
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import * as class_variance_authority_types from 'class-variance-authority/types';
|
|
4
|
+
import { VariantProps } from 'class-variance-authority';
|
|
5
|
+
|
|
6
|
+
interface SelectOption<T> {
|
|
7
|
+
label: string;
|
|
8
|
+
value: T;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* `<mf-select [options]="opts" [(value)]="chosen" placeholder="Seç" />`
|
|
12
|
+
* (tek-seçimli, varsayılan) veya `<mf-select multiple [options]="opts"
|
|
13
|
+
* [(values)]="chosen" />` (çoklu-seçim — tetikleyici seçilenleri Chip
|
|
14
|
+
* özeti olarak gösterir, bir seçeneğe tıklamak paneli KAPATMAZ, tekrar
|
|
15
|
+
* tıklamak seçimi KALDIRIR).
|
|
16
|
+
*
|
|
17
|
+
* `multiple` AÇIKKEN `value`/`(valueChange)` KULLANILMAZ — ayrı bir
|
|
18
|
+
* `values: model<T[]>` var (bkz. aşağıda). İkisini AYIRMANIN sebebi:
|
|
19
|
+
* `value`'nun TİPİNİ (`T | null`) tek-seçimli kullanım için DEĞİŞTİRMEDEN
|
|
20
|
+
* bırakmak — mevcut tüm `[(value)]="tekTip"` tüketicileri (Table'ın alan/
|
|
21
|
+
* operatör/sayfa-boyutu seçicileri, TableFilterBar'ın VE/VEYA seçicisi)
|
|
22
|
+
* BİREBİR aynı tipte kalıyor, çoklu-seçim EKLENTİ, DEĞİŞİKLİK değil.
|
|
23
|
+
*
|
|
24
|
+
* Bu kitin ilk overlay tabanlı primitifi — native `<select>` değil,
|
|
25
|
+
* çünkü açılır panelin kendisi (arka plan/kenarlık/hover rengi) native
|
|
26
|
+
* `<select>` popup'ında tarayıcı-bağımlı ve stillenemez kalıyordu; CDK Overlay
|
|
27
|
+
* + kendi listbox'ımız panel dahil her pikseli bizim token sistemimizle
|
|
28
|
+
* boyayabiliyor. `@angular/cdk` zaten bağımlı, ek paket gerekmedi — pozisyonlama
|
|
29
|
+
* CSS'i `styles.css`'teki resmi `@angular/cdk/overlay-prebuilt.css`
|
|
30
|
+
* import'undan geliyor (bkz. o import'un yanındaki not).
|
|
31
|
+
*
|
|
32
|
+
* Arama/virtual-scroll YOK — Table'ın alan/operatör/sayfa-boyutu
|
|
33
|
+
* seçicileri gibi kısa listeler için kasıtlı olarak minimal.
|
|
34
|
+
*/
|
|
35
|
+
declare class Select<T> implements ControlValueAccessor {
|
|
36
|
+
readonly options: _angular_core.InputSignal<SelectOption<T>[]>;
|
|
37
|
+
readonly value: _angular_core.ModelSignal<T | null>;
|
|
38
|
+
readonly multiple: _angular_core.InputSignal<boolean>;
|
|
39
|
+
/** SADECE `multiple=true`'da kullanılır — bkz. sınıf üstündeki JSDoc. */
|
|
40
|
+
readonly values: _angular_core.ModelSignal<T[]>;
|
|
41
|
+
readonly maxVisibleChips: _angular_core.InputSignal<number>;
|
|
42
|
+
readonly placeholder: _angular_core.InputSignal<string | undefined>;
|
|
43
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
44
|
+
readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | null | undefined>;
|
|
45
|
+
readonly hasError: _angular_core.InputSignal<boolean>;
|
|
46
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
47
|
+
private onChange;
|
|
48
|
+
private onTouched;
|
|
49
|
+
private readonly selectLabels;
|
|
50
|
+
protected readonly effectivePlaceholder: _angular_core.Signal<string>;
|
|
51
|
+
protected readonly open: _angular_core.WritableSignal<boolean>;
|
|
52
|
+
protected readonly highlighted: _angular_core.WritableSignal<number>;
|
|
53
|
+
protected readonly triggerClasses: _angular_core.Signal<string>;
|
|
54
|
+
protected readonly selectedLabel: _angular_core.Signal<string>;
|
|
55
|
+
protected readonly selectedOptions: _angular_core.Signal<SelectOption<T>[]>;
|
|
56
|
+
protected readonly visibleChips: _angular_core.Signal<SelectOption<T>[]>;
|
|
57
|
+
protected readonly overflowChipCount: _angular_core.Signal<number>;
|
|
58
|
+
protected toggle(): void;
|
|
59
|
+
protected close(): void;
|
|
60
|
+
/** 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`). */
|
|
61
|
+
protected select(option: SelectOption<T>): void;
|
|
62
|
+
/** Ç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). */
|
|
63
|
+
private toggleValue;
|
|
64
|
+
writeValue(value: T | T[] | null): void;
|
|
65
|
+
registerOnChange(fn: (value: T | T[] | null) => void): void;
|
|
66
|
+
registerOnTouched(fn: () => void): void;
|
|
67
|
+
protected isSelected(option: SelectOption<T>): boolean;
|
|
68
|
+
protected optionClasses(option: SelectOption<T>, index: number): string;
|
|
69
|
+
protected onTriggerKeydown(event: KeyboardEvent): void;
|
|
70
|
+
protected onPanelKeydown(event: KeyboardEvent): void;
|
|
71
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Select<any>, never>;
|
|
72
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select<any>, "mf-select", ["mfSelect"], { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "maxVisibleChips": { "alias": "maxVisibleChips"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hasError": { "alias": "hasError"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "values": "valuesChange"; }, never, never, true, never>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Bkz. `core/recipes.ts` `controlSurface` — aynı kabuk, tetikleyici bir
|
|
77
|
+
* <button>'a uygulanıyor. `focus:border-accent` — Input/Combobox'ın ZATEN
|
|
78
|
+
* sahip olduğu odak kenarlığı burada eksikti (gerçek bulgu): odaklı bir
|
|
79
|
+
* select yalnızca outline ile belli oluyordu, kenarlık aksanlanmıyordu.
|
|
80
|
+
*/
|
|
81
|
+
declare const selectTriggerVariants: (props?: ({
|
|
82
|
+
size?: "sm" | "md" | "lg" | null | undefined;
|
|
83
|
+
hasError?: boolean | null | undefined;
|
|
84
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
85
|
+
type SelectSize = VariantProps<typeof selectTriggerVariants>['size'];
|
|
86
|
+
type SelectHasError = VariantProps<typeof selectTriggerVariants>['hasError'];
|
|
87
|
+
|
|
88
|
+
export { Select, selectTriggerVariants };
|
|
89
|
+
export type { SelectHasError, SelectOption, SelectSize };
|