@mesgflow/ui-kit 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -5
- package/fesm2022/mesgflow-ui-kit-accordion.mjs +9 -8
- package/fesm2022/mesgflow-ui-kit-accordion.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-agenda.mjs +208 -0
- package/fesm2022/mesgflow-ui-kit-agenda.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-alert.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs +37 -0
- package/fesm2022/mesgflow-ui-kit-aspect-ratio.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-avatar-group.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-avatar.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-badge.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-banner.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-blocks.mjs +207 -0
- package/fesm2022/mesgflow-ui-kit-blocks.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-box-input.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-box-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-brand.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-breadcrumb.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-button-group.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-button.mjs +190 -244
- package/fesm2022/mesgflow-ui-kit-button.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-card.mjs +48 -27
- package/fesm2022/mesgflow-ui-kit-card.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-carousel.mjs +308 -0
- package/fesm2022/mesgflow-ui-kit-carousel.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-chart.mjs +12 -12
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs +18 -23
- package/fesm2022/mesgflow-ui-kit-checkbox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-chip.mjs +5 -5
- package/fesm2022/mesgflow-ui-kit-chip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-code-block.mjs +11 -7
- package/fesm2022/mesgflow-ui-kit-code-block.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-collapsible.mjs +9 -9
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs +9 -7
- package/fesm2022/mesgflow-ui-kit-color-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-combobox.mjs +147 -67
- package/fesm2022/mesgflow-ui-kit-combobox.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-command.mjs +15 -16
- package/fesm2022/mesgflow-ui-kit-command.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs +7 -9
- package/fesm2022/mesgflow-ui-kit-context-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-copy-button.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-core.mjs +446 -128
- package/fesm2022/mesgflow-ui-kit-core.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-countdown.mjs +149 -0
- package/fesm2022/mesgflow-ui-kit-countdown.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs +140 -19
- package/fesm2022/mesgflow-ui-kit-date-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-description-list.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-dialog.mjs +310 -64
- package/fesm2022/mesgflow-ui-kit-dialog.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-divider.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-drawer.mjs +109 -0
- package/fesm2022/mesgflow-ui-kit-drawer.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-dropzone.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-empty-state.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-field.mjs +55 -14
- package/fesm2022/mesgflow-ui-kit-field.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-file-upload.mjs +356 -0
- package/fesm2022/mesgflow-ui-kit-file-upload.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-hover-card.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs +135 -0
- package/fesm2022/mesgflow-ui-kit-i18n-tr.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-icon.mjs +8 -3
- package/fesm2022/mesgflow-ui-kit-icon.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs +371 -0
- package/fesm2022/mesgflow-ui-kit-icons-lucide.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-inline-edit.mjs +279 -0
- package/fesm2022/mesgflow-ui-kit-inline-edit.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-input.mjs +162 -19
- package/fesm2022/mesgflow-ui-kit-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-kbd.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-lightbox.mjs +299 -0
- package/fesm2022/mesgflow-ui-kit-lightbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-link.mjs +5 -5
- package/fesm2022/mesgflow-ui-kit-link.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-listbox.mjs +151 -0
- package/fesm2022/mesgflow-ui-kit-listbox.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-mention.mjs +283 -0
- package/fesm2022/mesgflow-ui-kit-mention.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-menu.mjs +178 -14
- package/fesm2022/mesgflow-ui-kit-menu.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-nav-menu.mjs +276 -0
- package/fesm2022/mesgflow-ui-kit-nav-menu.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-notification-center.mjs +281 -0
- package/fesm2022/mesgflow-ui-kit-notification-center.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-number-input.mjs +9 -6
- package/fesm2022/mesgflow-ui-kit-number-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-otp-input.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-page-header.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-pagination.mjs +7 -6
- package/fesm2022/mesgflow-ui-kit-pagination.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-password-input.mjs +38 -68
- package/fesm2022/mesgflow-ui-kit-password-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-popover.mjs +12 -52
- package/fesm2022/mesgflow-ui-kit-popover.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-progress.mjs +164 -23
- package/fesm2022/mesgflow-ui-kit-progress.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-qr-code.mjs +766 -0
- package/fesm2022/mesgflow-ui-kit-qr-code.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-radio.mjs +10 -12
- package/fesm2022/mesgflow-ui-kit-radio.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-rating.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-rating.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-scroll-area.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-search-input.mjs +11 -7
- package/fesm2022/mesgflow-ui-kit-search-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs +15 -11
- package/fesm2022/mesgflow-ui-kit-segmented-control.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-select.mjs +6 -5
- package/fesm2022/mesgflow-ui-kit-select.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs +24 -21
- package/fesm2022/mesgflow-ui-kit-sidebar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs +6 -5
- package/fesm2022/mesgflow-ui-kit-skeleton.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-slider.mjs +253 -6
- package/fesm2022/mesgflow-ui-kit-slider.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-sortable.mjs +526 -0
- package/fesm2022/mesgflow-ui-kit-sortable.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-spinner.mjs +44 -15
- package/fesm2022/mesgflow-ui-kit-spinner.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-split-button.mjs +205 -0
- package/fesm2022/mesgflow-ui-kit-split-button.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-splitter.mjs +213 -6
- package/fesm2022/mesgflow-ui-kit-splitter.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs +13 -6
- package/fesm2022/mesgflow-ui-kit-stat-tile.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-stepper.mjs +171 -64
- package/fesm2022/mesgflow-ui-kit-stepper.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-switch.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-switch.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-table.mjs +34 -28
- package/fesm2022/mesgflow-ui-kit-table.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tabs.mjs +421 -180
- package/fesm2022/mesgflow-ui-kit-tabs.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs +9 -4
- package/fesm2022/mesgflow-ui-kit-tag-input.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-theme-switcher.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-theming.mjs +7 -7
- package/fesm2022/mesgflow-ui-kit-theming.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs +6 -6
- package/fesm2022/mesgflow-ui-kit-time-picker.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-timeline.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-toast.mjs +118 -35
- package/fesm2022/mesgflow-ui-kit-toast.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toggle.mjs +12 -11
- package/fesm2022/mesgflow-ui-kit-toggle.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs +13 -11
- package/fesm2022/mesgflow-ui-kit-toolbar.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs +76 -53
- package/fesm2022/mesgflow-ui-kit-tooltip.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-tour.mjs +17 -29
- package/fesm2022/mesgflow-ui-kit-tour.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-transfer-list.mjs +288 -0
- package/fesm2022/mesgflow-ui-kit-transfer-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit-tree-select.mjs +3 -3
- package/fesm2022/mesgflow-ui-kit-tree.mjs +4 -4
- package/fesm2022/mesgflow-ui-kit-tree.mjs.map +1 -1
- package/fesm2022/mesgflow-ui-kit-virtual-list.mjs +109 -0
- package/fesm2022/mesgflow-ui-kit-virtual-list.mjs.map +1 -0
- package/fesm2022/mesgflow-ui-kit.mjs +93 -12836
- package/fesm2022/mesgflow-ui-kit.mjs.map +1 -1
- package/package.json +91 -3
- package/schematics/collection.json +10 -0
- package/schematics/migration.json +10 -0
- package/schematics/migrations/v0-7.cjs +70 -0
- package/schematics/ng-add/index.cjs +234 -0
- package/schematics/ng-add/schema.json +43 -0
- package/tokens/color.css +96 -0
- package/tokens/controls.css +145 -0
- package/tokens/elevation.css +62 -6
- package/tokens/motion.css +304 -66
- package/tokens/radius.css +14 -0
- package/tokens.css +1 -0
- package/tokens.json +1583 -0
- package/types/mesgflow-ui-kit-agenda.d.ts +49 -0
- package/types/mesgflow-ui-kit-aspect-ratio.d.ts +18 -0
- package/types/mesgflow-ui-kit-blocks.d.ts +128 -0
- package/types/mesgflow-ui-kit-button.d.ts +23 -38
- package/types/mesgflow-ui-kit-card.d.ts +26 -16
- package/types/mesgflow-ui-kit-carousel.d.ts +51 -0
- package/types/mesgflow-ui-kit-checkbox.d.ts +8 -5
- package/types/mesgflow-ui-kit-code-block.d.ts +4 -1
- package/types/mesgflow-ui-kit-combobox.d.ts +47 -22
- package/types/mesgflow-ui-kit-command.d.ts +2 -2
- package/types/mesgflow-ui-kit-core.d.ts +279 -21
- package/types/mesgflow-ui-kit-countdown.d.ts +47 -0
- package/types/mesgflow-ui-kit-date-picker.d.ts +31 -1
- package/types/mesgflow-ui-kit-dialog.d.ts +122 -14
- package/types/mesgflow-ui-kit-drawer.d.ts +45 -0
- package/types/mesgflow-ui-kit-field.d.ts +17 -8
- package/types/mesgflow-ui-kit-file-upload.d.ts +64 -0
- package/types/mesgflow-ui-kit-hover-card.d.ts +2 -2
- package/types/mesgflow-ui-kit-icons-lucide.d.ts +27 -0
- package/types/mesgflow-ui-kit-inline-edit.d.ts +42 -0
- package/types/mesgflow-ui-kit-input.d.ts +64 -2
- package/types/mesgflow-ui-kit-lightbox.d.ts +54 -0
- package/types/mesgflow-ui-kit-listbox.d.ts +30 -0
- package/types/mesgflow-ui-kit-mention.d.ts +59 -0
- package/types/mesgflow-ui-kit-menu.d.ts +41 -2
- package/types/mesgflow-ui-kit-nav-menu.d.ts +58 -0
- package/types/mesgflow-ui-kit-notification-center.d.ts +41 -0
- package/types/mesgflow-ui-kit-number-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-password-input.d.ts +35 -5
- package/types/mesgflow-ui-kit-popover.d.ts +13 -5
- package/types/mesgflow-ui-kit-progress.d.ts +33 -12
- package/types/mesgflow-ui-kit-qr-code.d.ts +160 -0
- package/types/mesgflow-ui-kit-radio.d.ts +2 -2
- package/types/mesgflow-ui-kit-search-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-segmented-control.d.ts +4 -0
- package/types/mesgflow-ui-kit-sidebar.d.ts +1 -1
- package/types/mesgflow-ui-kit-slider.d.ts +60 -1
- package/types/mesgflow-ui-kit-sortable.d.ts +103 -0
- package/types/mesgflow-ui-kit-spinner.d.ts +5 -8
- package/types/mesgflow-ui-kit-split-button.d.ts +47 -0
- package/types/mesgflow-ui-kit-splitter.d.ts +64 -1
- package/types/mesgflow-ui-kit-stat-tile.d.ts +3 -0
- package/types/mesgflow-ui-kit-stepper.d.ts +54 -32
- package/types/mesgflow-ui-kit-table.d.ts +2 -0
- package/types/mesgflow-ui-kit-tabs.d.ts +193 -93
- package/types/mesgflow-ui-kit-tag-input.d.ts +3 -1
- package/types/mesgflow-ui-kit-toast.d.ts +48 -22
- package/types/mesgflow-ui-kit-tooltip.d.ts +15 -12
- package/types/mesgflow-ui-kit-transfer-list.d.ts +34 -0
- package/types/mesgflow-ui-kit-virtual-list.d.ts +35 -0
- package/types/mesgflow-ui-kit.d.ts +88 -5444
|
@@ -2,7 +2,7 @@ import * as i1 from '@angular/cdk/overlay';
|
|
|
2
2
|
import { OverlayModule } from '@angular/cdk/overlay';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
4
|
import { input, model, output, signal, computed, effect, untracked, Component } from '@angular/core';
|
|
5
|
-
import { cn } from '@mesgflow/ui-kit/core';
|
|
5
|
+
import { overlayPositions, cn, exitDurationMs } from '@mesgflow/ui-kit/core';
|
|
6
6
|
import { cva } from 'class-variance-authority';
|
|
7
7
|
|
|
8
8
|
const popoverPanelVariants = cva('overflow-auto rounded-lg border border-hairline bg-overlay shadow-2', {
|
|
@@ -17,48 +17,6 @@ const popoverPanelVariants = cva('overflow-auto rounded-lg border border-hairlin
|
|
|
17
17
|
defaultVariants: { padding: 'sm' },
|
|
18
18
|
});
|
|
19
19
|
|
|
20
|
-
/** `--duration-fast` (tokens/motion.css) ile birebir — `animate-overlay-out`un süresi. */
|
|
21
|
-
const EXIT_MS = 120;
|
|
22
|
-
const PLACEMENTS = {
|
|
23
|
-
'bottom-start': [
|
|
24
|
-
{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },
|
|
25
|
-
{ originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },
|
|
26
|
-
],
|
|
27
|
-
'bottom-end': [
|
|
28
|
-
{ originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },
|
|
29
|
-
{ originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },
|
|
30
|
-
],
|
|
31
|
-
'top-start': [
|
|
32
|
-
{ originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },
|
|
33
|
-
{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },
|
|
34
|
-
],
|
|
35
|
-
'top-end': [
|
|
36
|
-
{ originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },
|
|
37
|
-
{ originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },
|
|
38
|
-
],
|
|
39
|
-
/** Ortalanmış dört yön — köşe hizalı değişkenlerin aksine tetikleyicinin TAM ortasına hizalanır (ör. Tooltip'in gelecekteki Popover geçişi için, bkz. plan Faz 1c). */
|
|
40
|
-
top: [
|
|
41
|
-
{ originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -4 },
|
|
42
|
-
{ originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 },
|
|
43
|
-
],
|
|
44
|
-
bottom: [
|
|
45
|
-
{ originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 },
|
|
46
|
-
{ originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -4 },
|
|
47
|
-
],
|
|
48
|
-
left: [
|
|
49
|
-
{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -4 },
|
|
50
|
-
{ originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 4 },
|
|
51
|
-
],
|
|
52
|
-
right: [
|
|
53
|
-
{ originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 4 },
|
|
54
|
-
{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -4 },
|
|
55
|
-
],
|
|
56
|
-
/** Sağda, tetikleyicinin ÜSTÜYLE hizalı (ortalanmış DEĞİL) — Sidebar daraltılmış nav satırının flyout'u gibi çok satırlı panellerde `right`in dikey ortalaması paneli beklenmedik yönde kaydırır. */
|
|
57
|
-
'right-start': [
|
|
58
|
-
{ originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 8 },
|
|
59
|
-
{ originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -8 },
|
|
60
|
-
],
|
|
61
|
-
};
|
|
62
20
|
/**
|
|
63
21
|
* `<button cdkOverlayOrigin #trigger="cdkOverlayOrigin" (click)="open.set(true)">...</button>`
|
|
64
22
|
* `<mf-popover [origin]="trigger" [(open)]="open">...içerik (ng-content)...</mf-popover>`
|
|
@@ -98,7 +56,7 @@ class Popover {
|
|
|
98
56
|
* yazabilir — ör. `Select`'in bir seçenek tıklamasında `this.open.set(false)`
|
|
99
57
|
* çağırması). `attached()` ise CDK'ya bağlanan GERÇEK durum: `open()`
|
|
100
58
|
* `false`'a düştüğünde panel ANINDA kaldırılmaz, `closing` işaretlenip
|
|
101
|
-
* `animate-overlay-out` oynatılır, `
|
|
59
|
+
* `animate-overlay-out` oynatılır, `exitDurationMs()` sonra `attached` da `false`
|
|
102
60
|
* olur. Bu ikili, `DialogService.open()`'daki `closePredicate` gecikmesiyle
|
|
103
61
|
* AYNI doktrini CDK Overlay tarafında uyguluyor (CDK'nın `cdkConnectedOverlay`'i
|
|
104
62
|
* Dialog'un aksine bir "kapanışı ertele" kancası SUNMUYOR, bu yüzden
|
|
@@ -109,7 +67,10 @@ class Popover {
|
|
|
109
67
|
closing = signal(false, /* @ts-ignore */
|
|
110
68
|
...(ngDevMode ? [{ debugName: "closing" }] : /* istanbul ignore next */ []));
|
|
111
69
|
exitTimer;
|
|
112
|
-
positions = computed(() =>
|
|
70
|
+
positions = computed(() => {
|
|
71
|
+
const placement = this.placement();
|
|
72
|
+
return overlayPositions(placement, placement === 'right-start' ? 8 : 4);
|
|
73
|
+
}, /* @ts-ignore */
|
|
113
74
|
...(ngDevMode ? [{ debugName: "positions" }] : /* istanbul ignore next */ []));
|
|
114
75
|
classes = computed(() => cn(popoverPanelVariants({ padding: this.padding() }), this.closing() ? 'animate-overlay-out' : 'animate-overlay-in', this.panelClass()), /* @ts-ignore */
|
|
115
76
|
...(ngDevMode ? [{ debugName: "classes" }] : /* istanbul ignore next */ []));
|
|
@@ -125,9 +86,8 @@ class Popover {
|
|
|
125
86
|
untracked(() => {
|
|
126
87
|
if (!this.attached())
|
|
127
88
|
return;
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
if (reducedMotion) {
|
|
89
|
+
const exitMs = exitDurationMs();
|
|
90
|
+
if (exitMs === 0) {
|
|
131
91
|
this.attached.set(false);
|
|
132
92
|
return;
|
|
133
93
|
}
|
|
@@ -135,7 +95,7 @@ class Popover {
|
|
|
135
95
|
this.exitTimer = setTimeout(() => {
|
|
136
96
|
this.attached.set(false);
|
|
137
97
|
this.closing.set(false);
|
|
138
|
-
},
|
|
98
|
+
}, exitMs);
|
|
139
99
|
});
|
|
140
100
|
});
|
|
141
101
|
}
|
|
@@ -143,8 +103,8 @@ class Popover {
|
|
|
143
103
|
this.open.set(false);
|
|
144
104
|
this.closed.emit();
|
|
145
105
|
}
|
|
146
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.
|
|
147
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.
|
|
106
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Popover, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
107
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.7", type: Popover, isStandalone: true, selector: "mf-popover", inputs: { origin: { classPropertyName: "origin", publicName: "origin", isSignal: true, isRequired: true, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, matchTriggerWidth: { classPropertyName: "matchTriggerWidth", publicName: "matchTriggerWidth", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", closed: "closed" }, host: { classAttribute: "contents" }, exportAs: ["mfPopover"], ngImport: i0, template: `
|
|
148
108
|
<ng-template
|
|
149
109
|
cdkConnectedOverlay
|
|
150
110
|
[cdkConnectedOverlayOrigin]="origin()"
|
|
@@ -170,7 +130,7 @@ class Popover {
|
|
|
170
130
|
</ng-template>
|
|
171
131
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }] });
|
|
172
132
|
}
|
|
173
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Popover, decorators: [{
|
|
174
134
|
type: Component,
|
|
175
135
|
args: [{
|
|
176
136
|
selector: 'mf-popover',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-popover.mjs","sources":["../../../projects/ui-kit/popover/popover.variants.ts","../../../projects/ui-kit/popover/popover.ts","../../../projects/ui-kit/popover/mesgflow-ui-kit-popover.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const popoverPanelVariants = cva(\r\n 'overflow-auto rounded-lg border border-hairline bg-overlay shadow-2',\r\n {\r\n variants: {\r\n padding: {\r\n none: 'p-0',\r\n sm: 'p-1',\r\n md: 'p-2',\r\n lg: 'p-3',\r\n },\r\n },\r\n defaultVariants: { padding: 'sm' },\r\n },\r\n);\r\n\r\nexport type PopoverPadding = VariantProps<typeof popoverPanelVariants>['padding'];\r\n","import { CdkOverlayOrigin, OverlayModule, type ConnectedPosition } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { cn } from '@mesgflow/ui-kit/core';\r\nimport { popoverPanelVariants, type PopoverPadding } from './popover.variants';\r\n\r\nexport type PopoverPlacement =\r\n | 'bottom-start'\r\n | 'bottom-end'\r\n | 'top-start'\r\n | 'top-end'\r\n | 'top'\r\n | 'bottom'\r\n | 'left'\r\n | 'right'\r\n | 'right-start';\r\n\r\n/** `--duration-fast` (tokens/motion.css) ile birebir — `animate-overlay-out`un süresi. */\r\nconst EXIT_MS = 120;\r\n\r\nconst PLACEMENTS: Record<PopoverPlacement, ConnectedPosition[]> = {\r\n 'bottom-start': [\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\r\n ],\r\n 'bottom-end': [\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\r\n ],\r\n 'top-start': [\r\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 },\r\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\r\n ],\r\n 'top-end': [\r\n { originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -4 },\r\n { originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: 4 },\r\n ],\r\n /** Ortalanmış dört yön — köşe hizalı değişkenlerin aksine tetikleyicinin TAM ortasına hizalanır (ör. Tooltip'in gelecekteki Popover geçişi için, bkz. plan Faz 1c). */\r\n top: [\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -4 },\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 },\r\n ],\r\n bottom: [\r\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 4 },\r\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -4 },\r\n ],\r\n left: [\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -4 },\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 4 },\r\n ],\r\n right: [\r\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 4 },\r\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -4 },\r\n ],\r\n /** Sağda, tetikleyicinin ÜSTÜYLE hizalı (ortalanmış DEĞİL) — Sidebar daraltılmış nav satırının flyout'u gibi çok satırlı panellerde `right`in dikey ortalaması paneli beklenmedik yönde kaydırır. */\r\n 'right-start': [\r\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 8 },\r\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -8 },\r\n ],\r\n};\r\n\r\n/**\r\n * `<button cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" (click)=\"open.set(true)\">...</button>`\r\n * `<mf-popover [origin]=\"trigger\" [(open)]=\"open\">...içerik (ng-content)...</mf-popover>`\r\n *\r\n * `Select`/`TableColumnsMenu`/`TableFilterMenu`/`DatePicker`'ın HER BİRİNİN\r\n * ayrı ayrı yazdığı `cdkConnectedOverlay` + pozisyon dizisi + backdrop/ESC\r\n * kapama iskeletini TEK yerde toplayan genel amaçlı panel primitifi (bkz.\r\n * README \"Yeni bir primitif gerektiğinde\"). YENİ kullanım noktaları bunu\r\n * kullanmalı — mevcut dört bileşenin buna taşınması BİLEREK bu değişiklikle\r\n * birlikte yapılmadı: her biri kendi klavye/vurgu (highlight) mantığını\r\n * Popover'ın panel içeriğiyle nasıl kompoze edeceğine karar vermeli, ayrı ve\r\n * her ekranın tarayıcıda tek tek doğrulanmasını gerektiren bir iş.\r\n *\r\n * `origin`, CDK'nın `cdkOverlayOrigin` directive'inin `exportAs` referansı —\r\n * ayrı bir wrapper directive'e gerek yok, CDK zaten sağlıyor.\r\n */\r\n@Component({\r\n selector: 'mf-popover',\r\n exportAs: 'mfPopover',\r\n imports: [OverlayModule],\r\n host: { class: 'contents' },\r\n template: `\r\n <ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"origin()\"\r\n [cdkConnectedOverlayOpen]=\"attached()\"\r\n [cdkConnectedOverlayPositions]=\"positions()\"\r\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop()\"\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n [cdkConnectedOverlayMinWidth]=\"\r\n matchTriggerWidth() ? origin().elementRef.nativeElement.offsetWidth : null\r\n \"\r\n (backdropClick)=\"close()\"\r\n (detach)=\"close()\"\r\n >\r\n <!--\r\n Panel sarmalayıcısı BİLEREK odaklanabilir değil — Escape'i içindeki\r\n odaklanmış elemandan yukarı taşıyan bir olay-delegasyon kapsayıcısı,\r\n kendisi bir etkileşim hedefi değil.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <div [class]=\"classes()\" (keydown.escape)=\"close()\">\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n `,\r\n})\r\nexport class Popover {\r\n readonly origin = input.required<CdkOverlayOrigin>();\r\n readonly open = model(false);\r\n readonly placement = input<PopoverPlacement>('bottom-start');\r\n readonly padding = input<PopoverPadding>('sm');\r\n /** Backdrop şeffaf ama TIKLANABİLİR — dışarı tıklayınca kapanması için var, görsel karartma YOK. */\r\n readonly hasBackdrop = input(true);\r\n /** `true` ise panel tetikleyiciden DAR olamaz (min-width) — genişleyebilir, küçülemez. */\r\n readonly matchTriggerWidth = input(false);\r\n readonly panelClass = input('');\r\n\r\n readonly closed = output<void>();\r\n\r\n /**\r\n * `open()` MANTIKSAL durumu taşır (tüketici `[(open)]` ile doğrudan\r\n * yazabilir — ör. `Select`'in bir seçenek tıklamasında `this.open.set(false)`\r\n * çağırması). `attached()` ise CDK'ya bağlanan GERÇEK durum: `open()`\r\n * `false`'a düştüğünde panel ANINDA kaldırılmaz, `closing` işaretlenip\r\n * `animate-overlay-out` oynatılır, `EXIT_MS` sonra `attached` da `false`\r\n * olur. Bu ikili, `DialogService.open()`'daki `closePredicate` gecikmesiyle\r\n * AYNI doktrini CDK Overlay tarafında uyguluyor (CDK'nın `cdkConnectedOverlay`'i\r\n * Dialog'un aksine bir \"kapanışı ertele\" kancası SUNMUYOR, bu yüzden\r\n * `effect()` tabanlı bu yaklaşım gerekiyor).\r\n */\r\n protected readonly attached = signal(false);\r\n protected readonly closing = signal(false);\r\n private exitTimer?: ReturnType<typeof setTimeout>;\r\n\r\n protected readonly positions = computed(() => PLACEMENTS[this.placement()]);\r\n protected readonly classes = computed(() =>\r\n cn(\r\n popoverPanelVariants({ padding: this.padding() }),\r\n this.closing() ? 'animate-overlay-out' : 'animate-overlay-in',\r\n this.panelClass(),\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const shouldBeOpen = this.open();\r\n clearTimeout(this.exitTimer);\r\n\r\n if (shouldBeOpen) {\r\n this.closing.set(false);\r\n this.attached.set(true);\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n if (!this.attached()) return;\r\n\r\n const reducedMotion =\r\n typeof matchMedia !== 'undefined' &&\r\n matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n if (reducedMotion) {\r\n this.attached.set(false);\r\n return;\r\n }\r\n\r\n this.closing.set(true);\r\n this.exitTimer = setTimeout(() => {\r\n this.attached.set(false);\r\n this.closing.set(false);\r\n }, EXIT_MS);\r\n });\r\n });\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.closed.emit();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-popover.mjs","sources":["../../../projects/ui-kit/popover/popover.variants.ts","../../../projects/ui-kit/popover/popover.ts","../../../projects/ui-kit/popover/mesgflow-ui-kit-popover.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const popoverPanelVariants = cva(\r\n 'overflow-auto rounded-lg border border-hairline bg-overlay shadow-2',\r\n {\r\n variants: {\r\n padding: {\r\n none: 'p-0',\r\n sm: 'p-1',\r\n md: 'p-2',\r\n lg: 'p-3',\r\n },\r\n },\r\n defaultVariants: { padding: 'sm' },\r\n },\r\n);\r\n\r\nexport type PopoverPadding = VariantProps<typeof popoverPanelVariants>['padding'];\r\n","import { CdkOverlayOrigin, OverlayModule } from '@angular/cdk/overlay';\r\nimport {\r\n Component,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { cn, exitDurationMs, overlayPositions, type MfPlacement } from '@mesgflow/ui-kit/core';\r\nimport { popoverPanelVariants, type PopoverPadding } from './popover.variants';\r\n\r\n/**\r\n * Tüm `MfPlacement` değerleri — `left`/`right` MANTIKSAL (RTL'de çevrilir).\r\n * `right-start`: tetikleyicinin ÜSTÜYLE hizalı (Sidebar daraltılmış nav\r\n * flyout'u gibi çok satırlı panellerde `right`in dikey ortalaması paneli\r\n * beklenmedik yönde kaydırır), 8px boşlukla.\r\n */\r\nexport type PopoverPlacement = MfPlacement;\r\n\r\n/**\r\n * `<button cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" (click)=\"open.set(true)\">...</button>`\r\n * `<mf-popover [origin]=\"trigger\" [(open)]=\"open\">...içerik (ng-content)...</mf-popover>`\r\n *\r\n * `Select`/`TableColumnsMenu`/`TableFilterMenu`/`DatePicker`'ın HER BİRİNİN\r\n * ayrı ayrı yazdığı `cdkConnectedOverlay` + pozisyon dizisi + backdrop/ESC\r\n * kapama iskeletini TEK yerde toplayan genel amaçlı panel primitifi (bkz.\r\n * README \"Yeni bir primitif gerektiğinde\"). YENİ kullanım noktaları bunu\r\n * kullanmalı — mevcut dört bileşenin buna taşınması BİLEREK bu değişiklikle\r\n * birlikte yapılmadı: her biri kendi klavye/vurgu (highlight) mantığını\r\n * Popover'ın panel içeriğiyle nasıl kompoze edeceğine karar vermeli, ayrı ve\r\n * her ekranın tarayıcıda tek tek doğrulanmasını gerektiren bir iş.\r\n *\r\n * `origin`, CDK'nın `cdkOverlayOrigin` directive'inin `exportAs` referansı —\r\n * ayrı bir wrapper directive'e gerek yok, CDK zaten sağlıyor.\r\n */\r\n@Component({\r\n selector: 'mf-popover',\r\n exportAs: 'mfPopover',\r\n imports: [OverlayModule],\r\n host: { class: 'contents' },\r\n template: `\r\n <ng-template\r\n cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"origin()\"\r\n [cdkConnectedOverlayOpen]=\"attached()\"\r\n [cdkConnectedOverlayPositions]=\"positions()\"\r\n [cdkConnectedOverlayHasBackdrop]=\"hasBackdrop()\"\r\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\r\n [cdkConnectedOverlayMinWidth]=\"\r\n matchTriggerWidth() ? origin().elementRef.nativeElement.offsetWidth : null\r\n \"\r\n (backdropClick)=\"close()\"\r\n (detach)=\"close()\"\r\n >\r\n <!--\r\n Panel sarmalayıcısı BİLEREK odaklanabilir değil — Escape'i içindeki\r\n odaklanmış elemandan yukarı taşıyan bir olay-delegasyon kapsayıcısı,\r\n kendisi bir etkileşim hedefi değil.\r\n -->\r\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\r\n <div [class]=\"classes()\" (keydown.escape)=\"close()\">\r\n <ng-content />\r\n </div>\r\n </ng-template>\r\n `,\r\n})\r\nexport class Popover {\r\n readonly origin = input.required<CdkOverlayOrigin>();\r\n readonly open = model(false);\r\n readonly placement = input<PopoverPlacement>('bottom-start');\r\n readonly padding = input<PopoverPadding>('sm');\r\n /** Backdrop şeffaf ama TIKLANABİLİR — dışarı tıklayınca kapanması için var, görsel karartma YOK. */\r\n readonly hasBackdrop = input(true);\r\n /** `true` ise panel tetikleyiciden DAR olamaz (min-width) — genişleyebilir, küçülemez. */\r\n readonly matchTriggerWidth = input(false);\r\n readonly panelClass = input('');\r\n\r\n readonly closed = output<void>();\r\n\r\n /**\r\n * `open()` MANTIKSAL durumu taşır (tüketici `[(open)]` ile doğrudan\r\n * yazabilir — ör. `Select`'in bir seçenek tıklamasında `this.open.set(false)`\r\n * çağırması). `attached()` ise CDK'ya bağlanan GERÇEK durum: `open()`\r\n * `false`'a düştüğünde panel ANINDA kaldırılmaz, `closing` işaretlenip\r\n * `animate-overlay-out` oynatılır, `exitDurationMs()` sonra `attached` da `false`\r\n * olur. Bu ikili, `DialogService.open()`'daki `closePredicate` gecikmesiyle\r\n * AYNI doktrini CDK Overlay tarafında uyguluyor (CDK'nın `cdkConnectedOverlay`'i\r\n * Dialog'un aksine bir \"kapanışı ertele\" kancası SUNMUYOR, bu yüzden\r\n * `effect()` tabanlı bu yaklaşım gerekiyor).\r\n */\r\n protected readonly attached = signal(false);\r\n protected readonly closing = signal(false);\r\n private exitTimer?: ReturnType<typeof setTimeout>;\r\n\r\n protected readonly positions = computed(() => {\r\n const placement = this.placement();\r\n return overlayPositions(placement, placement === 'right-start' ? 8 : 4);\r\n });\r\n protected readonly classes = computed(() =>\r\n cn(\r\n popoverPanelVariants({ padding: this.padding() }),\r\n this.closing() ? 'animate-overlay-out' : 'animate-overlay-in',\r\n this.panelClass(),\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const shouldBeOpen = this.open();\r\n clearTimeout(this.exitTimer);\r\n\r\n if (shouldBeOpen) {\r\n this.closing.set(false);\r\n this.attached.set(true);\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n if (!this.attached()) return;\r\n\r\n const exitMs = exitDurationMs();\r\n if (exitMs === 0) {\r\n this.attached.set(false);\r\n return;\r\n }\r\n\r\n this.closing.set(true);\r\n this.exitTimer = setTimeout(() => {\r\n this.attached.set(false);\r\n this.closing.set(false);\r\n }, exitMs);\r\n });\r\n });\r\n }\r\n\r\n protected close(): void {\r\n this.open.set(false);\r\n this.closed.emit();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, inject, computed, Component } from '@angular/core';
|
|
2
|
+
import { input, booleanAttribute, inject, computed, Component } from '@angular/core';
|
|
3
3
|
import { MF_PROGRESS_LABELS, cn } from '@mesgflow/ui-kit/core';
|
|
4
4
|
import { cva } from 'class-variance-authority';
|
|
5
5
|
|
|
@@ -8,48 +8,144 @@ const progressTrackVariants = cva('relative block w-full overflow-hidden rounded
|
|
|
8
8
|
size: {
|
|
9
9
|
sm: 'h-1',
|
|
10
10
|
md: 'h-1.5',
|
|
11
|
+
lg: 'h-2.5',
|
|
11
12
|
},
|
|
12
13
|
},
|
|
13
14
|
defaultVariants: { size: 'md' },
|
|
14
15
|
});
|
|
15
16
|
|
|
17
|
+
/** Halka çapı (px) ve çizgi kalınlığı — boyut ekseni doğrusal çubuğun kalınlığıyla eşleşir. */
|
|
18
|
+
const RING = {
|
|
19
|
+
sm: { size: 32, stroke: 3 },
|
|
20
|
+
md: { size: 48, stroke: 4 },
|
|
21
|
+
lg: { size: 72, stroke: 6 },
|
|
22
|
+
};
|
|
23
|
+
const RING_TONE = {
|
|
24
|
+
primary: 'text-accent',
|
|
25
|
+
success: 'text-success',
|
|
26
|
+
warning: 'text-warning',
|
|
27
|
+
danger: 'text-danger',
|
|
28
|
+
info: 'text-info',
|
|
29
|
+
help: 'text-help',
|
|
30
|
+
};
|
|
31
|
+
const BAR_TONE = {
|
|
32
|
+
primary: 'bg-accent-fill',
|
|
33
|
+
success: 'bg-success-fill',
|
|
34
|
+
warning: 'bg-warning-fill',
|
|
35
|
+
danger: 'bg-danger-fill',
|
|
36
|
+
info: 'bg-info-fill',
|
|
37
|
+
help: 'bg-help-fill',
|
|
38
|
+
};
|
|
16
39
|
/**
|
|
17
|
-
* `<mf-progress [value]="42" />`
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
40
|
+
* `<mf-progress [value]="42" />` · `<mf-progress indeterminate />` ·
|
|
41
|
+
* `<mf-progress variant="ring" [value]="72" showValue />`
|
|
42
|
+
*
|
|
43
|
+
* - `linear` (varsayılan): ince çubuk; belirsiz modda kayan şerit
|
|
44
|
+
* (`animate-progress-slide`, Table'ın yenileme göstergesiyle aynı).
|
|
45
|
+
* - `ring`: dairesel gösterge — `stroke-dashoffset` geçişiyle akıcı dolar,
|
|
46
|
+
* belirsiz modda döner (`animate-spin-slow`). `showValue` ortada yüzdeyi yazar.
|
|
47
|
+
* - `tone`: dolgu rengi (kota uyarısı, hata vb.).
|
|
48
|
+
*
|
|
49
|
+
* `role="progressbar"` + `aria-valuenow` (belirsizde yazılmaz) host'ta.
|
|
22
50
|
*/
|
|
23
51
|
class Progress {
|
|
24
52
|
value = input(0, /* @ts-ignore */
|
|
25
53
|
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
26
|
-
indeterminate = input(false, /*
|
|
27
|
-
...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
54
|
+
indeterminate = input(false, { ...(ngDevMode ? { debugName: "indeterminate" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
28
55
|
size = input('md', /* @ts-ignore */
|
|
29
56
|
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
30
|
-
|
|
57
|
+
variant = input('linear', /* @ts-ignore */
|
|
58
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
59
|
+
tone = input('primary', /* @ts-ignore */
|
|
60
|
+
...(ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []));
|
|
61
|
+
/** Yalnızca `ring`: ortada yüzde metni. */
|
|
62
|
+
showValue = input(false, { ...(ngDevMode ? { debugName: "showValue" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
63
|
+
/** `role="progressbar"` için erişilebilir ad — verilmezse `MF_PROGRESS_LABELS`. */
|
|
31
64
|
ariaLabel = input(/* @ts-ignore */
|
|
32
65
|
...(ngDevMode ? [undefined, { debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
33
66
|
progressLabels = inject(MF_PROGRESS_LABELS);
|
|
34
67
|
effectiveAriaLabel = computed(() => this.ariaLabel() ?? this.progressLabels().ariaLabel, /* @ts-ignore */
|
|
35
68
|
...(ngDevMode ? [{ debugName: "effectiveAriaLabel" }] : /* istanbul ignore next */ []));
|
|
36
|
-
clampedValue = computed(() => Math.min(100, Math.max(0, this.value())), /* @ts-ignore */
|
|
69
|
+
clampedValue = computed(() => Math.round(Math.min(100, Math.max(0, this.value()))), /* @ts-ignore */
|
|
37
70
|
...(ngDevMode ? [{ debugName: "clampedValue" }] : /* istanbul ignore next */ []));
|
|
38
|
-
|
|
39
|
-
...(ngDevMode ? [{ debugName: "
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
71
|
+
ring = computed(() => RING[this.size() ?? 'md'], /* @ts-ignore */
|
|
72
|
+
...(ngDevMode ? [{ debugName: "ring" }] : /* istanbul ignore next */ []));
|
|
73
|
+
radius = computed(() => (this.ring().size - this.ring().stroke) / 2, /* @ts-ignore */
|
|
74
|
+
...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
|
|
75
|
+
circumference = computed(() => 2 * Math.PI * this.radius(), /* @ts-ignore */
|
|
76
|
+
...(ngDevMode ? [{ debugName: "circumference" }] : /* istanbul ignore next */ []));
|
|
77
|
+
dashOffset = computed(() => {
|
|
78
|
+
// Belirsiz halka: çeyrek yay döner.
|
|
79
|
+
const filled = this.indeterminate() ? 25 : this.clampedValue();
|
|
80
|
+
return this.circumference() * (1 - filled / 100);
|
|
81
|
+
}, /* @ts-ignore */
|
|
82
|
+
...(ngDevMode ? [{ debugName: "dashOffset" }] : /* istanbul ignore next */ []));
|
|
83
|
+
ringToneClass = computed(() => RING_TONE[this.tone()], /* @ts-ignore */
|
|
84
|
+
...(ngDevMode ? [{ debugName: "ringToneClass" }] : /* istanbul ignore next */ []));
|
|
85
|
+
barToneClass = computed(() => BAR_TONE[this.tone()], /* @ts-ignore */
|
|
86
|
+
...(ngDevMode ? [{ debugName: "barToneClass" }] : /* istanbul ignore next */ []));
|
|
87
|
+
hostClasses = computed(() => this.variant() === 'ring'
|
|
88
|
+
? cn('relative inline-flex shrink-0 items-center justify-center')
|
|
89
|
+
: cn(progressTrackVariants({ size: this.size() })), /* @ts-ignore */
|
|
90
|
+
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
91
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Progress, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
92
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: Progress, isStandalone: true, selector: "mf-progress", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null }, showValue: { classPropertyName: "showValue", publicName: "showValue", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar" }, properties: { "attr.aria-valuenow": "indeterminate() ? null : clampedValue()", "attr.aria-valuemin": "0", "attr.aria-valuemax": "100", "attr.aria-label": "effectiveAriaLabel()", "class": "hostClasses()" } }, ngImport: i0, template: `
|
|
93
|
+
@if (variant() === 'ring') {
|
|
94
|
+
<svg
|
|
95
|
+
[attr.width]="ring().size"
|
|
96
|
+
[attr.height]="ring().size"
|
|
97
|
+
[attr.viewBox]="'0 0 ' + ring().size + ' ' + ring().size"
|
|
98
|
+
class="-rotate-90 rtl:scale-x-[-1]"
|
|
99
|
+
[class]="ringToneClass()"
|
|
100
|
+
[class.animate-spin-slow]="indeterminate()"
|
|
101
|
+
aria-hidden="true"
|
|
102
|
+
>
|
|
103
|
+
<circle
|
|
104
|
+
[attr.cx]="ring().size / 2"
|
|
105
|
+
[attr.cy]="ring().size / 2"
|
|
106
|
+
[attr.r]="radius()"
|
|
107
|
+
fill="none"
|
|
108
|
+
stroke="currentColor"
|
|
109
|
+
stroke-opacity="0.15"
|
|
110
|
+
[attr.stroke-width]="ring().stroke"
|
|
111
|
+
/>
|
|
112
|
+
<circle
|
|
113
|
+
[attr.cx]="ring().size / 2"
|
|
114
|
+
[attr.cy]="ring().size / 2"
|
|
115
|
+
[attr.r]="radius()"
|
|
116
|
+
fill="none"
|
|
117
|
+
stroke="currentColor"
|
|
118
|
+
stroke-linecap="round"
|
|
119
|
+
[attr.stroke-width]="ring().stroke"
|
|
120
|
+
[attr.stroke-dasharray]="circumference()"
|
|
121
|
+
[attr.stroke-dashoffset]="dashOffset()"
|
|
122
|
+
class="transition-[stroke-dashoffset] duration-slow ease-emphasis"
|
|
123
|
+
/>
|
|
124
|
+
</svg>
|
|
125
|
+
@if (showValue() && !indeterminate()) {
|
|
126
|
+
<span
|
|
127
|
+
class="absolute inset-0 flex items-center justify-center font-medium text-fg tabular-nums"
|
|
128
|
+
[class]="size() === 'lg' ? 'text-base' : 'text-[0.6875rem]'"
|
|
129
|
+
aria-hidden="true"
|
|
130
|
+
>{{ clampedValue() }}%</span
|
|
131
|
+
>
|
|
132
|
+
}
|
|
133
|
+
} @else if (indeterminate()) {
|
|
134
|
+
<div
|
|
135
|
+
class="h-full w-1/3 animate-progress-slide"
|
|
136
|
+
[class]="barToneClass()"
|
|
137
|
+
aria-hidden="true"
|
|
138
|
+
></div>
|
|
44
139
|
} @else {
|
|
45
140
|
<div
|
|
46
|
-
class="h-full rounded-full
|
|
141
|
+
class="h-full rounded-full transition-[width] duration-slow ease-emphasis"
|
|
142
|
+
[class]="barToneClass()"
|
|
47
143
|
[style.width.%]="clampedValue()"
|
|
48
144
|
></div>
|
|
49
145
|
}
|
|
50
146
|
`, isInline: true });
|
|
51
147
|
}
|
|
52
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.
|
|
148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: Progress, decorators: [{
|
|
53
149
|
type: Component,
|
|
54
150
|
args: [{
|
|
55
151
|
selector: 'mf-progress',
|
|
@@ -59,20 +155,65 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
59
155
|
'[attr.aria-valuemin]': '0',
|
|
60
156
|
'[attr.aria-valuemax]': '100',
|
|
61
157
|
'[attr.aria-label]': 'effectiveAriaLabel()',
|
|
62
|
-
'[class]': '
|
|
158
|
+
'[class]': 'hostClasses()',
|
|
63
159
|
},
|
|
64
160
|
template: `
|
|
65
|
-
@if (
|
|
66
|
-
<
|
|
161
|
+
@if (variant() === 'ring') {
|
|
162
|
+
<svg
|
|
163
|
+
[attr.width]="ring().size"
|
|
164
|
+
[attr.height]="ring().size"
|
|
165
|
+
[attr.viewBox]="'0 0 ' + ring().size + ' ' + ring().size"
|
|
166
|
+
class="-rotate-90 rtl:scale-x-[-1]"
|
|
167
|
+
[class]="ringToneClass()"
|
|
168
|
+
[class.animate-spin-slow]="indeterminate()"
|
|
169
|
+
aria-hidden="true"
|
|
170
|
+
>
|
|
171
|
+
<circle
|
|
172
|
+
[attr.cx]="ring().size / 2"
|
|
173
|
+
[attr.cy]="ring().size / 2"
|
|
174
|
+
[attr.r]="radius()"
|
|
175
|
+
fill="none"
|
|
176
|
+
stroke="currentColor"
|
|
177
|
+
stroke-opacity="0.15"
|
|
178
|
+
[attr.stroke-width]="ring().stroke"
|
|
179
|
+
/>
|
|
180
|
+
<circle
|
|
181
|
+
[attr.cx]="ring().size / 2"
|
|
182
|
+
[attr.cy]="ring().size / 2"
|
|
183
|
+
[attr.r]="radius()"
|
|
184
|
+
fill="none"
|
|
185
|
+
stroke="currentColor"
|
|
186
|
+
stroke-linecap="round"
|
|
187
|
+
[attr.stroke-width]="ring().stroke"
|
|
188
|
+
[attr.stroke-dasharray]="circumference()"
|
|
189
|
+
[attr.stroke-dashoffset]="dashOffset()"
|
|
190
|
+
class="transition-[stroke-dashoffset] duration-slow ease-emphasis"
|
|
191
|
+
/>
|
|
192
|
+
</svg>
|
|
193
|
+
@if (showValue() && !indeterminate()) {
|
|
194
|
+
<span
|
|
195
|
+
class="absolute inset-0 flex items-center justify-center font-medium text-fg tabular-nums"
|
|
196
|
+
[class]="size() === 'lg' ? 'text-base' : 'text-[0.6875rem]'"
|
|
197
|
+
aria-hidden="true"
|
|
198
|
+
>{{ clampedValue() }}%</span
|
|
199
|
+
>
|
|
200
|
+
}
|
|
201
|
+
} @else if (indeterminate()) {
|
|
202
|
+
<div
|
|
203
|
+
class="h-full w-1/3 animate-progress-slide"
|
|
204
|
+
[class]="barToneClass()"
|
|
205
|
+
aria-hidden="true"
|
|
206
|
+
></div>
|
|
67
207
|
} @else {
|
|
68
208
|
<div
|
|
69
|
-
class="h-full rounded-full
|
|
209
|
+
class="h-full rounded-full transition-[width] duration-slow ease-emphasis"
|
|
210
|
+
[class]="barToneClass()"
|
|
70
211
|
[style.width.%]="clampedValue()"
|
|
71
212
|
></div>
|
|
72
213
|
}
|
|
73
214
|
`,
|
|
74
215
|
}]
|
|
75
|
-
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
|
|
216
|
+
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], tone: [{ type: i0.Input, args: [{ isSignal: true, alias: "tone", required: false }] }], showValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "showValue", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }] } });
|
|
76
217
|
|
|
77
218
|
/**
|
|
78
219
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesgflow-ui-kit-progress.mjs","sources":["../../../projects/ui-kit/progress/progress.variants.ts","../../../projects/ui-kit/progress/progress.ts","../../../projects/ui-kit/progress/mesgflow-ui-kit-progress.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const progressTrackVariants = cva(\r\n 'relative block w-full overflow-hidden rounded-full bg-primary-tint',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'h-1',\r\n md: 'h-1.5',\r\n },\r\n },\r\n defaultVariants: { size: 'md' },\r\n },\r\n);\r\n\r\nexport type ProgressSize = VariantProps<typeof progressTrackVariants>['size'];\r\n","import { Component, computed, inject, input } from '@angular/core';\r\nimport { cn, MF_PROGRESS_LABELS } from '@mesgflow/ui-kit/core';\r\nimport { progressTrackVariants, type ProgressSize } from './progress.variants';\r\n\r\n/**\r\n * `<mf-progress [value]=\"42\" />` (belirlenmiş) veya `<mf-progress\r\n * indeterminate />` (belirsiz — yükleme/tarama gibi süresi bilinmeyen\r\n * işlemler). `animate-progress-slide` keyframe'i `Table`'ın `showStaleOverlay`\r\n * şeridiyle AYNI (tokens.css'te tek tanım, bkz. table.html) — iki yerde ayrı\r\n * ayrı animasyon TANIMLANMADI.\r\n */\r\n@Component({\r\n selector: 'mf-progress',\r\n host: {\r\n role: 'progressbar',\r\n '[attr.aria-valuenow]': 'indeterminate() ? null : clampedValue()',\r\n '[attr.aria-valuemin]': '0',\r\n '[attr.aria-valuemax]': '100',\r\n '[attr.aria-label]': 'effectiveAriaLabel()',\r\n '[class]': 'trackClasses()',\r\n },\r\n template: `\r\n @if (indeterminate()) {\r\n <div class=\"h-full w-1/3 animate-progress-slide bg-accent-fill\" aria-hidden=\"true\"></div>\r\n } @else {\r\n <div\r\n class=\"h-full rounded-full bg-accent-fill transition-[width] duration-base ease-out\"\r\n [style.width.%]=\"clampedValue()\"\r\n ></div>\r\n }\r\n `,\r\n})\r\nexport class Progress {\r\n readonly value = input(0);\r\n readonly indeterminate = input(false);\r\n readonly size = input<ProgressSize>('md');\r\n /** `role=\"progressbar\"` için ARIA gerektirdiği erişilebilir ad — bağlamına göre (ör. \"Loading\", \"File upload\") override edilmeli; verilmezse `MF_PROGRESS_LABELS`. */\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly progressLabels = inject(MF_PROGRESS_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.progressLabels().ariaLabel,\r\n );\r\n\r\n protected readonly clampedValue = computed(() => Math.min(100, Math.max(0, this.value())));\r\n protected readonly trackClasses = computed(() =>\r\n cn(progressTrackVariants({ size: this.size() })),\r\n );\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesgflow-ui-kit-progress.mjs","sources":["../../../projects/ui-kit/progress/progress.variants.ts","../../../projects/ui-kit/progress/progress.ts","../../../projects/ui-kit/progress/mesgflow-ui-kit-progress.ts"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\r\n\r\nexport const progressTrackVariants = cva(\r\n 'relative block w-full overflow-hidden rounded-full bg-primary-tint',\r\n {\r\n variants: {\r\n size: {\r\n sm: 'h-1',\r\n md: 'h-1.5',\r\n lg: 'h-2.5',\r\n },\r\n },\r\n defaultVariants: { size: 'md' },\r\n },\r\n);\r\n\r\nexport type ProgressSize = VariantProps<typeof progressTrackVariants>['size'];\r\n","import { Component, booleanAttribute, computed, inject, input } from '@angular/core';\r\nimport { cn, MF_PROGRESS_LABELS, type MfTone } from '@mesgflow/ui-kit/core';\r\nimport { progressTrackVariants, type ProgressSize } from './progress.variants';\r\n\r\nexport type ProgressVariant = 'linear' | 'ring';\r\nexport type ProgressTone = Exclude<MfTone, 'neutral'>;\r\n\r\n/** Halka çapı (px) ve çizgi kalınlığı — boyut ekseni doğrusal çubuğun kalınlığıyla eşleşir. */\r\nconst RING: Record<NonNullable<ProgressSize>, { size: number; stroke: number }> = {\r\n sm: { size: 32, stroke: 3 },\r\n md: { size: 48, stroke: 4 },\r\n lg: { size: 72, stroke: 6 },\r\n};\r\n\r\nconst RING_TONE: Record<ProgressTone, string> = {\r\n primary: 'text-accent',\r\n success: 'text-success',\r\n warning: 'text-warning',\r\n danger: 'text-danger',\r\n info: 'text-info',\r\n help: 'text-help',\r\n};\r\n\r\nconst BAR_TONE: Record<ProgressTone, string> = {\r\n primary: 'bg-accent-fill',\r\n success: 'bg-success-fill',\r\n warning: 'bg-warning-fill',\r\n danger: 'bg-danger-fill',\r\n info: 'bg-info-fill',\r\n help: 'bg-help-fill',\r\n};\r\n\r\n/**\r\n * `<mf-progress [value]=\"42\" />` · `<mf-progress indeterminate />` ·\r\n * `<mf-progress variant=\"ring\" [value]=\"72\" showValue />`\r\n *\r\n * - `linear` (varsayılan): ince çubuk; belirsiz modda kayan şerit\r\n * (`animate-progress-slide`, Table'ın yenileme göstergesiyle aynı).\r\n * - `ring`: dairesel gösterge — `stroke-dashoffset` geçişiyle akıcı dolar,\r\n * belirsiz modda döner (`animate-spin-slow`). `showValue` ortada yüzdeyi yazar.\r\n * - `tone`: dolgu rengi (kota uyarısı, hata vb.).\r\n *\r\n * `role=\"progressbar\"` + `aria-valuenow` (belirsizde yazılmaz) host'ta.\r\n */\r\n@Component({\r\n selector: 'mf-progress',\r\n host: {\r\n role: 'progressbar',\r\n '[attr.aria-valuenow]': 'indeterminate() ? null : clampedValue()',\r\n '[attr.aria-valuemin]': '0',\r\n '[attr.aria-valuemax]': '100',\r\n '[attr.aria-label]': 'effectiveAriaLabel()',\r\n '[class]': 'hostClasses()',\r\n },\r\n template: `\r\n @if (variant() === 'ring') {\r\n <svg\r\n [attr.width]=\"ring().size\"\r\n [attr.height]=\"ring().size\"\r\n [attr.viewBox]=\"'0 0 ' + ring().size + ' ' + ring().size\"\r\n class=\"-rotate-90 rtl:scale-x-[-1]\"\r\n [class]=\"ringToneClass()\"\r\n [class.animate-spin-slow]=\"indeterminate()\"\r\n aria-hidden=\"true\"\r\n >\r\n <circle\r\n [attr.cx]=\"ring().size / 2\"\r\n [attr.cy]=\"ring().size / 2\"\r\n [attr.r]=\"radius()\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-opacity=\"0.15\"\r\n [attr.stroke-width]=\"ring().stroke\"\r\n />\r\n <circle\r\n [attr.cx]=\"ring().size / 2\"\r\n [attr.cy]=\"ring().size / 2\"\r\n [attr.r]=\"radius()\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-linecap=\"round\"\r\n [attr.stroke-width]=\"ring().stroke\"\r\n [attr.stroke-dasharray]=\"circumference()\"\r\n [attr.stroke-dashoffset]=\"dashOffset()\"\r\n class=\"transition-[stroke-dashoffset] duration-slow ease-emphasis\"\r\n />\r\n </svg>\r\n @if (showValue() && !indeterminate()) {\r\n <span\r\n class=\"absolute inset-0 flex items-center justify-center font-medium text-fg tabular-nums\"\r\n [class]=\"size() === 'lg' ? 'text-base' : 'text-[0.6875rem]'\"\r\n aria-hidden=\"true\"\r\n >{{ clampedValue() }}%</span\r\n >\r\n }\r\n } @else if (indeterminate()) {\r\n <div\r\n class=\"h-full w-1/3 animate-progress-slide\"\r\n [class]=\"barToneClass()\"\r\n aria-hidden=\"true\"\r\n ></div>\r\n } @else {\r\n <div\r\n class=\"h-full rounded-full transition-[width] duration-slow ease-emphasis\"\r\n [class]=\"barToneClass()\"\r\n [style.width.%]=\"clampedValue()\"\r\n ></div>\r\n }\r\n `,\r\n})\r\nexport class Progress {\r\n readonly value = input(0);\r\n readonly indeterminate = input(false, { transform: booleanAttribute });\r\n readonly size = input<ProgressSize>('md');\r\n readonly variant = input<ProgressVariant>('linear');\r\n readonly tone = input<ProgressTone>('primary');\r\n /** Yalnızca `ring`: ortada yüzde metni. */\r\n readonly showValue = input(false, { transform: booleanAttribute });\r\n /** `role=\"progressbar\"` için erişilebilir ad — verilmezse `MF_PROGRESS_LABELS`. */\r\n readonly ariaLabel = input<string>();\r\n\r\n private readonly progressLabels = inject(MF_PROGRESS_LABELS);\r\n protected readonly effectiveAriaLabel = computed(\r\n () => this.ariaLabel() ?? this.progressLabels().ariaLabel,\r\n );\r\n\r\n protected readonly clampedValue = computed(() =>\r\n Math.round(Math.min(100, Math.max(0, this.value()))),\r\n );\r\n\r\n protected readonly ring = computed(() => RING[this.size() ?? 'md']);\r\n protected readonly radius = computed(() => (this.ring().size - this.ring().stroke) / 2);\r\n protected readonly circumference = computed(() => 2 * Math.PI * this.radius());\r\n protected readonly dashOffset = computed(() => {\r\n // Belirsiz halka: çeyrek yay döner.\r\n const filled = this.indeterminate() ? 25 : this.clampedValue();\r\n return this.circumference() * (1 - filled / 100);\r\n });\r\n\r\n protected readonly ringToneClass = computed(() => RING_TONE[this.tone()]);\r\n protected readonly barToneClass = computed(() => BAR_TONE[this.tone()]);\r\n\r\n protected readonly hostClasses = computed(() =>\r\n this.variant() === 'ring'\r\n ? cn('relative inline-flex shrink-0 items-center justify-center')\r\n : cn(progressTrackVariants({ size: this.size() })),\r\n );\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|