@yuuvis/material 2.18.0 → 2.19.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/badge/badge.component.d.ts +38 -5
- package/badge/index.d.ts +0 -1
- package/badge/model/badge.model.d.ts +1 -0
- package/fesm2022/yuuvis-material-badge.mjs +47 -13
- package/fesm2022/yuuvis-material-badge.mjs.map +1 -1
- package/fesm2022/yuuvis-material-panes.mjs +59 -26
- package/fesm2022/yuuvis-material-panes.mjs.map +1 -1
- package/fesm2022/yuuvis-material.mjs +9 -3
- package/fesm2022/yuuvis-material.mjs.map +1 -1
- package/lib/assets/i18n/ar.json +22 -0
- package/lib/directives/button/ymt-button.directive.d.ts +2 -3
- package/package.json +1 -1
- package/panes/lib/pane/pane-header/pane-header.component.d.ts +59 -26
|
@@ -1,14 +1,47 @@
|
|
|
1
|
+
import { Severity } from './model/badge.model';
|
|
1
2
|
import * as i0 from "@angular/core";
|
|
2
3
|
/**
|
|
3
4
|
* Badge component to display a label with different severity levels.
|
|
4
|
-
* From an accessibility perspective badges take care of sufficient color contrast. You may add
|
|
5
|
-
* additional aria attributes depending on how you use the badge in your application.
|
|
6
5
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* ### Severity
|
|
7
|
+
* Controls the color scheme via the `severity` input. Available values:
|
|
8
|
+
* - `neutral` (default) — uses surface container colors
|
|
9
|
+
* - `success` — green tones for positive/confirmed states
|
|
10
|
+
* - `danger` — red tones for errors or destructive indicators
|
|
11
|
+
* - `warning` — yellow/amber tones for caution states
|
|
12
|
+
* - `primary` — theme primary color for informational or branded badges
|
|
13
|
+
*
|
|
14
|
+
* ### Variants
|
|
15
|
+
* - **Filled** (default) — solid background with contrasting text color
|
|
16
|
+
* - **Outline** — transparent background with a colored border, enabled via the `outline` input
|
|
17
|
+
*
|
|
18
|
+
* ### Aura
|
|
19
|
+
* When `aura` is enabled, the badge renders a soft glowing box-shadow derived from its
|
|
20
|
+
* severity color. In filled mode the aura uses a stronger, fully saturated background;
|
|
21
|
+
* in outline mode it uses a subtle semi-transparent glow.
|
|
22
|
+
*
|
|
23
|
+
* ### Theming
|
|
24
|
+
* The component exposes CSS custom properties for fine-grained control:
|
|
25
|
+
* - `--ymt-badge-corner` — border radius (default: `--ymt-corner-full`)
|
|
26
|
+
* - `--ymt-badge-background` — fill color
|
|
27
|
+
* - `--ymt-badge-on-background` — text color
|
|
28
|
+
* - `--ymt-badge-outline-color` — border color in outline variant
|
|
29
|
+
* - `--ymt-badge-outline-text-color` — text color in outline variant
|
|
30
|
+
* - `--ymt-badge-aura-size` — aura spread radius (default: `3px`)
|
|
31
|
+
*
|
|
32
|
+
* ### Accessibility
|
|
33
|
+
* Color contrast is handled automatically for each severity/variant combination.
|
|
34
|
+
* Add additional ARIA attributes depending on how the badge is used in your application.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```html
|
|
38
|
+
* <ymt-badge severity="success">Approved</ymt-badge>
|
|
39
|
+
* <ymt-badge severity="danger" [outline]="true">Rejected</ymt-badge>
|
|
40
|
+
* <ymt-badge severity="warning" [aura]="true">Pending</ymt-badge>
|
|
41
|
+
* ```
|
|
9
42
|
*/
|
|
10
43
|
export declare class YmtBadge {
|
|
11
|
-
severity: import("@angular/core").InputSignal<
|
|
44
|
+
severity: import("@angular/core").InputSignal<Severity>;
|
|
12
45
|
outline: import("@angular/core").InputSignal<boolean>;
|
|
13
46
|
aura: import("@angular/core").InputSignal<boolean>;
|
|
14
47
|
static ɵfac: i0.ɵɵFactoryDeclaration<YmtBadge, never>;
|
package/badge/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Severity = 'success' | 'danger' | 'warning' | 'primary' | 'neutral';
|
|
@@ -1,36 +1,70 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, Component } from '@angular/core';
|
|
3
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { input, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Badge component to display a label with different severity levels.
|
|
7
|
-
* From an accessibility perspective badges take care of sufficient color contrast. You may add
|
|
8
|
-
* additional aria attributes depending on how you use the badge in your application.
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* ### Severity
|
|
9
|
+
* Controls the color scheme via the `severity` input. Available values:
|
|
10
|
+
* - `neutral` (default) — uses surface container colors
|
|
11
|
+
* - `success` — green tones for positive/confirmed states
|
|
12
|
+
* - `danger` — red tones for errors or destructive indicators
|
|
13
|
+
* - `warning` — yellow/amber tones for caution states
|
|
14
|
+
* - `primary` — theme primary color for informational or branded badges
|
|
15
|
+
*
|
|
16
|
+
* ### Variants
|
|
17
|
+
* - **Filled** (default) — solid background with contrasting text color
|
|
18
|
+
* - **Outline** — transparent background with a colored border, enabled via the `outline` input
|
|
19
|
+
*
|
|
20
|
+
* ### Aura
|
|
21
|
+
* When `aura` is enabled, the badge renders a soft glowing box-shadow derived from its
|
|
22
|
+
* severity color. In filled mode the aura uses a stronger, fully saturated background;
|
|
23
|
+
* in outline mode it uses a subtle semi-transparent glow.
|
|
24
|
+
*
|
|
25
|
+
* ### Theming
|
|
26
|
+
* The component exposes CSS custom properties for fine-grained control:
|
|
27
|
+
* - `--ymt-badge-corner` — border radius (default: `--ymt-corner-full`)
|
|
28
|
+
* - `--ymt-badge-background` — fill color
|
|
29
|
+
* - `--ymt-badge-on-background` — text color
|
|
30
|
+
* - `--ymt-badge-outline-color` — border color in outline variant
|
|
31
|
+
* - `--ymt-badge-outline-text-color` — text color in outline variant
|
|
32
|
+
* - `--ymt-badge-aura-size` — aura spread radius (default: `3px`)
|
|
33
|
+
*
|
|
34
|
+
* ### Accessibility
|
|
35
|
+
* Color contrast is handled automatically for each severity/variant combination.
|
|
36
|
+
* Add additional ARIA attributes depending on how the badge is used in your application.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```html
|
|
40
|
+
* <ymt-badge severity="success">Approved</ymt-badge>
|
|
41
|
+
* <ymt-badge severity="danger" [outline]="true">Rejected</ymt-badge>
|
|
42
|
+
* <ymt-badge severity="warning" [aura]="true">Pending</ymt-badge>
|
|
43
|
+
* ```
|
|
12
44
|
*/
|
|
13
45
|
class YmtBadge {
|
|
14
46
|
severity = input('neutral');
|
|
15
47
|
outline = input(false);
|
|
16
48
|
aura = input(false);
|
|
17
49
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: YmtBadge, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
18
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.20", type: YmtBadge, isStandalone: true, selector: "ymt-badge", inputs: { severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: false, transformFunction: null }, outline: { classPropertyName: "outline", publicName: "outline", isSignal: true, isRequired: false, transformFunction: null }, aura: { classPropertyName: "aura", publicName: "aura", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.
|
|
50
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.20", type: YmtBadge, isStandalone: true, selector: "ymt-badge", inputs: { severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: false, transformFunction: null }, outline: { classPropertyName: "outline", publicName: "outline", isSignal: true, isRequired: false, transformFunction: null }, aura: { classPropertyName: "aura", publicName: "aura", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.success": "severity() === \"success\" ? \"\" : null", "attr.danger": "severity() === \"danger\" ? \"\" : null", "attr.warning": "severity() === \"warning\" ? \"\" : null", "attr.primary": "severity() === \"primary\" ? \"\" : null", "attr.neutral": "severity() === \"neutral\" ? \"\" : null", "class.outline": "outline()", "class.aura": "aura()" } }, ngImport: i0, template: '<ng-content/>', isInline: true, styles: [":host{--ymt-badge-corner: var(--ymt-corner-full);--ymt-badge-background: var(--ymt-surface-container-highest);--ymt-badge-on-background: var(--ymt-on-surface);--ymt-badge-outline-color: var(--ymt-text-color-subtle);--ymt-badge-outline-text-color: var(--ymt-text-color-subtle);--ymt-badge-aura-size: 3px;display:inline-flex;background-color:var(--ymt-badge-background);color:var(--ymt-badge-on-background);font:var(--ymt-font-body-subtle);padding:0 var(--ymt-spacing-xs);border-radius:var(--ymt-badge-corner)}:host.aura{--ymt-aura-color: rgb(from var(--ymt-badge-background) r g b / .5);box-shadow:0 0 0 var(--ymt-badge-aura-size) var(--ymt-aura-color)}:host.aura.success{--ymt-badge-background: var(--ymt-success);--ymt-badge-on-background: var(--ymt-on-success)}:host.aura.warning{--ymt-badge-background: var(--ymt-warning);--ymt-badge-on-background: var(--ymt-on-warning)}:host.aura.danger{--ymt-badge-background: var(--ymt-danger);--ymt-badge-on-background: var(--ymt-on-danger)}:host.aura.primary{--ymt-badge-background: var(--ymt-primary);--ymt-badge-on-background: var(--ymt-on-primary)}:host.outline{background-color:transparent;border:1px solid var(--ymt-badge-outline-color);color:var(--ymt-badge-outline-text-color)}:host.aura{--ymt-aura-color: rgb(from var(--ymt-badge-outline-color) r g b / .2)}:host.success{--ymt-badge-background: var(--ymt-success-container);--ymt-badge-on-background: var(--ymt-on-success-container);--ymt-badge-outline-color: var(--ymt-success);--ymt-badge-outline-text-color: var(--ymt-success)}:host.warning{--ymt-badge-background: var(--ymt-warning-container);--ymt-badge-on-background: var(--ymt-on-warning-container);--ymt-badge-outline-color: var(--ymt-warning);--ymt-badge-outline-text-color: var(--ymt-warning)}:host.danger{--ymt-badge-background: var(--ymt-danger-container);--ymt-badge-on-background: var(--ymt-on-danger-container);--ymt-badge-outline-color: var(--ymt-danger);--ymt-badge-outline-text-color: var(--ymt-danger)}:host.primary{--ymt-badge-background: var(--ymt-primary-container);--ymt-badge-on-background: var(--ymt-on-primary-container);--ymt-badge-outline-color: var(--ymt-primary);--ymt-badge-outline-text-color: var(--ymt-primary)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
19
51
|
}
|
|
20
52
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: YmtBadge, decorators: [{
|
|
21
53
|
type: Component,
|
|
22
|
-
args: [{ selector: 'ymt-badge', imports: [CommonModule], template: '<ng-content
|
|
23
|
-
'[attr.
|
|
54
|
+
args: [{ selector: 'ymt-badge', imports: [CommonModule], template: '<ng-content/>', host: {
|
|
55
|
+
'[attr.success]': 'severity() === "success" ? "" : null',
|
|
56
|
+
'[attr.danger]': 'severity() === "danger" ? "" : null',
|
|
57
|
+
'[attr.warning]': 'severity() === "warning" ? "" : null',
|
|
58
|
+
'[attr.primary]': 'severity() === "primary" ? "" : null',
|
|
59
|
+
'[attr.neutral]': 'severity() === "neutral" ? "" : null',
|
|
24
60
|
'[class.outline]': 'outline()',
|
|
25
61
|
'[class.aura]': 'aura()'
|
|
26
|
-
}, styles: [":host{--ymt-badge-corner: var(--ymt-corner-full);--ymt-badge-background: var(--ymt-surface-container-highest);--ymt-badge-on-background: var(--ymt-on-surface);--ymt-badge-outline-color: var(--ymt-text-color-subtle);--ymt-badge-outline-text-color: var(--ymt-text-color-subtle);--ymt-badge-aura-size: 3px;display:inline-flex;background-color:var(--ymt-badge-background);color:var(--ymt-badge-on-background);font:var(--ymt-font-body-subtle);padding:0 var(--ymt-spacing-xs);border-radius:var(--ymt-badge-corner)}:host.aura{--ymt-aura-color: rgb(from var(--ymt-badge-background) r g b / .5);box-shadow:0 0 0 var(--ymt-badge-aura-size) var(--ymt-aura-color)}:host.aura.success{--ymt-badge-background: var(--ymt-success);--ymt-badge-on-background: var(--ymt-on-success)}:host.aura.warning{--ymt-badge-background: var(--ymt-warning);--ymt-badge-on-background: var(--ymt-on-warning)}:host.aura.danger{--ymt-badge-background: var(--ymt-danger);--ymt-badge-on-background: var(--ymt-on-danger)}:host.aura.primary{--ymt-badge-background: var(--ymt-primary);--ymt-badge-on-background: var(--ymt-on-primary)}:host.outline{background-color:transparent;border:1px solid var(--ymt-badge-outline-color);color:var(--ymt-badge-outline-text-color)}:host.aura{--ymt-aura-color: rgb(from var(--ymt-badge-outline-color) r g b / .2)}:host.success{--ymt-badge-background: var(--ymt-success-container);--ymt-badge-on-background: var(--ymt-on-success-container);--ymt-badge-outline-color: var(--ymt-success);--ymt-badge-outline-text-color: var(--ymt-success)}:host.warning{--ymt-badge-background: var(--ymt-warning-container);--ymt-badge-on-background: var(--ymt-on-warning-container);--ymt-badge-outline-color: var(--ymt-warning);--ymt-badge-outline-text-color: var(--ymt-warning)}:host.danger{--ymt-badge-background: var(--ymt-danger-container);--ymt-badge-on-background: var(--ymt-on-danger-container);--ymt-badge-outline-color: var(--ymt-danger);--ymt-badge-outline-text-color: var(--ymt-danger)}:host.primary{--ymt-badge-background: var(--ymt-primary-container);--ymt-badge-on-background: var(--ymt-on-primary-container);--ymt-badge-outline-color: var(--ymt-primary);--ymt-badge-outline-text-color: var(--ymt-primary)}\n"] }]
|
|
62
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{--ymt-badge-corner: var(--ymt-corner-full);--ymt-badge-background: var(--ymt-surface-container-highest);--ymt-badge-on-background: var(--ymt-on-surface);--ymt-badge-outline-color: var(--ymt-text-color-subtle);--ymt-badge-outline-text-color: var(--ymt-text-color-subtle);--ymt-badge-aura-size: 3px;display:inline-flex;background-color:var(--ymt-badge-background);color:var(--ymt-badge-on-background);font:var(--ymt-font-body-subtle);padding:0 var(--ymt-spacing-xs);border-radius:var(--ymt-badge-corner)}:host.aura{--ymt-aura-color: rgb(from var(--ymt-badge-background) r g b / .5);box-shadow:0 0 0 var(--ymt-badge-aura-size) var(--ymt-aura-color)}:host.aura.success{--ymt-badge-background: var(--ymt-success);--ymt-badge-on-background: var(--ymt-on-success)}:host.aura.warning{--ymt-badge-background: var(--ymt-warning);--ymt-badge-on-background: var(--ymt-on-warning)}:host.aura.danger{--ymt-badge-background: var(--ymt-danger);--ymt-badge-on-background: var(--ymt-on-danger)}:host.aura.primary{--ymt-badge-background: var(--ymt-primary);--ymt-badge-on-background: var(--ymt-on-primary)}:host.outline{background-color:transparent;border:1px solid var(--ymt-badge-outline-color);color:var(--ymt-badge-outline-text-color)}:host.aura{--ymt-aura-color: rgb(from var(--ymt-badge-outline-color) r g b / .2)}:host.success{--ymt-badge-background: var(--ymt-success-container);--ymt-badge-on-background: var(--ymt-on-success-container);--ymt-badge-outline-color: var(--ymt-success);--ymt-badge-outline-text-color: var(--ymt-success)}:host.warning{--ymt-badge-background: var(--ymt-warning-container);--ymt-badge-on-background: var(--ymt-on-warning-container);--ymt-badge-outline-color: var(--ymt-warning);--ymt-badge-outline-text-color: var(--ymt-warning)}:host.danger{--ymt-badge-background: var(--ymt-danger-container);--ymt-badge-on-background: var(--ymt-on-danger-container);--ymt-badge-outline-color: var(--ymt-danger);--ymt-badge-outline-text-color: var(--ymt-danger)}:host.primary{--ymt-badge-background: var(--ymt-primary-container);--ymt-badge-on-background: var(--ymt-on-primary-container);--ymt-badge-outline-color: var(--ymt-primary);--ymt-badge-outline-text-color: var(--ymt-primary)}\n"] }]
|
|
27
63
|
}] });
|
|
28
64
|
|
|
29
|
-
const greeting = 'Hello World!';
|
|
30
|
-
|
|
31
65
|
/**
|
|
32
66
|
* Generated bundle index. Do not edit.
|
|
33
67
|
*/
|
|
34
68
|
|
|
35
|
-
export { YmtBadge
|
|
69
|
+
export { YmtBadge };
|
|
36
70
|
//# sourceMappingURL=yuuvis-material-badge.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-material-badge.mjs","sources":["../../../../../libs/yuuvis/material/badge/src/badge.component.ts","../../../../../libs/yuuvis/material/badge/src/
|
|
1
|
+
{"version":3,"file":"yuuvis-material-badge.mjs","sources":["../../../../../libs/yuuvis/material/badge/src/badge.component.ts","../../../../../libs/yuuvis/material/badge/src/yuuvis-material-badge.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { Severity } from './model/badge.model';\n\n/**\n * Badge component to display a label with different severity levels.\n *\n * ### Severity\n * Controls the color scheme via the `severity` input. Available values:\n * - `neutral` (default) — uses surface container colors\n * - `success` — green tones for positive/confirmed states\n * - `danger` — red tones for errors or destructive indicators\n * - `warning` — yellow/amber tones for caution states\n * - `primary` — theme primary color for informational or branded badges\n *\n * ### Variants\n * - **Filled** (default) — solid background with contrasting text color\n * - **Outline** — transparent background with a colored border, enabled via the `outline` input\n *\n * ### Aura\n * When `aura` is enabled, the badge renders a soft glowing box-shadow derived from its\n * severity color. In filled mode the aura uses a stronger, fully saturated background;\n * in outline mode it uses a subtle semi-transparent glow.\n *\n * ### Theming\n * The component exposes CSS custom properties for fine-grained control:\n * - `--ymt-badge-corner` — border radius (default: `--ymt-corner-full`)\n * - `--ymt-badge-background` — fill color\n * - `--ymt-badge-on-background` — text color\n * - `--ymt-badge-outline-color` — border color in outline variant\n * - `--ymt-badge-outline-text-color` — text color in outline variant\n * - `--ymt-badge-aura-size` — aura spread radius (default: `3px`)\n *\n * ### Accessibility\n * Color contrast is handled automatically for each severity/variant combination.\n * Add additional ARIA attributes depending on how the badge is used in your application.\n *\n * @example\n * ```html\n * <ymt-badge severity=\"success\">Approved</ymt-badge>\n * <ymt-badge severity=\"danger\" [outline]=\"true\">Rejected</ymt-badge>\n * <ymt-badge severity=\"warning\" [aura]=\"true\">Pending</ymt-badge>\n * ```\n */\n@Component({\n selector: 'ymt-badge',\n imports: [CommonModule],\n template: '<ng-content/>',\n styleUrl: './badge.component.scss',\n host: {\n '[attr.success]': 'severity() === \"success\" ? \"\" : null',\n '[attr.danger]': 'severity() === \"danger\" ? \"\" : null',\n '[attr.warning]': 'severity() === \"warning\" ? \"\" : null',\n '[attr.primary]': 'severity() === \"primary\" ? \"\" : null',\n '[attr.neutral]': 'severity() === \"neutral\" ? \"\" : null',\n '[class.outline]': 'outline()',\n '[class.aura]': 'aura()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class YmtBadge {\n severity = input<Severity>('neutral');\n outline = input<boolean>(false);\n aura = input<boolean>(false);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCG;MAiBU,QAAQ,CAAA;AACnB,IAAA,QAAQ,GAAG,KAAK,CAAW,SAAS,CAAC;AACrC,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,CAAC;AAC/B,IAAA,IAAI,GAAG,KAAK,CAAU,KAAK,CAAC;wGAHjB,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,cAAA,EAAA,0CAAA,EAAA,aAAA,EAAA,yCAAA,EAAA,cAAA,EAAA,0CAAA,EAAA,cAAA,EAAA,0CAAA,EAAA,cAAA,EAAA,0CAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAbT,eAAe,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,spEAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EADf,YAAY,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAcX,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAhBpB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,CAAC,YAAY,CAAC,EAAA,QAAA,EACb,eAAe,EAAA,IAAA,EAEnB;AACJ,wBAAA,gBAAgB,EAAE,sCAAsC;AACxD,wBAAA,eAAe,EAAE,qCAAqC;AACtD,wBAAA,gBAAgB,EAAE,sCAAsC;AACxD,wBAAA,gBAAgB,EAAE,sCAAsC;AACxD,wBAAA,gBAAgB,EAAE,sCAAsC;AACxD,wBAAA,iBAAiB,EAAE,WAAW;AAC9B,wBAAA,cAAc,EAAE;qBACjB,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,spEAAA,CAAA,EAAA;;;AC1DjD;;AAEG;;;;"}
|
|
@@ -24,47 +24,80 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
24
24
|
}] });
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
28
|
-
* subtitle and actions in the pane header.
|
|
27
|
+
* Header component for `ymt-pane`. Renders a two-row layout:
|
|
29
28
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
29
|
+
* - **Top row:** icon (optional), title, and actions area
|
|
30
|
+
* - **Bottom row:** subtitle and badges area
|
|
32
31
|
*
|
|
32
|
+
* ## Title & Subtitle
|
|
33
|
+
*
|
|
34
|
+
* Can be set as plain strings via the `title` and `subtitle` inputs,
|
|
35
|
+
* or as rich content via the `#yuvPaneHeaderTitle` and `#yuvPaneHeaderSubtitle`
|
|
36
|
+
* content child templates. When a template is provided it takes precedence
|
|
37
|
+
* over the corresponding string input.
|
|
38
|
+
*
|
|
39
|
+
* ## Icon
|
|
40
|
+
*
|
|
41
|
+
* Set the `icon` input to a Material Icon ligature to display an icon
|
|
42
|
+
* to the left of the title row.
|
|
43
|
+
*
|
|
44
|
+
* ## Actions & Badges
|
|
45
|
+
*
|
|
46
|
+
* Pass a `TemplateRef` to the `actions` input to render action buttons
|
|
47
|
+
* aligned to the right of the title row. Similarly, pass a `TemplateRef`
|
|
48
|
+
* to the `badges` input to render badges aligned to the right of the
|
|
49
|
+
* subtitle row.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
33
52
|
* ```html
|
|
34
|
-
* <!--
|
|
35
|
-
* <ymt-pane-header
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
53
|
+
* <!-- Simple usage with string inputs -->
|
|
54
|
+
* <ymt-pane-header
|
|
55
|
+
* [title]="'Documents'"
|
|
56
|
+
* [subtitle]="'12 items'"
|
|
57
|
+
* [icon]="'folder'"
|
|
58
|
+
* [actions]="headerActions"
|
|
59
|
+
* [badges]="headerBadges">
|
|
60
|
+
* </ymt-pane-header>
|
|
61
|
+
*
|
|
62
|
+
* <ng-template #headerActions>
|
|
63
|
+
* <button ymt-icon-button icon="add"></button>
|
|
64
|
+
* </ng-template>
|
|
65
|
+
*
|
|
66
|
+
* <ng-template #headerBadges>
|
|
67
|
+
* <ymt-badge severity="info">active</ymt-badge>
|
|
68
|
+
* </ng-template>
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```html
|
|
73
|
+
* <!-- Rich content via template projection -->
|
|
74
|
+
* <ymt-pane-header [icon]="'lock'">
|
|
75
|
+
* <ng-template #yuvPaneHeaderTitle>Custom <strong>title</strong></ng-template>
|
|
76
|
+
* <ng-template #yuvPaneHeaderSubtitle><ymt-badge severity="warning">locked</ymt-badge></ng-template>
|
|
40
77
|
* </ymt-pane-header>
|
|
41
78
|
* ```
|
|
42
79
|
*/
|
|
43
80
|
class YmtPaneHeaderComponent {
|
|
44
|
-
/**
|
|
45
|
-
* Title of the pane
|
|
46
|
-
*/
|
|
81
|
+
/** Plain-text title displayed in the top row. Ignored when a `#yuvPaneHeaderTitle` template is projected. */
|
|
47
82
|
title = input();
|
|
48
|
-
/**
|
|
49
|
-
* Icon of the pane
|
|
50
|
-
*/
|
|
83
|
+
/** Material Icon ligature rendered to the left of the title row (e.g. `'folder'`, `'lock'`). */
|
|
51
84
|
icon = input();
|
|
52
|
-
/**
|
|
53
|
-
* Subtitle of the pane
|
|
54
|
-
*/
|
|
85
|
+
/** Plain-text subtitle displayed in the bottom row. Ignored when a `#yuvPaneHeaderSubtitle` template is projected. */
|
|
55
86
|
subtitle = input();
|
|
56
|
-
/**
|
|
57
|
-
* TemplateRef for actions area in the pane header.
|
|
58
|
-
*/
|
|
87
|
+
/** Template rendered in the actions area, aligned to the right of the title row. */
|
|
59
88
|
actions = input();
|
|
89
|
+
/** Template rendered in the badges area, aligned to the right of the subtitle row. */
|
|
90
|
+
badges = input();
|
|
91
|
+
/** Content child template for rich title content. Takes precedence over the `title` input. */
|
|
60
92
|
titleSlot = contentChild('yuvPaneHeaderTitle');
|
|
93
|
+
/** Content child template for rich subtitle content. Takes precedence over the `subtitle` input. */
|
|
61
94
|
subtitleSlot = contentChild('yuvPaneHeaderSubtitle');
|
|
62
95
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: YmtPaneHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
63
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: YmtPaneHeaderComponent, isStandalone: true, selector: "ymt-pane-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "titleSlot", first: true, predicate: ["yuvPaneHeaderTitle"], descendants: true, isSignal: true }, { propertyName: "subtitleSlot", first: true, predicate: ["yuvPaneHeaderSubtitle"], descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n @if (icon()) {\n <div class=\"icon\">\n <mat-icon class=\"pane-icon\">{{ icon() }}</mat-icon>\n </div>\n }\n <h2>\n
|
|
96
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.20", type: YmtPaneHeaderComponent, isStandalone: true, selector: "ymt-pane-header", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null }, badges: { classPropertyName: "badges", publicName: "badges", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "titleSlot", first: true, predicate: ["yuvPaneHeaderTitle"], descendants: true, isSignal: true }, { propertyName: "subtitleSlot", first: true, predicate: ["yuvPaneHeaderSubtitle"], descendants: true, isSignal: true }], ngImport: i0, template: "<header>\n @if (icon()) {\n <div class=\"icon\" aria-hidden=\"true\">\n <mat-icon class=\"pane-icon\">{{ icon() }}</mat-icon>\n </div>\n }\n <!-- top row (title and actions) -->\n <div class=\"row title-row\">\n <h2>\n @let ts = titleSlot();\n @if (ts) {\n <ng-container *ngTemplateOutlet=\"ts\" />\n } @else {\n {{ title() }}\n }\n </h2>\n @let a = actions();\n @if (a) {\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"a\" />\n </div>\n }\n </div>\n\n <!-- bottom row (subtitle and badges) -->\n <div class=\"row subtitle-row\">\n <small>\n @let ss = subtitleSlot();\n @if (ss) {\n <ng-container *ngTemplateOutlet=\"ss\" />\n } @else {\n {{ subtitle() }}\n }\n </small>\n @let b = badges();\n @if (b) {\n <div class=\"badges\">\n <ng-container *ngTemplateOutlet=\"b\" />\n </div>\n }\n </div>\n</header>\n", styles: [":host{--_header-padding: var(--header-padding, var(--ymt-spacing-xl));--_header-background: var(--header-background, transparent);--_header-border-color: var(--header-border-color, transparent);--_header-icon-background: var(--header-icon-background, var(--ymt-surface-container-high))}:host header{display:grid;align-items:center;grid-template-columns:var(--_header-padding) auto 1fr calc(var(--_header-padding) / 2);grid-template-rows:auto auto var(--_header-padding);grid-template-areas:\". icon titleRow .\" \". icon subtitleRow .\" \". . . .\";flex:0 0 auto;background-color:var(--_header-background);border-block-end:1px solid var(--_header-border-color)}:host header .row{display:flex;flex-flow:row nowrap;align-items:center}:host header .title-row{grid-area:titleRow}:host header .subtitle-row{grid-area:subtitleRow}:host header .icon{grid-area:icon;align-items:center;margin-inline-end:var(--ymt-spacing-m);background-color:var(--_header-icon-background);border-radius:0 0 var(--ymt-corner-s) var(--ymt-corner-s);height:100%;width:var(--ymt-sizing-3xl);display:flex;padding-block-start:calc(var(--_header-padding) + 2px);padding-block-end:var(--ymt-spacing-xs);align-items:start;justify-content:center}:host header h2{flex:1;margin:0;padding:var(--_header-padding) 0 0 0;font:var(--ymt-font-title-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-self:end}:host header small{flex:1;font:var(--ymt-font-body-subtle-font);font-weight:var(--ymt-font-body-subtle-weight);color:var(--ymt-on-surface-type-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-self:start}:host header .actions{grid-area:actions;display:flex;align-items:center;justify-content:end;gap:var(--ymt-spacing-xs)}:host header .badges{grid-area:badges;display:flex;gap:var(--ymt-spacing-xs)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
64
97
|
}
|
|
65
98
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: YmtPaneHeaderComponent, decorators: [{
|
|
66
99
|
type: Component,
|
|
67
|
-
args: [{ selector: 'ymt-pane-header', imports: [CommonModule, MatIconModule], template: "<header>\n @if (icon()) {\n <div class=\"icon\">\n <mat-icon class=\"pane-icon\">{{ icon() }}</mat-icon>\n </div>\n }\n <h2>\n
|
|
100
|
+
args: [{ selector: 'ymt-pane-header', imports: [CommonModule, MatIconModule], template: "<header>\n @if (icon()) {\n <div class=\"icon\" aria-hidden=\"true\">\n <mat-icon class=\"pane-icon\">{{ icon() }}</mat-icon>\n </div>\n }\n <!-- top row (title and actions) -->\n <div class=\"row title-row\">\n <h2>\n @let ts = titleSlot();\n @if (ts) {\n <ng-container *ngTemplateOutlet=\"ts\" />\n } @else {\n {{ title() }}\n }\n </h2>\n @let a = actions();\n @if (a) {\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"a\" />\n </div>\n }\n </div>\n\n <!-- bottom row (subtitle and badges) -->\n <div class=\"row subtitle-row\">\n <small>\n @let ss = subtitleSlot();\n @if (ss) {\n <ng-container *ngTemplateOutlet=\"ss\" />\n } @else {\n {{ subtitle() }}\n }\n </small>\n @let b = badges();\n @if (b) {\n <div class=\"badges\">\n <ng-container *ngTemplateOutlet=\"b\" />\n </div>\n }\n </div>\n</header>\n", styles: [":host{--_header-padding: var(--header-padding, var(--ymt-spacing-xl));--_header-background: var(--header-background, transparent);--_header-border-color: var(--header-border-color, transparent);--_header-icon-background: var(--header-icon-background, var(--ymt-surface-container-high))}:host header{display:grid;align-items:center;grid-template-columns:var(--_header-padding) auto 1fr calc(var(--_header-padding) / 2);grid-template-rows:auto auto var(--_header-padding);grid-template-areas:\". icon titleRow .\" \". icon subtitleRow .\" \". . . .\";flex:0 0 auto;background-color:var(--_header-background);border-block-end:1px solid var(--_header-border-color)}:host header .row{display:flex;flex-flow:row nowrap;align-items:center}:host header .title-row{grid-area:titleRow}:host header .subtitle-row{grid-area:subtitleRow}:host header .icon{grid-area:icon;align-items:center;margin-inline-end:var(--ymt-spacing-m);background-color:var(--_header-icon-background);border-radius:0 0 var(--ymt-corner-s) var(--ymt-corner-s);height:100%;width:var(--ymt-sizing-3xl);display:flex;padding-block-start:calc(var(--_header-padding) + 2px);padding-block-end:var(--ymt-spacing-xs);align-items:start;justify-content:center}:host header h2{flex:1;margin:0;padding:var(--_header-padding) 0 0 0;font:var(--ymt-font-title-large);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-self:end}:host header small{flex:1;font:var(--ymt-font-body-subtle-font);font-weight:var(--ymt-font-body-subtle-weight);color:var(--ymt-on-surface-type-subtle);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;align-self:start}:host header .actions{grid-area:actions;display:flex;align-items:center;justify-content:end;gap:var(--ymt-spacing-xs)}:host header .badges{grid-area:badges;display:flex;gap:var(--ymt-spacing-xs)}\n"] }]
|
|
68
101
|
}] });
|
|
69
102
|
|
|
70
103
|
/**
|
|
@@ -453,11 +486,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImpo
|
|
|
453
486
|
|
|
454
487
|
class YmtPaneFooterComponent {
|
|
455
488
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: YmtPaneFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
456
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: YmtPaneFooterComponent, isStandalone: true, selector: "ymt-pane-footer", ngImport: i0, template: "<footer><ng-content></ng-content></footer>\n", styles: [":host
|
|
489
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.20", type: YmtPaneFooterComponent, isStandalone: true, selector: "ymt-pane-footer", ngImport: i0, template: "<footer><ng-content></ng-content></footer>\n", styles: [":host{--_footer-inline-padding: var(--footer-inline-padding, var(--ymt-spacing-xl));--_footer-block-padding: var(--footer-block-padding, var(--ymt-spacing-xl));--_footer-border-color: var(--footer-border-color, var(--ymt-outline-variant));--_footer-background: var(--footer-background, var(--ymt-surface-variant))}:host footer{padding:var(--_footer-block-padding) var(--_footer-inline-padding);border-block-start:1px solid var(--_footer-border-color);background-color:var(--_footer-background);display:flex;gap:var(--ymt-spacing-m);justify-content:flex-end}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
457
490
|
}
|
|
458
491
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: YmtPaneFooterComponent, decorators: [{
|
|
459
492
|
type: Component,
|
|
460
|
-
args: [{ selector: 'ymt-pane-footer', imports: [CommonModule], template: "<footer><ng-content></ng-content></footer>\n", styles: [":host
|
|
493
|
+
args: [{ selector: 'ymt-pane-footer', imports: [CommonModule], template: "<footer><ng-content></ng-content></footer>\n", styles: [":host{--_footer-inline-padding: var(--footer-inline-padding, var(--ymt-spacing-xl));--_footer-block-padding: var(--footer-block-padding, var(--ymt-spacing-xl));--_footer-border-color: var(--footer-border-color, var(--ymt-outline-variant));--_footer-background: var(--footer-background, var(--ymt-surface-variant))}:host footer{padding:var(--_footer-block-padding) var(--_footer-inline-padding);border-block-start:1px solid var(--_footer-border-color);background-color:var(--_footer-background);display:flex;gap:var(--ymt-spacing-m);justify-content:flex-end}\n"] }]
|
|
461
494
|
}] });
|
|
462
495
|
|
|
463
496
|
const cmp = [YmtPaneComponent, YmtPaneHeaderComponent, YmtPaneBodyComponent, YmtPaneFooterComponent, YmtPaneAsideComponent];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-material-panes.mjs","sources":["../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-aside/pane-aside.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-aside/pane-aside.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-body/pane-body.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-body/pane-body.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-header/pane-header.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-header/pane-header.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/fullscreen.directive.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-top-bar/pane-top-bar.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-top-bar/pane-top-bar.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-footer/pane-footer.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-footer/pane-footer.component.html","../../../../../libs/yuuvis/material/panes/src/lib/panes.module.ts","../../../../../libs/yuuvis/material/panes/src/yuuvis-material-panes.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ymt-pane-aside',\n imports: [CommonModule],\n templateUrl: './pane-aside.component.html',\n styleUrl: './pane-aside.component.scss'\n})\nexport class YmtPaneAsideComponent {}\n","<p>pane-aside works!</p>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ymt-pane-body',\n imports: [CommonModule],\n templateUrl: './pane-body.component.html',\n styleUrl: './pane-body.component.scss'\n})\nexport class YmtPaneBodyComponent {}\n","<ng-content></ng-content>\n","import { CommonModule } from '@angular/common';\nimport { Component, contentChild, input, TemplateRef } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * Component for the pane header. It can be used to display a title,\n * subtitle and actions in the pane header.\n *\n * The title and subtitle can be set via the `title` and `subtitle` inputs\n * or via the `yuvPaneHeaderTitle` and `yuvPaneHeaderSubtitle` template refs:\n *\n * ```html\n * <!-- Using inputs -->\n * <ymt-pane-header [title]=\"'Pane Title'\" [subtitle]=\"'Pane Subtitle'\"></ymt-pane-header>\n * <!-- Using template refs -->\n * <ymt-pane-header>\n * <ng-template #yuvPaneHeaderTitle><h2>🦁Custom pane title</h2></ng-template>\n * <ng-template #yuvPaneHeaderSubtitle><ymt-badge severity=\"warning\">locked</ymt-badge></ng-template>\n * </ymt-pane-header>\n * ```\n */\n@Component({\n selector: 'ymt-pane-header',\n imports: [CommonModule, MatIconModule],\n templateUrl: './pane-header.component.html',\n styleUrl: './pane-header.component.scss'\n})\nexport class YmtPaneHeaderComponent {\n /**\n * Title of the pane\n */\n title = input<string>();\n /**\n * Icon of the pane\n */\n icon = input<string>();\n /**\n * Subtitle of the pane\n */\n subtitle = input<string>();\n /**\n * TemplateRef for actions area in the pane header.\n */\n actions = input<TemplateRef<any>>();\n\n titleSlot = contentChild<TemplateRef<any>>('yuvPaneHeaderTitle');\n subtitleSlot = contentChild<TemplateRef<any>>('yuvPaneHeaderSubtitle');\n}\n","<header>\n @if (icon()) {\n <div class=\"icon\">\n <mat-icon class=\"pane-icon\">{{ icon() }}</mat-icon>\n </div>\n }\n <h2>\n @let ts = titleSlot();\n @if (ts) {\n <ng-container *ngTemplateOutlet=\"ts\"></ng-container>\n } @else {\n {{ title() }}\n }\n </h2>\n <small>\n @let ss = subtitleSlot();\n @if (ss) {\n <ng-container *ngTemplateOutlet=\"ss\"></ng-container>\n } @else {\n {{ subtitle() }}\n }\n </small>\n @let a = actions();\n @if (a) {\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"a\"></ng-container>\n </div>\n }\n</header>\n","import {\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n Renderer2,\n signal\n} from '@angular/core';\n\n/**\n * Directive that enables any host element to toggle into a fullscreen overlay\n * covering the entire viewport. Background content is made inert and body scroll\n * is locked while fullscreen is active.\n *\n * @example\n * ```html\n * <div yuvFullscreen #fs=\"yuvFullscreen\">\n * <button (click)=\"fs.toggle()\">Toggle</button>\n * <p>Content</p>\n * </div>\n * ```\n */\n@Directive({\n selector: '[yuvFullscreen]',\n exportAs: 'yuvFullscreen',\n host: {\n '[class.yuv-fullscreen-active]': 'active()',\n '(document:keydown.escape)': 'onEscape()'\n }\n})\nexport class FullscreenDirective implements OnDestroy {\n #elRef = inject(ElementRef);\n #renderer = inject(Renderer2);\n\n /** Whether the fullscreen toggle is disabled. */\n disabled = input<boolean>(false);\n\n /** Emitted when fullscreen mode is entered. */\n fullscreenEnter = output<void>();\n /** Emitted when fullscreen mode is exited. */\n fullscreenExit = output<void>();\n\n #isActive = signal(false);\n\n /** Read-only signal indicating whether fullscreen is currently active. */\n active = computed(() => this.#isActive());\n\n #originalStyles: Record<string, string> = {};\n #inertElements: HTMLElement[] = [];\n #originalBodyOverflow = '';\n\n /** Toggle fullscreen on/off. */\n toggle(): void {\n if (this.disabled()) return;\n if (this.#isActive()) {\n this.exit();\n } else {\n this.enter();\n }\n }\n\n /** Enter fullscreen mode. No-op if already active or disabled. */\n enter(): void {\n if (this.#isActive() || this.disabled()) return;\n this.#saveOriginalStyles();\n this.#applyFullscreenStyles();\n this.#makeBackgroundInert();\n this.#lockBodyScroll();\n this.#isActive.set(true);\n this.fullscreenEnter.emit();\n }\n\n /** Exit fullscreen mode. No-op if not active. */\n exit(): void {\n if (!this.#isActive()) return;\n this.#restoreOriginalStyles();\n this.#restoreBackground();\n this.#unlockBodyScroll();\n this.#isActive.set(false);\n this.fullscreenExit.emit();\n }\n\n /** @internal */\n onEscape(): void {\n if (this.#isActive()) {\n this.exit();\n }\n }\n\n #saveOriginalStyles(): void {\n const style = this.#elRef.nativeElement.style;\n this.#originalStyles = {\n position: style.position,\n inset: style.inset,\n zIndex: style.zIndex,\n width: style.width,\n height: style.height,\n overflow: style.overflow,\n backgroundColor: style.backgroundColor\n };\n }\n\n #applyFullscreenStyles(): void {\n const el = this.#elRef.nativeElement;\n this.#renderer.setStyle(el, 'position', 'fixed');\n this.#renderer.setStyle(el, 'inset', '0');\n this.#renderer.setStyle(el, 'z-index', '1000');\n this.#renderer.setStyle(el, 'width', '100vw');\n this.#renderer.setStyle(el, 'height', '100vh');\n this.#renderer.setStyle(el, 'overflow', 'auto');\n this.#renderer.setStyle(el, 'background-color', 'var(--ymt-surface, #fff)');\n }\n\n #restoreOriginalStyles(): void {\n const el = this.#elRef.nativeElement;\n for (const [prop, value] of Object.entries(this.#originalStyles)) {\n if (value) {\n this.#renderer.setStyle(el, prop, value);\n } else {\n this.#renderer.removeStyle(el, prop);\n }\n }\n this.#originalStyles = {};\n }\n\n #makeBackgroundInert(): void {\n this.#inertElements = [];\n let current: HTMLElement = this.#elRef.nativeElement;\n\n while (current.parentElement) {\n const parent = current.parentElement;\n for (let i = 0; i < parent.children.length; i++) {\n const sibling = parent.children[i] as HTMLElement;\n if (sibling !== current && !sibling.hasAttribute('inert')) {\n this.#renderer.setAttribute(sibling, 'inert', '');\n this.#inertElements.push(sibling);\n }\n }\n if (parent === document.body) break;\n current = parent;\n }\n }\n\n #restoreBackground(): void {\n for (const el of this.#inertElements) {\n this.#renderer.removeAttribute(el, 'inert');\n }\n this.#inertElements = [];\n }\n\n #lockBodyScroll(): void {\n this.#originalBodyOverflow = document.body.style.overflow;\n this.#renderer.setStyle(document.body, 'overflow', 'hidden');\n }\n\n #unlockBodyScroll(): void {\n if (this.#originalBodyOverflow) {\n this.#renderer.setStyle(document.body, 'overflow', this.#originalBodyOverflow);\n } else {\n this.#renderer.removeStyle(document.body, 'overflow');\n }\n this.#originalBodyOverflow = '';\n }\n\n ngOnDestroy(): void {\n if (this.#isActive()) {\n this.exit();\n }\n }\n}\n","import { Component, input, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ymt-pane-top-bar',\n imports: [CommonModule],\n templateUrl: './pane-top-bar.component.html',\n styleUrl: './pane-top-bar.component.scss',\n})\nexport class YmtPaneTopBarComponent {\n /**\n * TemplateRef for actions area in the top bar.\n */\n actions = input<TemplateRef<any>>();\n}\n","@let ta = actions();\n@if (ta) {\n <div class=\"top-bar\">\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"ta\"></ng-container>\n </div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input, TemplateRef } from '@angular/core';\nimport { FullscreenDirective } from './fullscreen.directive';\nimport { YmtPaneTopBarComponent } from './pane-top-bar/pane-top-bar.component';\n\n/**\n * A pane is a container component that unifies the appearance and behavior of\n * content areas in an app. It renders as a bordered, rounded card with a grid\n * layout for its sub-components.\n *\n * ## Structure\n *\n * A pane uses a vertical grid layout with four areas. All sub-components are optional:\n *\n * | Area | Component | Description |\n * |----------|--------------------|----------------------------------------------------|\n * | top-bar | *(internal)* | Rendered automatically when `topBarActions` is set. |\n * | header | `ymt-pane-header` | Title, subtitle, icon, and custom header actions. |\n * | main | `ymt-pane-body` | Scrollable main content area. |\n * | footer | `ymt-pane-footer` | Right-aligned action bar with a top border. |\n *\n * ```html\n * <ymt-pane>\n * <ymt-pane-header title=\"Users\" subtitle=\"3 selected\" [actions]=\"headerActions\" />\n * <ymt-pane-body>Main content</ymt-pane-body>\n * <ymt-pane-footer>\n * <button ymt-button>Save</button>\n * </ymt-pane-footer>\n * </ymt-pane>\n * ```\n *\n * ### `ymt-pane-header`\n *\n * Accepts `title`, `subtitle`, and `icon` as string inputs. For richer content,\n * use the `#yuvPaneHeaderTitle` and `#yuvPaneHeaderSubtitle` template refs:\n *\n * ```html\n * <ymt-pane-header>\n * <ng-template #yuvPaneHeaderTitle><h2>Custom title</h2></ng-template>\n * <ng-template #yuvPaneHeaderSubtitle><ymt-badge severity=\"warning\">locked</ymt-badge></ng-template>\n * </ymt-pane-header>\n * ```\n *\n * Header actions can be projected via the `[actions]` input (TemplateRef).\n *\n * ### Top bar actions\n *\n * Pass a `TemplateRef` to the `[topBarActions]` input to render icon buttons\n * in a slim top bar above the header:\n *\n * ```html\n * <ymt-pane [topBarActions]=\"actions\">\n * <ymt-pane-body>Content</ymt-pane-body>\n * </ymt-pane>\n *\n * <ng-template #actions>\n * <button ymt-icon-button icon-button-size=\"small\"><mat-icon>settings</mat-icon></button>\n * </ng-template>\n * ```\n *\n * ## Fullscreen\n *\n * Every pane supports fullscreen mode. The pane expands to fill the viewport,\n * background content becomes inert, and pressing <kbd>Escape</kbd> exits.\n *\n * ```html\n * <ymt-pane #pane>\n * <ymt-pane-body>\n * <button (click)=\"pane.toggleFullscreen()\">Toggle fullscreen</button>\n * </ymt-pane-body>\n * </ymt-pane>\n * ```\n *\n * Programmatic API: `enterFullscreen()`, `exitFullscreen()`, `toggleFullscreen()`.\n * Read the current state via the `fullscreenActive` signal.\n * Listen to transitions via the `(fullscreenEnter)` and `(fullscreenExit)` outputs.\n *\n * ## Busy state\n *\n * Set `[busy]=\"true\"` to replace the static border with a rotating\n * conic-gradient border that signals a loading state:\n *\n * ```html\n * <ymt-pane [busy]=\"isLoading()\">\n * <ymt-pane-body>Content</ymt-pane-body>\n * </ymt-pane>\n * ```\n *\n * ## Enter animation\n *\n * Panes fade in on creation (0.15 s ease-out by default). Customize or delay\n * the animation via CSS variables, or disable it entirely with the\n * `[noAnimation]` input:\n *\n * ```css\n * ymt-pane {\n * --enter-animation-duration: 0.3s;\n * --enter-animation-delay: 0.1s;\n * }\n * ```\n *\n * ```html\n * <ymt-pane [noAnimation]=\"true\"> ... </ymt-pane>\n * ```\n *\n * ## Plain mode\n *\n * Set `[plain]=\"true\"` to strip the border, border-radius, and background\n * while keeping the inner grid structure. Useful when embedding a pane inside\n * another styled container.\n *\n * ## CSS custom properties\n *\n * | Property | Default | Description |\n * |-------------------------------|-------------------------------|--------------------------------------|\n * | `--header-area-padding` | `var(--ymt-spacing-xl)` | Padding of the header area. |\n * | `--header-area-background` | `transparent` | Background of the header area. |\n * | `--header-area-border-color` | `transparent` | Bottom border of the header area. |\n * | `--main-area-padding` | `0` | Padding of the body area. |\n * | `--pane-background-color` | `var(--ymt-surface)` | Background of the pane. |\n * | `--busy-border-width` | `2px` | Width of the busy indicator border. |\n * | `--busy-border-color` | `var(--ymt-primary)` | Color of the busy indicator border. |\n * | `--enter-animation-duration` | `0.15s` | Duration of the fade-in animation. |\n * | `--enter-animation-delay` | `0s` | Delay before the fade-in starts. |\n */\n@Component({\n selector: 'ymt-pane',\n imports: [CommonModule, YmtPaneTopBarComponent],\n templateUrl: './pane.component.html',\n styleUrl: './pane.component.scss',\n hostDirectives: [\n {\n directive: FullscreenDirective,\n outputs: ['fullscreenEnter', 'fullscreenExit']\n }\n ],\n host: {\n '[class.plain]': 'plain()',\n '[class.busy]': 'busy()',\n '[class.no-animation]': 'noAnimation()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class YmtPaneComponent {\n /**\n * This static block runs once when the class is first loaded (not per instance).\n * It registers a custom CSS property (--busy-angle) with the browser's CSS engine via\n * CSS.registerProperty().\n * Why it's needed: Normally, CSS custom properties (e.g. --busy-angle) are just\n * strings — the browser can't interpolate them in animations. By registering the\n * property with syntax: '<angle>', the browser knows it's an angle value and can\n * smoothly animate it from 0deg to 360deg in the keyframe.\n * Why it's in JS instead of CSS: The standard CSS way is @property --busy-angle { ... }\n * (which was in the original SCSS). But Angular's emulated view encapsulation doesn't\n * pass @property at-rules through to the document correctly, so the property never got\n * registered and the animation was static. CSS.registerProperty() is the JavaScript\n * equivalent and works globally regardless of Angular's style scoping.\n * The try/catch: CSS.registerProperty() throws if the same property name is registered\n * twice. Since this component could be bundled in multiple chunks or the module re-evaluated,\n * the catch silently ignores the duplicate registration error.\n */\n static {\n try {\n CSS.registerProperty({\n name: '--busy-angle',\n syntax: '<angle>',\n initialValue: '0deg',\n inherits: false\n });\n } catch {\n // Already registered or unsupported\n }\n }\n\n #fullscreen = inject(FullscreenDirective);\n\n /**\n * Template for action buttons rendered in the top bar area of the pane.\n * Use `icon-button-size=\"small\"` or `icon-button-size=\"extra-small\"` on icon\n * buttons for proper alignment.\n *\n * ```html\n * <ymt-pane [topBarActions]=\"actions\">\n * <ymt-pane-body>Content</ymt-pane-body>\n * </ymt-pane>\n *\n * <ng-template #actions>\n * <button ymt-icon-button icon-button-size=\"small\"><mat-icon>settings</mat-icon></button>\n * </ng-template>\n * ```\n */\n topBarActions = input<TemplateRef<unknown>>();\n\n /**\n * When set to true, the pane border will be replaced with an animated\n * conic-gradient border to indicate a busy/loading state.\n */\n busy = input<boolean>(false);\n\n /**\n * Disable the default fade-in enter animation.\n */\n noAnimation = input<boolean>(false);\n\n /**\n * Setting this to true will remove the default styles for the pane. So it will\n * render without border-radius, border and background color, but keep the inner\n * structure. This is useful when you want to use the pane inside another container\n * and want to apply custom styles to the pane.\n */\n plain = input<boolean>(false);\n\n /** Read-only signal indicating whether fullscreen is currently active. */\n fullscreenActive = this.#fullscreen.active;\n\n /** Toggle fullscreen mode on/off. */\n toggleFullscreen(): void {\n this.#fullscreen.toggle();\n }\n\n /** Enter fullscreen mode. */\n enterFullscreen(): void {\n this.#fullscreen.enter();\n }\n\n /** Exit fullscreen mode. */\n exitFullscreen(): void {\n this.#fullscreen.exit();\n }\n}\n","@if (topBarActions()) {\n <ymt-pane-top-bar [actions]=\"topBarActions()\"></ymt-pane-top-bar>\n}\n<ng-content></ng-content>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ymt-pane-footer',\n imports: [CommonModule],\n templateUrl: './pane-footer.component.html',\n styleUrl: './pane-footer.component.scss'\n})\nexport class YmtPaneFooterComponent {}\n","<footer><ng-content></ng-content></footer>\n","import { NgModule } from '@angular/core';\nimport { YmtPaneAsideComponent } from './pane/pane-aside/pane-aside.component';\nimport { YmtPaneBodyComponent } from './pane/pane-body/pane-body.component';\nimport { YmtPaneHeaderComponent } from './pane/pane-header/pane-header.component';\nimport { YmtPaneComponent } from './pane/pane.component';\nimport { YmtPaneFooterComponent } from './pane/pane-footer/pane-footer.component';\n\nconst cmp = [YmtPaneComponent, YmtPaneHeaderComponent, YmtPaneBodyComponent, YmtPaneFooterComponent, YmtPaneAsideComponent];\n\n@NgModule({\n imports: cmp,\n exports: cmp\n})\nexport class YmtPanesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.FullscreenDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-material-panes.mjs","sources":["../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-aside/pane-aside.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-aside/pane-aside.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-body/pane-body.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-body/pane-body.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-header/pane-header.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-header/pane-header.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/fullscreen.directive.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-top-bar/pane-top-bar.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-top-bar/pane-top-bar.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane.component.html","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-footer/pane-footer.component.ts","../../../../../libs/yuuvis/material/panes/src/lib/pane/pane-footer/pane-footer.component.html","../../../../../libs/yuuvis/material/panes/src/lib/panes.module.ts","../../../../../libs/yuuvis/material/panes/src/yuuvis-material-panes.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ymt-pane-aside',\n imports: [CommonModule],\n templateUrl: './pane-aside.component.html',\n styleUrl: './pane-aside.component.scss'\n})\nexport class YmtPaneAsideComponent {}\n","<p>pane-aside works!</p>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ymt-pane-body',\n imports: [CommonModule],\n templateUrl: './pane-body.component.html',\n styleUrl: './pane-body.component.scss'\n})\nexport class YmtPaneBodyComponent {}\n","<ng-content></ng-content>\n","import { CommonModule } from '@angular/common';\nimport { Component, contentChild, input, TemplateRef } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * Header component for `ymt-pane`. Renders a two-row layout:\n *\n * - **Top row:** icon (optional), title, and actions area\n * - **Bottom row:** subtitle and badges area\n *\n * ## Title & Subtitle\n *\n * Can be set as plain strings via the `title` and `subtitle` inputs,\n * or as rich content via the `#yuvPaneHeaderTitle` and `#yuvPaneHeaderSubtitle`\n * content child templates. When a template is provided it takes precedence\n * over the corresponding string input.\n *\n * ## Icon\n *\n * Set the `icon` input to a Material Icon ligature to display an icon\n * to the left of the title row.\n *\n * ## Actions & Badges\n *\n * Pass a `TemplateRef` to the `actions` input to render action buttons\n * aligned to the right of the title row. Similarly, pass a `TemplateRef`\n * to the `badges` input to render badges aligned to the right of the\n * subtitle row.\n *\n * @example\n * ```html\n * <!-- Simple usage with string inputs -->\n * <ymt-pane-header\n * [title]=\"'Documents'\"\n * [subtitle]=\"'12 items'\"\n * [icon]=\"'folder'\"\n * [actions]=\"headerActions\"\n * [badges]=\"headerBadges\">\n * </ymt-pane-header>\n *\n * <ng-template #headerActions>\n * <button ymt-icon-button icon=\"add\"></button>\n * </ng-template>\n *\n * <ng-template #headerBadges>\n * <ymt-badge severity=\"info\">active</ymt-badge>\n * </ng-template>\n * ```\n *\n * @example\n * ```html\n * <!-- Rich content via template projection -->\n * <ymt-pane-header [icon]=\"'lock'\">\n * <ng-template #yuvPaneHeaderTitle>Custom <strong>title</strong></ng-template>\n * <ng-template #yuvPaneHeaderSubtitle><ymt-badge severity=\"warning\">locked</ymt-badge></ng-template>\n * </ymt-pane-header>\n * ```\n */\n@Component({\n selector: 'ymt-pane-header',\n imports: [CommonModule, MatIconModule],\n templateUrl: './pane-header.component.html',\n styleUrl: './pane-header.component.scss'\n})\nexport class YmtPaneHeaderComponent {\n /** Plain-text title displayed in the top row. Ignored when a `#yuvPaneHeaderTitle` template is projected. */\n title = input<string>();\n /** Material Icon ligature rendered to the left of the title row (e.g. `'folder'`, `'lock'`). */\n icon = input<string>();\n /** Plain-text subtitle displayed in the bottom row. Ignored when a `#yuvPaneHeaderSubtitle` template is projected. */\n subtitle = input<string>();\n /** Template rendered in the actions area, aligned to the right of the title row. */\n actions = input<TemplateRef<unknown>>();\n /** Template rendered in the badges area, aligned to the right of the subtitle row. */\n badges = input<TemplateRef<unknown>>();\n\n /** Content child template for rich title content. Takes precedence over the `title` input. */\n titleSlot = contentChild<TemplateRef<unknown>>('yuvPaneHeaderTitle');\n /** Content child template for rich subtitle content. Takes precedence over the `subtitle` input. */\n subtitleSlot = contentChild<TemplateRef<unknown>>('yuvPaneHeaderSubtitle');\n}\n","<header>\n @if (icon()) {\n <div class=\"icon\" aria-hidden=\"true\">\n <mat-icon class=\"pane-icon\">{{ icon() }}</mat-icon>\n </div>\n }\n <!-- top row (title and actions) -->\n <div class=\"row title-row\">\n <h2>\n @let ts = titleSlot();\n @if (ts) {\n <ng-container *ngTemplateOutlet=\"ts\" />\n } @else {\n {{ title() }}\n }\n </h2>\n @let a = actions();\n @if (a) {\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"a\" />\n </div>\n }\n </div>\n\n <!-- bottom row (subtitle and badges) -->\n <div class=\"row subtitle-row\">\n <small>\n @let ss = subtitleSlot();\n @if (ss) {\n <ng-container *ngTemplateOutlet=\"ss\" />\n } @else {\n {{ subtitle() }}\n }\n </small>\n @let b = badges();\n @if (b) {\n <div class=\"badges\">\n <ng-container *ngTemplateOutlet=\"b\" />\n </div>\n }\n </div>\n</header>\n","import {\n computed,\n Directive,\n ElementRef,\n inject,\n input,\n OnDestroy,\n output,\n Renderer2,\n signal\n} from '@angular/core';\n\n/**\n * Directive that enables any host element to toggle into a fullscreen overlay\n * covering the entire viewport. Background content is made inert and body scroll\n * is locked while fullscreen is active.\n *\n * @example\n * ```html\n * <div yuvFullscreen #fs=\"yuvFullscreen\">\n * <button (click)=\"fs.toggle()\">Toggle</button>\n * <p>Content</p>\n * </div>\n * ```\n */\n@Directive({\n selector: '[yuvFullscreen]',\n exportAs: 'yuvFullscreen',\n host: {\n '[class.yuv-fullscreen-active]': 'active()',\n '(document:keydown.escape)': 'onEscape()'\n }\n})\nexport class FullscreenDirective implements OnDestroy {\n #elRef = inject(ElementRef);\n #renderer = inject(Renderer2);\n\n /** Whether the fullscreen toggle is disabled. */\n disabled = input<boolean>(false);\n\n /** Emitted when fullscreen mode is entered. */\n fullscreenEnter = output<void>();\n /** Emitted when fullscreen mode is exited. */\n fullscreenExit = output<void>();\n\n #isActive = signal(false);\n\n /** Read-only signal indicating whether fullscreen is currently active. */\n active = computed(() => this.#isActive());\n\n #originalStyles: Record<string, string> = {};\n #inertElements: HTMLElement[] = [];\n #originalBodyOverflow = '';\n\n /** Toggle fullscreen on/off. */\n toggle(): void {\n if (this.disabled()) return;\n if (this.#isActive()) {\n this.exit();\n } else {\n this.enter();\n }\n }\n\n /** Enter fullscreen mode. No-op if already active or disabled. */\n enter(): void {\n if (this.#isActive() || this.disabled()) return;\n this.#saveOriginalStyles();\n this.#applyFullscreenStyles();\n this.#makeBackgroundInert();\n this.#lockBodyScroll();\n this.#isActive.set(true);\n this.fullscreenEnter.emit();\n }\n\n /** Exit fullscreen mode. No-op if not active. */\n exit(): void {\n if (!this.#isActive()) return;\n this.#restoreOriginalStyles();\n this.#restoreBackground();\n this.#unlockBodyScroll();\n this.#isActive.set(false);\n this.fullscreenExit.emit();\n }\n\n /** @internal */\n onEscape(): void {\n if (this.#isActive()) {\n this.exit();\n }\n }\n\n #saveOriginalStyles(): void {\n const style = this.#elRef.nativeElement.style;\n this.#originalStyles = {\n position: style.position,\n inset: style.inset,\n zIndex: style.zIndex,\n width: style.width,\n height: style.height,\n overflow: style.overflow,\n backgroundColor: style.backgroundColor\n };\n }\n\n #applyFullscreenStyles(): void {\n const el = this.#elRef.nativeElement;\n this.#renderer.setStyle(el, 'position', 'fixed');\n this.#renderer.setStyle(el, 'inset', '0');\n this.#renderer.setStyle(el, 'z-index', '1000');\n this.#renderer.setStyle(el, 'width', '100vw');\n this.#renderer.setStyle(el, 'height', '100vh');\n this.#renderer.setStyle(el, 'overflow', 'auto');\n this.#renderer.setStyle(el, 'background-color', 'var(--ymt-surface, #fff)');\n }\n\n #restoreOriginalStyles(): void {\n const el = this.#elRef.nativeElement;\n for (const [prop, value] of Object.entries(this.#originalStyles)) {\n if (value) {\n this.#renderer.setStyle(el, prop, value);\n } else {\n this.#renderer.removeStyle(el, prop);\n }\n }\n this.#originalStyles = {};\n }\n\n #makeBackgroundInert(): void {\n this.#inertElements = [];\n let current: HTMLElement = this.#elRef.nativeElement;\n\n while (current.parentElement) {\n const parent = current.parentElement;\n for (let i = 0; i < parent.children.length; i++) {\n const sibling = parent.children[i] as HTMLElement;\n if (sibling !== current && !sibling.hasAttribute('inert')) {\n this.#renderer.setAttribute(sibling, 'inert', '');\n this.#inertElements.push(sibling);\n }\n }\n if (parent === document.body) break;\n current = parent;\n }\n }\n\n #restoreBackground(): void {\n for (const el of this.#inertElements) {\n this.#renderer.removeAttribute(el, 'inert');\n }\n this.#inertElements = [];\n }\n\n #lockBodyScroll(): void {\n this.#originalBodyOverflow = document.body.style.overflow;\n this.#renderer.setStyle(document.body, 'overflow', 'hidden');\n }\n\n #unlockBodyScroll(): void {\n if (this.#originalBodyOverflow) {\n this.#renderer.setStyle(document.body, 'overflow', this.#originalBodyOverflow);\n } else {\n this.#renderer.removeStyle(document.body, 'overflow');\n }\n this.#originalBodyOverflow = '';\n }\n\n ngOnDestroy(): void {\n if (this.#isActive()) {\n this.exit();\n }\n }\n}\n","import { Component, input, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ymt-pane-top-bar',\n imports: [CommonModule],\n templateUrl: './pane-top-bar.component.html',\n styleUrl: './pane-top-bar.component.scss',\n})\nexport class YmtPaneTopBarComponent {\n /**\n * TemplateRef for actions area in the top bar.\n */\n actions = input<TemplateRef<any>>();\n}\n","@let ta = actions();\n@if (ta) {\n <div class=\"top-bar\">\n <div class=\"actions\">\n <ng-container *ngTemplateOutlet=\"ta\"></ng-container>\n </div>\n </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input, TemplateRef } from '@angular/core';\nimport { FullscreenDirective } from './fullscreen.directive';\nimport { YmtPaneTopBarComponent } from './pane-top-bar/pane-top-bar.component';\n\n/**\n * A pane is a container component that unifies the appearance and behavior of\n * content areas in an app. It renders as a bordered, rounded card with a grid\n * layout for its sub-components.\n *\n * ## Structure\n *\n * A pane uses a vertical grid layout with four areas. All sub-components are optional:\n *\n * | Area | Component | Description |\n * |----------|--------------------|----------------------------------------------------|\n * | top-bar | *(internal)* | Rendered automatically when `topBarActions` is set. |\n * | header | `ymt-pane-header` | Title, subtitle, icon, and custom header actions. |\n * | main | `ymt-pane-body` | Scrollable main content area. |\n * | footer | `ymt-pane-footer` | Right-aligned action bar with a top border. |\n *\n * ```html\n * <ymt-pane>\n * <ymt-pane-header title=\"Users\" subtitle=\"3 selected\" [actions]=\"headerActions\" />\n * <ymt-pane-body>Main content</ymt-pane-body>\n * <ymt-pane-footer>\n * <button ymt-button>Save</button>\n * </ymt-pane-footer>\n * </ymt-pane>\n * ```\n *\n * ### `ymt-pane-header`\n *\n * Accepts `title`, `subtitle`, and `icon` as string inputs. For richer content,\n * use the `#yuvPaneHeaderTitle` and `#yuvPaneHeaderSubtitle` template refs:\n *\n * ```html\n * <ymt-pane-header>\n * <ng-template #yuvPaneHeaderTitle><h2>Custom title</h2></ng-template>\n * <ng-template #yuvPaneHeaderSubtitle><ymt-badge severity=\"warning\">locked</ymt-badge></ng-template>\n * </ymt-pane-header>\n * ```\n *\n * Header actions can be projected via the `[actions]` input (TemplateRef).\n *\n * ### Top bar actions\n *\n * Pass a `TemplateRef` to the `[topBarActions]` input to render icon buttons\n * in a slim top bar above the header:\n *\n * ```html\n * <ymt-pane [topBarActions]=\"actions\">\n * <ymt-pane-body>Content</ymt-pane-body>\n * </ymt-pane>\n *\n * <ng-template #actions>\n * <button ymt-icon-button icon-button-size=\"small\"><mat-icon>settings</mat-icon></button>\n * </ng-template>\n * ```\n *\n * ## Fullscreen\n *\n * Every pane supports fullscreen mode. The pane expands to fill the viewport,\n * background content becomes inert, and pressing <kbd>Escape</kbd> exits.\n *\n * ```html\n * <ymt-pane #pane>\n * <ymt-pane-body>\n * <button (click)=\"pane.toggleFullscreen()\">Toggle fullscreen</button>\n * </ymt-pane-body>\n * </ymt-pane>\n * ```\n *\n * Programmatic API: `enterFullscreen()`, `exitFullscreen()`, `toggleFullscreen()`.\n * Read the current state via the `fullscreenActive` signal.\n * Listen to transitions via the `(fullscreenEnter)` and `(fullscreenExit)` outputs.\n *\n * ## Busy state\n *\n * Set `[busy]=\"true\"` to replace the static border with a rotating\n * conic-gradient border that signals a loading state:\n *\n * ```html\n * <ymt-pane [busy]=\"isLoading()\">\n * <ymt-pane-body>Content</ymt-pane-body>\n * </ymt-pane>\n * ```\n *\n * ## Enter animation\n *\n * Panes fade in on creation (0.15 s ease-out by default). Customize or delay\n * the animation via CSS variables, or disable it entirely with the\n * `[noAnimation]` input:\n *\n * ```css\n * ymt-pane {\n * --enter-animation-duration: 0.3s;\n * --enter-animation-delay: 0.1s;\n * }\n * ```\n *\n * ```html\n * <ymt-pane [noAnimation]=\"true\"> ... </ymt-pane>\n * ```\n *\n * ## Plain mode\n *\n * Set `[plain]=\"true\"` to strip the border, border-radius, and background\n * while keeping the inner grid structure. Useful when embedding a pane inside\n * another styled container.\n *\n * ## CSS custom properties\n *\n * | Property | Default | Description |\n * |-------------------------------|-------------------------------|--------------------------------------|\n * | `--header-area-padding` | `var(--ymt-spacing-xl)` | Padding of the header area. |\n * | `--header-area-background` | `transparent` | Background of the header area. |\n * | `--header-area-border-color` | `transparent` | Bottom border of the header area. |\n * | `--main-area-padding` | `0` | Padding of the body area. |\n * | `--pane-background-color` | `var(--ymt-surface)` | Background of the pane. |\n * | `--busy-border-width` | `2px` | Width of the busy indicator border. |\n * | `--busy-border-color` | `var(--ymt-primary)` | Color of the busy indicator border. |\n * | `--enter-animation-duration` | `0.15s` | Duration of the fade-in animation. |\n * | `--enter-animation-delay` | `0s` | Delay before the fade-in starts. |\n */\n@Component({\n selector: 'ymt-pane',\n imports: [CommonModule, YmtPaneTopBarComponent],\n templateUrl: './pane.component.html',\n styleUrl: './pane.component.scss',\n hostDirectives: [\n {\n directive: FullscreenDirective,\n outputs: ['fullscreenEnter', 'fullscreenExit']\n }\n ],\n host: {\n '[class.plain]': 'plain()',\n '[class.busy]': 'busy()',\n '[class.no-animation]': 'noAnimation()'\n },\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class YmtPaneComponent {\n /**\n * This static block runs once when the class is first loaded (not per instance).\n * It registers a custom CSS property (--busy-angle) with the browser's CSS engine via\n * CSS.registerProperty().\n * Why it's needed: Normally, CSS custom properties (e.g. --busy-angle) are just\n * strings — the browser can't interpolate them in animations. By registering the\n * property with syntax: '<angle>', the browser knows it's an angle value and can\n * smoothly animate it from 0deg to 360deg in the keyframe.\n * Why it's in JS instead of CSS: The standard CSS way is @property --busy-angle { ... }\n * (which was in the original SCSS). But Angular's emulated view encapsulation doesn't\n * pass @property at-rules through to the document correctly, so the property never got\n * registered and the animation was static. CSS.registerProperty() is the JavaScript\n * equivalent and works globally regardless of Angular's style scoping.\n * The try/catch: CSS.registerProperty() throws if the same property name is registered\n * twice. Since this component could be bundled in multiple chunks or the module re-evaluated,\n * the catch silently ignores the duplicate registration error.\n */\n static {\n try {\n CSS.registerProperty({\n name: '--busy-angle',\n syntax: '<angle>',\n initialValue: '0deg',\n inherits: false\n });\n } catch {\n // Already registered or unsupported\n }\n }\n\n #fullscreen = inject(FullscreenDirective);\n\n /**\n * Template for action buttons rendered in the top bar area of the pane.\n * Use `icon-button-size=\"small\"` or `icon-button-size=\"extra-small\"` on icon\n * buttons for proper alignment.\n *\n * ```html\n * <ymt-pane [topBarActions]=\"actions\">\n * <ymt-pane-body>Content</ymt-pane-body>\n * </ymt-pane>\n *\n * <ng-template #actions>\n * <button ymt-icon-button icon-button-size=\"small\"><mat-icon>settings</mat-icon></button>\n * </ng-template>\n * ```\n */\n topBarActions = input<TemplateRef<unknown>>();\n\n /**\n * When set to true, the pane border will be replaced with an animated\n * conic-gradient border to indicate a busy/loading state.\n */\n busy = input<boolean>(false);\n\n /**\n * Disable the default fade-in enter animation.\n */\n noAnimation = input<boolean>(false);\n\n /**\n * Setting this to true will remove the default styles for the pane. So it will\n * render without border-radius, border and background color, but keep the inner\n * structure. This is useful when you want to use the pane inside another container\n * and want to apply custom styles to the pane.\n */\n plain = input<boolean>(false);\n\n /** Read-only signal indicating whether fullscreen is currently active. */\n fullscreenActive = this.#fullscreen.active;\n\n /** Toggle fullscreen mode on/off. */\n toggleFullscreen(): void {\n this.#fullscreen.toggle();\n }\n\n /** Enter fullscreen mode. */\n enterFullscreen(): void {\n this.#fullscreen.enter();\n }\n\n /** Exit fullscreen mode. */\n exitFullscreen(): void {\n this.#fullscreen.exit();\n }\n}\n","@if (topBarActions()) {\n <ymt-pane-top-bar [actions]=\"topBarActions()\"></ymt-pane-top-bar>\n}\n<ng-content></ng-content>\n","import { Component } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'ymt-pane-footer',\n imports: [CommonModule],\n templateUrl: './pane-footer.component.html',\n styleUrl: './pane-footer.component.scss'\n})\nexport class YmtPaneFooterComponent {}\n","<footer><ng-content></ng-content></footer>\n","import { NgModule } from '@angular/core';\nimport { YmtPaneAsideComponent } from './pane/pane-aside/pane-aside.component';\nimport { YmtPaneBodyComponent } from './pane/pane-body/pane-body.component';\nimport { YmtPaneHeaderComponent } from './pane/pane-header/pane-header.component';\nimport { YmtPaneComponent } from './pane/pane.component';\nimport { YmtPaneFooterComponent } from './pane/pane-footer/pane-footer.component';\n\nconst cmp = [YmtPaneComponent, YmtPaneHeaderComponent, YmtPaneBodyComponent, YmtPaneFooterComponent, YmtPaneAsideComponent];\n\n@NgModule({\n imports: cmp,\n exports: cmp\n})\nexport class YmtPanesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.FullscreenDirective"],"mappings":"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"}
|
|
@@ -717,7 +717,9 @@ class YmtButtonDirective {
|
|
|
717
717
|
}
|
|
718
718
|
#getNoneIconNodes() {
|
|
719
719
|
const iter = document.createNodeIterator(this.#hostElement, NodeFilter.SHOW_ALL, (node) => {
|
|
720
|
-
return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#hostElement
|
|
720
|
+
return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#hostElement
|
|
721
|
+
? NodeFilter.FILTER_ACCEPT
|
|
722
|
+
: NodeFilter.FILTER_REJECT;
|
|
721
723
|
});
|
|
722
724
|
let currentNode;
|
|
723
725
|
const filteredNodes = [];
|
|
@@ -727,8 +729,12 @@ class YmtButtonDirective {
|
|
|
727
729
|
return filteredNodes;
|
|
728
730
|
}
|
|
729
731
|
#applySizeClass() {
|
|
730
|
-
this.size() === YMT_BUTTON_SIZE.small
|
|
731
|
-
|
|
732
|
+
this.size() === YMT_BUTTON_SIZE.small
|
|
733
|
+
? this.#hostElement.classList.add(`ymt-button--size-s`)
|
|
734
|
+
: this.#hostElement.classList.remove(`ymt-button--size-s`);
|
|
735
|
+
this.size() === YMT_BUTTON_SIZE.medium
|
|
736
|
+
? this.#hostElement.classList.add(`ymt-button--size-m`)
|
|
737
|
+
: this.#hostElement.classList.remove(`ymt-button--size-m`);
|
|
732
738
|
}
|
|
733
739
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.20", ngImport: i0, type: YmtButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
734
740
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.2.20", type: YmtButtonDirective, isStandalone: true, selector: "button[ymtButton], a[ymtButton]", inputs: { ymtButton: { classPropertyName: "ymtButton", publicName: "ymtButton", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, ariaDisabled: { classPropertyName: "ariaDisabled", publicName: "aria-disabled", isSignal: true, isRequired: false, transformFunction: null }, disableRipple: { classPropertyName: "disableRipple", publicName: "disableRipple", isSignal: true, isRequired: false, transformFunction: null }, disabledInteractive: { classPropertyName: "disabledInteractive", publicName: "disabledInteractive", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "button-size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-material.mjs","sources":["../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-icon-registry.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-datepicker-intl.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-date-adapter.service.ts","../../../../../libs/yuuvis/material/src/lib/services/device.interface.ts","../../../../../libs/yuuvis/material/src/lib/services/device.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-paginator-intl.service.ts","../../../../../libs/yuuvis/material/src/lib/providers/material.providers.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/components/datepicker/datepicker.component.ts","../../../../../libs/yuuvis/material/src/lib/components/datepicker/datepicker.component.html","../../../../../libs/yuuvis/material/src/lib/components/datepicker/datepicker-toggle.component.ts","../../../../../libs/yuuvis/material/src/yuuvis-material.ts"],"sourcesContent":["import { ErrorHandler, Inject, Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DOCUMENT } from '@angular/common';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class YmtMatIconRegistryService extends MatIconRegistry {\n #ymtFontSetClassNames = ['material-symbols-sharp'];\n\n constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, @Inject(DOCUMENT) document: any, _errorHandler: ErrorHandler) {\n super(_httpClient, _sanitizer, document, _errorHandler);\n this.setDefaultFontSetClass();\n }\n\n override setDefaultFontSetClass(...classnames: string[]) {\n const merged = [...new Set([...classnames, ...this.#ymtFontSetClassNames])];\n super.setDefaultFontSetClass(...merged);\n return this;\n }\n\n static isFontIcon(input: string | null) {\n if (typeof input === 'string') {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, 'image/svg+xml');\n return coerceBooleanProperty(doc.querySelector('parsererror'));\n }\n return false;\n }\n}\n","import { MatDatepickerIntl } from '@angular/material/datepicker';\nimport { TranslateService } from '@ngx-translate/core';\nimport { inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Injectable({ providedIn: 'root' })\nexport class YmtDatepickerIntlService extends MatDatepickerIntl {\n #translate = inject(TranslateService);\n \n constructor() {\n super();\n \n this.translateLabels();\n this.#translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.translateLabels();\n });\n }\n \n translateLabels() {\n this.openCalendarLabel = this.#translate.instant('ymt.datepicker.openCalendarLabel');\n this.closeCalendarLabel = this.#translate.instant('ymt.datepicker.closeCalendarLabel');\n this.calendarLabel = this.#translate.instant('ymt.datepicker.calendarLabel');\n this.comparisonDateLabel = this.#translate.instant('ymt.datepicker.comparisonDateLabel');\n this.prevMonthLabel = this.#translate.instant('ymt.datepicker.prevMonthLabel');\n this.nextMonthLabel = this.#translate.instant('ymt.datepicker.nextMonthLabel');\n this.prevYearLabel = this.#translate.instant('ymt.datepicker.prevYearLabel');\n this.nextYearLabel = this.#translate.instant('ymt.datepicker.nextYearLabel');\n this.prevMultiYearLabel = this.#translate.instant('ymt.datepicker.prevMultiYearLabel');\n this.nextMultiYearLabel = this.#translate.instant('ymt.datepicker.nextMultiYearLabel');\n this.switchToMonthViewLabel = this.#translate.instant('ymt.datepicker.switchToMonthViewLabel');\n this.switchToMultiYearViewLabel = this.#translate.instant('ymt.datepicker.switchToMultiYearViewLabel');\n this.startDateLabel = this.#translate.instant('ymt.datepicker.startDateLabel');\n this.endDateLabel = this.#translate.instant('ymt.datepicker.endDateLabel');\n this.changes.next();\n }\n \n override formatYearRange(start: string, end: string): string {\n return super.formatYearRange(start, end);\n }\n \n override formatYearRangeLabel(start: string, end: string): string {\n return super.formatYearRangeLabel(start, end);\n }\n}\n","import { inject, Injectable, Provider } from '@angular/core';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_NATIVE_DATE_FORMATS, MatDateFormats, NativeDateAdapter } from '@angular/material/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * @deprecated Use `YMT_DATE_FORMATS` instead.\n * @see YMT_DATE_FORMATS\n * fixes typo in the name\n */\nexport const YMT_DATE_FROMATS: MatDateFormats = {\n ...MAT_NATIVE_DATE_FORMATS,\n parse: {\n dateInput: null,\n timeInput: null\n }\n};\n\nexport const YMT_DATE_FORMATS: MatDateFormats = {\n ...MAT_NATIVE_DATE_FORMATS,\n parse: {\n dateInput: null,\n timeInput: null\n }\n};\n\nexport function provideYmtDateAdapter(formats: MatDateFormats = YMT_DATE_FORMATS): Provider[] {\n return [\n { provide: DateAdapter, useClass: YmtDateAdapterService },\n { provide: MAT_DATE_FORMATS, useValue: formats }\n ];\n}\n\ninterface IParseFormats {\n separator: '.' | '/' | '-' | string;\n order: 'mdy' | 'dmy' | 'ymd';\n}\n\n@Injectable()\nexport class YmtDateAdapterService extends NativeDateAdapter {\n #translateService = inject(TranslateService);\n\n override locale = this.#translateService.currentLang;\n\n constructor() {\n super();\n }\n\n override parse(value: any, parseFormat: any = ''): Date | null {\n // categories: { separators: ['.','/','-'], order: ['mdy','dmy','ymd'] }\n let date: Date | null = null;\n if (typeof value === 'string') {\n switch (this.locale) {\n case 'en':\n date = this.parseDateString(value, { separator: '/', order: 'mdy' });\n break;\n case 'de':\n date = this.parseDateString(value, { separator: '.', order: 'dmy' });\n break;\n case 'fi':\n date = this.parseDateString(value, { separator: '.', order: 'dmy' });\n break;\n }\n }\n return super.parse(date, parseFormat);\n }\n\n parseDateString(value: string, config: IParseFormats): Date {\n const { separator, order } = config;\n const dateStrArr = value.split(separator); // DD.MM.YYYY => { separator: '.', order: 'dmy' }\n const day = Number(dateStrArr[order.indexOf('d')]);\n const month = Number(dateStrArr[order.indexOf('m')]) - 1;\n const year = Number(dateStrArr[order.indexOf('y')]);\n const date = new Date(year, month, day);\n const debugObject = {\n config: { separator, order },\n dateStrArr,\n day,\n month,\n year,\n date\n };\n\n return date;\n }\n}\n","export enum DeviceScreenOrientation {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape'\n}\n\n\nexport interface DeviceScreen {\n size: ScreenSize;\n orientation: DeviceScreenOrientation\n width: number;\n height: number;\n}\n\nexport interface DeviceScreenBounds {\n width: number;\n height: number;\n}\n\nexport type ScreenSize = 's' | 'm' | 'l' | 'xl';\n\n\n","import { inject, Injectable, signal } from '@angular/core';\nimport { DeviceDetectorService, DeviceInfo } from 'ngx-device-detector';\nimport { BehaviorSubject, debounceTime, fromEvent, Observable, ReplaySubject } from 'rxjs';\nimport { DeviceScreen, DeviceScreenBounds, DeviceScreenOrientation, ScreenSize } from './device.interface';\n\n/**\n * Service that adapts the application layout and behavior to different devices,\n * screen sizes, orientations, and browser zoom levels.\n *\n * This service operates globally as a singleton, listening to window resize events\n * and maintaining reactive state about the current screen and zoom conditions.\n * It also writes attributes to the `<body>` element so that CSS rules can respond\n * to screen state without requiring Angular bindings.\n *\n * **Key Features:**\n * - Screen size classification (s / m / l / xl) based on viewport dimensions\n * - Orientation detection (portrait / landscape), with native API fallback on mobile\n * - Small-screen layout signal for toggling compact UI modes\n * - Browser zoom level tracking via `pageZoomPercentage$`\n * - Automatic `<body>` attribute management for CSS-driven responsive styles\n *\n * **Usage:**\n * 1. `DeviceService` is initialized automatically by `provideYmtMaterial()` in `app.config.ts`\n * 2. Pass `{ supportsSmallScreens: true }` to `provideYmtMaterial()` if the app has a dedicated compact layout\n * 3. Inject `DeviceService` wherever needed — it is already initialized\n * 4. Subscribe to `screenChange$` or `pageZoomPercentage$` to react to changes\n *\n * **Body attributes written by this service:**\n * - `data-screen-size` — current size bucket: `s` | `m` | `l` | `xl`\n * - `data-screen-orientation` — `portrait` | `landscape`\n * - `data-touch-enabled` — present only when the device supports touch input\n *\n * ```html\n * <body data-screen-size=\"l\" data-screen-orientation=\"landscape\">\n * ...\n * </body>\n * ```\n *\n * **Screen size boundaries:**\n *\n * | Size | Range | Device |\n * |------|----------------------------|-----------------------------------|\n * | `s` | < 600px | mobile phone |\n * | `m` | 600px – 900/1200px | tablet (upper bound by orientation) |\n * | `l` | 900/1200px – 1800px | desktop |\n * | `xl` | ≥ 1800px | wide / large desktop |\n *\n * @see {@link DeviceScreen} for the screen state shape emitted by `screenChange$`\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceService {\n //#region Dependencies\n\n #deviceDetectorService = inject(DeviceDetectorService);\n\n //#endregion\n\n //#region Properties\n\n #upperScreenBoundary = {\n small: 600,\n mediumPortrait: 900,\n mediumLandscape: 1200,\n large: 1800\n };\n\n #resize$ = fromEvent(window, 'resize').pipe(debounceTime(this.#getDebounceTime()));\n #screen?: DeviceScreen;\n #screenSource = new ReplaySubject<DeviceScreen>(1);\n\n /**\n * Emits the current {@link DeviceScreen} state whenever the window is resized.\n *\n * The emitted value includes the size bucket (`s` | `m` | `l` | `xl`), orientation,\n * and the raw viewport dimensions in pixels. Use this stream to reactively adapt\n * layout or behavior whenever the screen state changes.\n *\n * Replay buffer of 1 — late subscribers always receive the most recent value\n * without waiting for the next resize event.\n *\n * @example\n * ```ts\n * deviceService.screenChange$.subscribe(screen => {\n * console.log(screen.size); // 'l'\n * console.log(screen.orientation); // 'landscape'\n * console.log(screen.width); // 1440\n * });\n * ```\n */\n screenChange$: Observable<DeviceScreen> = this.#screenSource.asObservable();\n\n /**\n * Signal that indicates whether the app should render in a compact small-screen layout.\n *\n * This is `true` only when all three conditions are met:\n * 1. `supportsSmallScreens` was passed as `true` to {@link init}\n * 2. The current screen size bucket is `s` (< 600px viewport width)\n * 3. The current orientation is `portrait`\n *\n * Components that have a dedicated compact mode should read this signal\n * and switch their layout accordingly.\n *\n * @default false\n */\n smallScreenLayout = signal<boolean>(false);\n\n #supportsSmallScreens = signal<boolean>(false);\n\n /**\n * `true` if the current device is a mobile phone (Android, iPhone, Windows Phone, etc.).\n * Populated once at service creation from `ngx-device-detector`.\n */\n isMobile: boolean = this.#deviceDetectorService.isMobile();\n\n /**\n * `true` if the current device is a tablet (e.g. iPad).\n * Populated once at service creation from `ngx-device-detector`.\n */\n isTablet: boolean = this.#deviceDetectorService.isTablet();\n\n /**\n * `true` if the app is running in a desktop browser.\n * Populated once at service creation from `ngx-device-detector`.\n */\n isDesktop: boolean = this.#deviceDetectorService.isDesktop();\n\n /**\n * Detailed device and browser information provided by `ngx-device-detector`.\n * Includes OS, browser name and version, device type, and user agent.\n */\n info?: DeviceInfo = this.#deviceDetectorService.getDeviceInfo();\n\n /**\n * `true` if the device supports touch input.\n * Detected via `ontouchstart` presence or `navigator.maxTouchPoints > 0`.\n */\n isTouchEnabled = this.#isTouchEnabled();\n\n #pageZoom$ = new BehaviorSubject<number>(0);\n\n /**\n * Emits the current browser zoom level as a percentage whenever it changes.\n *\n * The value is derived from `window.outerWidth / window.innerWidth * 100`.\n * At 100% zoom the value is `100`, at 150% it is `150`, and so on.\n *\n * Emits only when the value actually changes (no duplicate emissions).\n * Updates are driven by the window `resize` event, which all major browsers\n * fire when the user changes the zoom level via Ctrl+/- or Ctrl+scroll.\n * On desktop there is a 500ms debounce; on mobile, no debounce is applied.\n *\n * @example\n * ```ts\n * deviceService.pageZoomPercentage$.subscribe(zoom => {\n * console.log(`Current zoom: ${zoom}%`); // e.g. \"Current zoom: 150%\"\n * });\n * ```\n */\n pageZoomPercentage$ = this.#pageZoom$.asObservable();\n\n //#endregion\n\n //#region Public APIs\n\n /**\n * Initializes the service and performs the first screen state evaluation.\n *\n * Called automatically by `provideYmtMaterial()` during application startup.\n *\n * Immediately evaluates the current viewport dimensions, classifies the screen size\n * and orientation, writes the result to the `<body>` attributes, and emits the initial\n * value on `screenChange$`. Subsequent updates are handled automatically via the\n * internal resize listener.\n *\n * @param supportsSmallScreens - Set to `true` if the application has a dedicated compact\n * layout for small portrait screens. When `true`, the {@link smallScreenLayout} signal\n * will be set to `true` whenever the screen bucket is `s` and orientation is `portrait`.\n * Defaults to `false`.\n */\n init(supportsSmallScreens = false): void {\n this.#supportsSmallScreens.set(supportsSmallScreens);\n this.#setScreen();\n this.#setPageZoom();\n this.#handleScreenResize();\n }\n\n //#endregion\n\n //#region Utilities\n\n #getPageZoom(): number {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n return (window.outerWidth / window.innerWidth) * 100;\n }\n\n #setPageZoom(): void {\n const zoom = this.#getPageZoom();\n if (zoom !== this.#pageZoom$.value) {\n this.#pageZoom$.next(zoom);\n }\n }\n\n #handleScreenResize(): void {\n this.#resize$.subscribe(() => {\n this.#setScreen();\n this.#setPageZoom();\n });\n }\n\n #isTouchEnabled(): boolean {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n #setScreen(): void {\n const bounds: DeviceScreenBounds = {\n width: window.innerWidth,\n height: window.innerHeight\n };\n let orientation: DeviceScreenOrientation =\n bounds.width >= bounds.height ? DeviceScreenOrientation.LANDSCAPE : DeviceScreenOrientation.PORTRAIT;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.isMobile && window.screen['orientation']) {\n const screenOrientation = window.screen['orientation'].type;\n if (screenOrientation === 'landscape-primary' || screenOrientation === 'landscape-secondary') {\n orientation = DeviceScreenOrientation.LANDSCAPE;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n } else if (screenOrientation === 'portrait-primary' || screenOrientation === 'portrait-secondary') {\n orientation = DeviceScreenOrientation.PORTRAIT;\n }\n }\n this.#screen = {\n size: this.#getScreenSize(bounds, orientation),\n orientation,\n width: bounds.width,\n height: bounds.height\n };\n this.#screenSource.next(this.#screen);\n this.smallScreenLayout.set(\n this.#supportsSmallScreens() && this.#screen.size === 's' && this.#screen.orientation === 'portrait'\n );\n this.#setupDOM(this.#screen);\n // force change detection because resize will not be recognized by Angular in some cases\n // TODO: check: causes recursive ticks in some cases ...\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setTimeout(() => {}, 0);\n }\n\n #setupDOM(screen: DeviceScreen): void {\n const body: HTMLBodyElement = document.querySelector('body') as HTMLBodyElement;\n body.setAttribute('data-screen-size', screen.size);\n body.setAttribute('data-screen-orientation', screen.orientation);\n if (this.isTouchEnabled) body.setAttribute('data-touch-enabled', 'true');\n else body.removeAttribute('data-touch-enabled');\n }\n\n #getScreenSize(bounds: DeviceScreenBounds, orientation: DeviceScreenOrientation): ScreenSize {\n if (this.#isBelow(this.#upperScreenBoundary.small, bounds)) {\n return 's';\n } else if (\n this.#isBelow(\n orientation === 'landscape'\n ? this.#upperScreenBoundary.mediumLandscape\n : this.#upperScreenBoundary.mediumPortrait,\n bounds\n )\n ) {\n return 'm';\n } else if (this.#isBelow(this.#upperScreenBoundary.large, bounds)) {\n return 'l';\n } else {\n return 'xl';\n }\n }\n\n #isBelow(size: number, bounds: DeviceScreenBounds): boolean {\n const landscape = bounds.width < this.#upperScreenBoundary.large ? bounds.width >= bounds.height : false;\n return (landscape && bounds.height < size) || (!landscape && bounds.width < size);\n }\n\n #getDebounceTime(): number {\n // on mobile devices resize only happens when rotating the device or when\n // keyboard appears, so we don't need to debounce\n return this.isMobile ? 0 : 500;\n }\n\n //#endregion\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { TranslateService } from '@ngx-translate/core';\n\n/* Draft */\n@Injectable()\nexport class YmtMatPaginatorIntlService extends MatPaginatorIntl {\n #translate = inject(TranslateService);\n rangeLabelSeparator: string = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n \n override getRangeLabel = (\n page: number,\n pageSize: number,\n length: number\n ) => {\n if (length === 0 || pageSize === 0) {\n return `0 ${this.rangeLabelSeparator} ${length}`;\n }\n \n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ?\n Math.min(startIndex + pageSize, length) :\n startIndex + pageSize;\n return `${startIndex + 1} - ${endIndex} ${this.rangeLabelSeparator} ${length}`;\n };\n \n //=== Proposal =========================================================\n \n injectTranslateService(translate: TranslateService) {\n this.#translate = translate;\n \n this.#translate.onLangChange.subscribe(() => {\n this.translateLabels();\n });\n \n this.translateLabels();\n }\n \n translateLabels() {\n this.itemsPerPageLabel = this.#translate.instant('ymt.paginator.itemsPerPageLabel');\n this.nextPageLabel = this.#translate.instant('ymt.paginator.nextPageLabel');\n this.previousPageLabel = this.#translate.instant('ymt.paginator.previousPageLabel');\n this.firstPageLabel = this.#translate.instant('ymt.paginator.firstPageLabel');\n this.lastPageLabel = this.#translate.instant('ymt.paginator.lastPageLabel');\n this.rangeLabelSeparator = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n this.changes.next();\n }\n \n //=== Proposal END =====================================================\n}\n","import {\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n Provider\n} from '@angular/core';\nimport {\n MAT_DATE_FORMATS,\n MAT_DATE_LOCALE,\n MAT_RIPPLE_GLOBAL_OPTIONS,\n RippleGlobalOptions\n} from '@angular/material/core';\nimport { MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig } from '@angular/material/dialog';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormFieldDefaultOptions } from '@angular/material/form-field';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { MAT_TABS_CONFIG, MatTabsConfig } from '@angular/material/tabs';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipDefaultOptions } from '@angular/material/tooltip';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DeviceService, YMT_DATE_FORMATS } from '../services';\nimport { YmtMatIconRegistryService } from '../services/ymt-mat-icon-registry.service';\nimport { YmtMatPaginatorIntlService } from '../services/ymt-mat-paginator-intl.service';\n\nexport const provideYmtMaterial = (\n customTheme?: any[],\n options?: { supportsSmallScreens: boolean }\n): EnvironmentProviders => {\n const providers: Provider[] = [\n /**\n * Material Date Locale Default\n */\n {\n provide: MAT_DATE_LOCALE,\n useFactory: (translate: TranslateService) => translate.defaultLang,\n deps: [TranslateService]\n },\n { provide: MAT_DATE_FORMATS, useValue: YMT_DATE_FORMATS },\n\n /**\n * Material Datepicker Internationalization Service Override\n */\n /*{\n provide: MatDatepickerIntl,\n useClass: YmtDatepickerIntlService,\n deps: [TranslateService],\n },*/\n /*{\n provide: MatDatepickerIntl,\n deps: [[new Optional(), new SkipSelf(), MatDatepickerIntl]],\n useFactory: (parentIntl: MatDatepickerIntl)=> {\n return parentIntl || new YmtDatepickerIntlService();\n },\n },*/\n\n /**\n * Material Date Adapter\n */\n // provideYmtDateAdapter(),\n\n /**\n * Material Icon Registry Service Override\n */\n { provide: MatIconRegistry, useClass: YmtMatIconRegistryService },\n\n /**\n * Material Ripple Config\n */\n { provide: MAT_RIPPLE_GLOBAL_OPTIONS, useValue: { disabled: true } as RippleGlobalOptions },\n\n {\n provide: MAT_DIALOG_DEFAULT_OPTIONS,\n useValue: {\n ...new MatDialogConfig(),\n closeOnNavigation: false\n }\n },\n\n /**\n * Material Paginator Internationalization Service Override\n */\n {\n provide: MatPaginatorIntl,\n useFactory: (translate: TranslateService) => {\n const service = new YmtMatPaginatorIntlService();\n service.injectTranslateService(translate);\n return service;\n },\n deps: [TranslateService]\n },\n\n /**\n * Material Tooltip Config\n */\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: {\n showDelay: 500,\n positionAtOrigin: true,\n disableTooltipInteractivity: true\n } as MatTooltipDefaultOptions\n },\n\n /**\n * Material Form Field Config\n */\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n appearance: 'outline',\n floatLabel: 'always',\n subscriptSizing: 'dynamic'\n } as MatFormFieldDefaultOptions\n },\n\n /**\n * Material Tab Config\n */\n {\n provide: MAT_TABS_CONFIG,\n useValue: {\n animationDuration: '0',\n stretchTabs: false,\n alignTabs: 'start'\n } as MatTabsConfig\n }\n ];\n return makeEnvironmentProviders([\n ...providers,\n provideEnvironmentInitializer(() => {\n inject(DeviceService).init(options?.supportsSmallScreens);\n })\n ]);\n};\n","export enum YMT_ICON_BUTTON_SIZE {\n extraSmall = 'extra-small',\n small = 'small',\n medium = 'medium'\n}\n","import {\n AfterViewInit,\n ApplicationRef,\n booleanAttribute,\n ComponentRef,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { YMT_ICON_BUTTON_SIZE } from './ymt-icon-button.model';\n\n@Directive({\n selector: 'button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]',\n standalone: true,\n host: {\n 'mat-icon-button': ''\n }\n})\nexport class YmtIconButtonDirective implements AfterViewInit {\n disabled = input(false, { transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { transform: booleanAttribute, alias: 'aria-disabled' });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'extra-small' | 'small' | 'medium' | YMT_ICON_BUTTON_SIZE>(\n YMT_ICON_BUTTON_SIZE.medium,\n { alias: 'icon-button-size' }\n );\n\n #elRef = inject(ElementRef);\n #host = this.#elRef.nativeElement;\n #injector = inject(EnvironmentInjector);\n #appRef = inject(ApplicationRef);\n #MatIconButtonComponentRef: ComponentRef<MatIconButton> | null = null;\n #materialIconButtonInputs = [\n { name: 'disabled', signal: this.disabled },\n { name: 'disableRipple', signal: this.disableRipple },\n { name: 'aria-disabled', signal: this.ariaDisabled },\n { name: 'disabledInteractive', signal: this.disabledInteractive }\n ];\n\n constructor() {\n effect(() => this.#applySizeClass());\n effect(() => this.#setMaterialInputs());\n }\n\n ngAfterViewInit() {\n this.#MatIconButtonComponentRef = this.#createComponent();\n this.#setMaterialInputs();\n }\n\n #applySizeClass() {\n const size = this.size();\n const host = this.#host.classList;\n host.toggle('ymt-icon-button--size-xs', size === YMT_ICON_BUTTON_SIZE.extraSmall);\n host.toggle('ymt-icon-button--size-s', size === YMT_ICON_BUTTON_SIZE.small);\n host.toggle('ymt-icon-button--size-m', size === YMT_ICON_BUTTON_SIZE.medium);\n }\n\n #setMaterialInputs() {\n const inputs = this.#materialIconButtonInputs.map(({ name, signal }) => ({ name, value: signal() }));\n if (this.#MatIconButtonComponentRef) {\n inputs.forEach(({ name, value }) => this.#MatIconButtonComponentRef!.setInput(name, value));\n }\n }\n\n #createComponent() {\n const matIcon = this.#host.querySelector('mat-icon'); //todo support also upcoming yuv-icon\n const environmentInjector = this.#injector;\n const hostElement = this.#host;\n const componentRef = createComponent(MatIconButton, { hostElement, projectableNodes: [[matIcon]], environmentInjector });\n this.#appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n}\n","export enum YMT_BUTTON_SIZE {\n small = 'small',\n medium = 'medium'\n}\n","import {\n ApplicationRef,\n createComponent,\n Directive,\n ElementRef,\n EnvironmentInjector,\n input,\n OnInit,\n AfterViewInit,\n inject,\n effect,\n ComponentRef,\n booleanAttribute\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { YMT_BUTTON_SIZE } from './ymt-button.model';\n\ntype ButtonType = 'primary' | 'secondary' | 'tertiary' | 'danger';\nconst MatButtonAttributeMap: Record<ButtonType, string> = {\n primary: 'mat-flat-button',\n secondary: 'mat-stroked-button',\n tertiary: 'mat-button',\n danger: 'mat-flat-button'\n};\n\n@Directive({\n selector: 'button[ymtButton], a[ymtButton]',\n standalone: true\n})\nexport class YmtButtonDirective implements OnInit, AfterViewInit {\n ymtButton = input<ButtonType>('primary');\n disabled = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { alias: 'aria-disabled', transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'small' | 'medium' | YMT_BUTTON_SIZE>(YMT_BUTTON_SIZE.medium, { alias: 'button-size' });\n // Todo: Add input \"isBusy\" as \"busy inactive state\": not clickable and with mat-spinner in button\n\n #environmentInjector = inject(EnvironmentInjector);\n #applicationRef = inject(ApplicationRef);\n #hostElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n #matButtonComponentRef: ComponentRef<MatButton> | null = null;\n\n #iconPrefix: Element[] = [];\n #noneIconNodes: Node[] = [];\n #iconSuffix: Element[] = [];\n\n #matButtonAttribute = MatButtonAttributeMap;\n\n constructor() {\n effect(() => {\n const disabled = this.disabled();\n const ariaDisabled = this.ariaDisabled();\n const disableRipple = this.disableRipple();\n const disabledInteractive = this.disabledInteractive();\n this.#updateInputs(disabled, ariaDisabled, disableRipple, disabledInteractive);\n });\n\n effect(() => {\n this.#applySizeClass();\n });\n }\n\n ngOnInit() {\n this.#iconPrefix = this.#getIconPrefixElements();\n this.#noneIconNodes = this.#getNoneIconNodes();\n this.#iconSuffix = this.#getIconSuffixElements();\n this.#matButtonComponentRef = this.#createMatButtonComponent();\n }\n\n ngAfterViewInit() {\n this.#updateInputs();\n }\n\n #updateInputs(\n disabled: boolean = this.disabled(),\n ariaDisabled: boolean = this.ariaDisabled(),\n disableRipple: boolean = this.disableRipple(),\n disabledInteractive: boolean = this.disabledInteractive()\n ) {\n this.#matButtonComponentRef?.setInput('disabled', disabled);\n this.#matButtonComponentRef?.setInput('aria-disabled', ariaDisabled);\n this.#matButtonComponentRef?.setInput('disableRipple', disableRipple);\n this.#matButtonComponentRef?.setInput('disabledInteractive', disabledInteractive);\n }\n\n #createMatButtonComponent(\n hostElement: HTMLElement = this.#hostElement,\n environmentInjector: EnvironmentInjector = this.#environmentInjector,\n iconPrefix: Element[] = this.#iconPrefix,\n noneIconNodes: Node[] = this.#noneIconNodes,\n iconSuffix: Element[] = this.#iconSuffix\n ) {\n this.#setInitialAttributesToHost();\n const componentRef = createComponent(MatButton, {\n environmentInjector,\n hostElement,\n projectableNodes: [[...iconPrefix], [...noneIconNodes], [...iconSuffix]]\n });\n this.#applicationRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n\n #setInitialAttributesToHost() {\n this.#hostElement.setAttribute(this.#matButtonAttribute[this.ymtButton()], '');\n if (this.ymtButton() === 'danger') {\n this.#hostElement.classList.add('ymt-button--danger');\n }\n }\n\n #getIconPrefixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon:not([iconPositionEnd])'));\n }\n\n #getIconSuffixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon[iconPositionEnd]'));\n }\n\n #getNoneIconNodes() {\n const iter = document.createNodeIterator(this.#hostElement, NodeFilter.SHOW_ALL, (node) => {\n return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#hostElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n });\n let currentNode: Node | null;\n const filteredNodes: Node[] = [];\n while ((currentNode = iter.nextNode())) {\n filteredNodes.push(currentNode);\n }\n return filteredNodes;\n }\n\n #applySizeClass() {\n this.size() === YMT_BUTTON_SIZE.small ? this.#hostElement.classList.add(`ymt-button--size-s`) : this.#hostElement.classList.remove(`ymt-button--size-s`);\n this.size() === YMT_BUTTON_SIZE.medium ? this.#hostElement.classList.add(`ymt-button--size-m`) : this.#hostElement.classList.remove(`ymt-button--size-m`);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n HostBinding,\n HostListener,\n inject,\n Input,\n input,\n OnDestroy,\n Renderer2,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatInput } from '@angular/material/input';\nimport { AbstractControlDirective, ControlValueAccessor, FormControlStatus, FormGroup, FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormField, MatFormFieldControl } from '@angular/material/form-field';\nimport { TranslateService } from '@ngx-translate/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerIntl,\n MatDateRangeInput,\n MatDateRangePicker,\n MatEndDate,\n MatStartDate\n} from '@angular/material/datepicker';\nimport { MatTimepicker, MatTimepickerInput } from '@angular/material/timepicker';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MAT_NATIVE_DATE_FORMATS, MatDateFormats, NativeDateModule } from '@angular/material/core';\nimport { YmtDatepickerIntlService } from '../../services/ymt-datepicker-intl.service';\nimport { provideYmtDateAdapter, YMT_DATE_FORMATS } from '../../services';\n\ntype DatepickerValue = DatetimeValue;\ntype DatetimeValue = Date | string | null;\ntype MultiDateValue = Set<Date> | null; // not implemented yet!\ntype DateRangeValue = IRangeValue<DatetimeValue> | null; // not implemented yet!\nexport type DatepickerMode = keyof typeof EnumDatepickerMode;\nenum EnumDatepickerMode {\n DATE = 'DATE',\n // MULTI_DATE = 'MULTI_DATE', // not implemented yet!\n DATE_RANGE = 'DATE_RANGE',\n TIME = 'TIME'\n}\ninterface IRangeValue<T = unknown> {\n start: T;\n end: T;\n}\nexport interface DateRangePlaceholder {\n startDate: string;\n endDate: string;\n}\n/**\n * @deprecated\n */\n@Component({\n selector: 'ymt-datepicker',\n templateUrl: './datepicker.component.html',\n styleUrl: './datepicker.component.scss',\n standalone: true,\n imports: [\n CommonModule,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n MatDatepicker,\n MatDatepickerInput,\n MatTimepicker,\n MatTimepickerInput,\n MatDateRangeInput,\n MatDateRangePicker,\n MatEndDate,\n MatStartDate,\n NativeDateModule\n ],\n providers: [\n { provide: MatFormFieldControl, useExisting: DatepickerComponent },\n /*{\n provide: MAT_DATE_FORMATS,\n useValue: {\n ...MAT_NATIVE_DATE_FORMATS,\n display: {\n ...MAT_NATIVE_DATE_FORMATS.display,\n dateInput: {\n ...MAT_NATIVE_DATE_FORMATS.display.dateInput,\n day: 'numeric' as Intl.DateTimeFormatOptions['day'] // has effect\n }\n }\n } as MatDateFormats,\n },*/\n { provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService },\n provideYmtDateAdapter()\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatepickerComponent implements MatFormFieldControl<DatepickerValue>, ControlValueAccessor, AfterViewInit, OnDestroy {\n // Todo: Refactoring: Write BaseMatFormFieldControlComponent class for further custom controls in @yuuvis/material\n // Done: Internationalization\n // Done: Implement Datepicker features and options:\n // // [X] max\n // // [X] min\n // Done: MatFormFieldControl implementation:\n // // [x]handling errorState: https://material.angular.dev/components/input/overview#changing-when-error-messages-are-shown\n // // [x]handling focus\n // // [x]handling setDescribedByIds(ids: string[]): void\n // // [x] set aria-labeledby\n // // [x] set disabled\n // Todo: Refactoring: Better solution for handling value changes from input-element to model (kill ngModelOptions on inputs)\n // Todo: Better solution for DATE_RANGE-mode: content projection for input[matStartDate/matEndDate]\n // Done: Check aria-describedby logic of MatFormField to implement the correct setting\n // Done: Trigger\"stateChanges\" in effect function\n // Done: set errorState when input value is invalid\n // Done: Check how to destroy the component and complete stateChanges Observable\n // Done: Check how to get the ngControl instance of this component (optionally set)\n\n #translate = inject(TranslateService);\n #dateAdapter = inject(DateAdapter);\n #locale = signal(inject<unknown>(MAT_DATE_LOCALE));\n #injectNgControl = (ngC = inject(NgControl, { self: true, optional: true })) => (ngC ? (ngC.valueAccessor = this) && ngC : null);\n #destroyRef = inject(DestroyRef);\n #formField = inject(MatFormField, { optional: true });\n\n // implemented as part of MatFormFieldControl interface\n ngControl: NgControl | AbstractControlDirective | null = this.#injectNgControl();\n stateChanges = new Subject<void>();\n\n @HostListener('focusin') onFocusIn() {\n this.focused = true;\n }\n @HostListener('focusout') onFocusout() {\n this.focused = false;\n this.propagateTouched();\n }\n\n #value = signal<DatepickerValue>(null);\n @Input()\n set value(v: DatepickerValue) {\n let _value = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));\n const _previousValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(this.ngControl?.value));\n if (_value && _previousValue) {\n if (this.mode === EnumDatepickerMode.TIME) {\n _value = new Date(_previousValue.setHours(_value.getHours(), _value.getMinutes()));\n } else if (this.mode === EnumDatepickerMode.DATE) {\n _value = new Date(_value.setHours(_previousValue.getHours(), _previousValue.getMinutes()));\n }\n } else {\n _value = v;\n }\n this.#value.set(_value);\n this.#empty.set(!_value);\n this.propagateChange(this.value);\n }\n get value(): DatepickerValue {\n return this.#value();\n }\n\n #disabled = signal<boolean>(false);\n @Input()\n set disabled(v: BooleanInput) {\n this.#disabled.set(coerceBooleanProperty(v));\n this.timepickerInput()?.setDisabledState(this.#disabled());\n }\n get disabled(): boolean {\n return this.#disabled();\n }\n\n #id = signal<string>('');\n @Input()\n set id(v: string) {\n this.#id.set(v);\n }\n get id(): string {\n return this.#id();\n }\n\n #placeholder = signal<string>('');\n @Input()\n set placeholder(v: string) {\n this.#placeholder.set(v);\n }\n get placeholder(): string {\n return this.#placeholder();\n }\n\n #required = signal<boolean>(false);\n @Input()\n set required(v: BooleanInput) {\n this.#required.set(coerceBooleanProperty(v));\n }\n get required(): boolean {\n return this.#required();\n }\n\n #userAriaDescribedBy = signal<string>('');\n @Input()\n set userAriaDescribedBy(v: string) {\n this.#userAriaDescribedBy.set(v);\n }\n get userAriaDescribedBy(): string {\n return this.#userAriaDescribedBy();\n }\n\n #empty = signal<boolean>(false);\n set empty(v: boolean) {\n this.#empty.set(v);\n }\n get empty() {\n return this.#empty();\n }\n\n #errorState = signal<boolean>(false);\n set errorState(v: boolean) {\n this.#errorState.set(v);\n }\n get errorState() {\n return this.#errorState();\n }\n\n #focused = signal<boolean>(false);\n set focused(v: boolean) {\n this.#focused.set(v);\n }\n get focused() {\n return this.#focused();\n }\n\n // implemented as part of MatFormFieldControl interface\n @HostBinding('class.floating')\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n readonly autofilled?: boolean;\n readonly controlType: string = 'datepicker';\n readonly disableAutomaticLabeling: boolean = false;\n\n protected readonly datepickerMode = EnumDatepickerMode;\n protected readonly datepicker = viewChild('datepicker', { read: MatDatepicker<never> });\n protected readonly rangepicker = viewChild<MatDateRangePicker<never>>('rangepicker');\n protected readonly timepicker = viewChild('timepicker', { read: MatTimepicker<never> });\n protected readonly datepickerInput = viewChild<MatFormFieldControl<never>>('datepickerInput');\n protected readonly timepickerInput = viewChild<MatTimepickerInput<never>>('timepickerInput');\n\n #mode = signal<DatepickerMode>(EnumDatepickerMode.DATE);\n @Input()\n set mode(v: DatepickerMode) {\n this.#mode.set(v);\n }\n get mode(): DatepickerMode {\n return this.#mode();\n }\n\n #min = signal<DatepickerValue>(null);\n @Input()\n set min(v: DatepickerValue) {\n const validValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));\n\n if (!this.#dateAdapter.sameDate(validValue, this.#min())) {\n this.#min.set(validValue);\n }\n }\n get min() {\n return this.#min();\n }\n\n #max = signal<DatepickerValue>(null);\n @Input()\n set max(v: DatepickerValue) {\n const validValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));\n\n if (!this.#dateAdapter.sameDate(validValue, this.#max())) {\n this.#max.set(validValue);\n }\n }\n get max() {\n return this.#max();\n }\n\n #rangePlaceholder = signal<DateRangePlaceholder>({ startDate: 'Start Date', endDate: 'End Date' });\n @Input()\n set rangePlaceholder(v: DateRangePlaceholder) {\n this.#rangePlaceholder.set(v);\n }\n get rangePlaceholder(): DateRangePlaceholder {\n return this.#rangePlaceholder();\n }\n\n rangeValue = { start: '', end: '' };\n\n startDateFormControlName = input<string>('');\n endDateFormControlName = input<string>('');\n formGroup = input<FormGroup>();\n\n constructor() {\n // triggers state changes for the MatFormFieldControl\n effect(() => {\n this.#value();\n this.#placeholder();\n this.#rangePlaceholder(); // Todo: Check if it needs to trigger \"stateChanges\"!\n this.#disabled();\n this.#id();\n this.#focused();\n this.#empty();\n this.#required();\n this.#errorState();\n this.#locale();\n this.#mode();\n this.#min();\n this.#max();\n untracked(() => this.stateChanges.next());\n });\n\n // handle language change\n this.#translate.onLangChange.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((event) => {\n this.#locale.set(event.lang);\n this.#dateAdapter.setLocale(this.#locale());\n });\n // effect(() => {\n // this.#value();\n // untracked(() => console.log('DatepickerComponent.value: ', this.value));\n // });\n }\n\n // implemented as part of ControlValueAccessor interface\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange: (_: any) => void = () => {};\n // implemented as part of ControlValueAccessor interface\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateTouched: () => void = () => {};\n\n // implemented as part of ControlValueAccessor interface\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // implemented as part of ControlValueAccessor interface\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n\n // implemented as part of ControlValueAccessor interface\n writeValue(date: DatepickerValue): void {\n this.value = date;\n }\n\n // implemented as part of ControlValueAccessor interface\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // implemented as part of MatFormFieldControl interface\n onContainerClick(event: MouseEvent): void {\n const focusableInput = this.datepickerInput();\n if (focusableInput && !this.focused && !this.disabled) {\n // sets focus to MatFormFieldControls\n focusableInput.onContainerClick(event);\n this.focused = true;\n }\n }\n\n // implemented as part of MatFormFieldControl interface\n setDescribedByIds(ids: string[]): void {\n this.datepickerInput()?.setDescribedByIds(ids);\n }\n\n ngAfterViewInit(): void {\n const _datepickerInput = this.datepickerInput();\n const _formField = this.#formField;\n\n if (_datepickerInput) {\n // set MatFormFieldControl.id for auto labeling within a MatFormField\n this.id = _datepickerInput.id || this.id;\n // track datepicker input state changes as they are MatFormFieldControl inputs\n _datepickerInput.stateChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n // set errorState\n this.errorState = _datepickerInput.errorState;\n // set disabled state\n this.disabled = _datepickerInput.disabled;\n });\n }\n\n // set the input's aria-describedby attribute to the parent MatFormField._hintLabelIds (=\"label-1 label-2 ...\")\n if (_formField) {\n this.setDescribedByIds([..._formField._hintLabelId.split(' ')]);\n }\n\n // set errorState for Range-Mode\n this.formGroup()\n ?.statusChanges.pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((v: FormControlStatus) => {\n this.errorState = v === 'INVALID';\n });\n\n this.ngControl?.valueChanges?.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((value) => {\n // get the previous value of the associated formFieldControl\n if (!this.value && value) this.value = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(value));\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n /* Custom Datepicker Functions */\n\n open(): void {\n this.datepicker()?.open();\n this.rangepicker()?.open();\n this.timepicker()?.open();\n }\n}\n","@switch (mode) {\n @case (datepickerMode.DATE) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matDatepicker]=\"datepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n }\n @case (datepickerMode.DATE_RANGE) {\n @let formGroup = this.formGroup();\n @let startDate = this.startDateFormControlName();\n @let endDate = this.endDateFormControlName();\n @if (formGroup && startDate && endDate) {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [formGroup]=\"formGroup\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" [formControlName]=\"startDate\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" [formControlName]=\"endDate\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n } @else {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" (dateChange)=\"rangeValue.start = $event.value\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" (dateChange)=\"rangeValue.end = $event.value\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n }\n }\n @case (datepickerMode.TIME) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matTimepicker]=\"timepicker\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n #timepickerInput=\"matTimepickerInput\"\n >\n <mat-timepicker #timepicker/>\n }\n @default {\n <input\n type=\"datetime-locale\"\n [placeholder]=\"placeholder\"\n matInput\n [(ngModel)]=\"value\"\n #datepickerInput=\"matInput\"\n />\n }\n}\n\n","import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, Input, OnDestroy, OnInit, signal } from '@angular/core';\nimport { MatDatepickerIntl } from '@angular/material/datepicker';\nimport { DatepickerComponent } from '../datepicker';\nimport { YmtDatepickerIntlService } from '../../services';\nimport { YmtIconButtonDirective } from '../../directives';\nimport { MatIcon } from '@angular/material/icon';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'ymt-datepicker-toggle',\n template: `\n <button type=\"button\" ymtIconButton [attr.aria-label]=\"ariaLabel\" [aria-disabled]=\"disabled\" [disabled]=\"disabled\">\n <ng-content select=\"mat-icon\"></ng-content>\n </button>\n `,\n imports: [YmtIconButtonDirective],\n providers: [{ provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService }],\n host: {\n // Bind the `click` on the host, rather than the inner `button`, so that we can call\n // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n // it so that the input doesn't get focused automatically by the form field (See #21836).\n '(click)': '_open($event)'\n },\n exportAs: 'matDatepickerToggle',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatepickerToggleComponent implements OnInit, OnDestroy {\n #intl = inject(MatDatepickerIntl);\n #destroyRef = inject(DestroyRef);\n\n #datepicker = signal<DatepickerComponent | null>(null);\n @Input({ alias: 'for', required: true })\n set datepicker(v: DatepickerComponent | null) {\n this.#datepicker.set(v);\n }\n get datepicker() {\n return this.#datepicker();\n }\n\n #disabled = signal<boolean>(false);\n @Input()\n set disabled(v: BooleanInput) {\n this.#disabled.set(coerceBooleanProperty(v));\n }\n get disabled(): boolean {\n return this.#disabled();\n }\n\n #ariaLabel = signal(this.#intl.openCalendarLabel);\n @Input()\n set ariaLabel(v: string) {\n this.#ariaLabel.set(v);\n }\n get ariaLabel() {\n return this.#ariaLabel();\n }\n\n stateChanges = new Subject<void>();\n\n constructor() {\n effect(() => {\n this.#datepicker();\n this.#disabled();\n this.#ariaLabel();\n this.stateChanges.next();\n });\n }\n\n _open(event: Event): void {\n if (this.datepicker && !this.disabled) {\n this.datepicker.open();\n event.stopPropagation();\n }\n }\n\n ngOnInit(): void {\n const datepicker = this.datepicker;\n if (datepicker) {\n datepicker.stateChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n this.ariaLabel = this.#intl.openCalendarLabel;\n if (this.disabled !== datepicker.disabled) {\n this.disabled = datepicker.disabled;\n }\n });\n } else {\n throw new Error(`DatepickerComponent is missing on DatepickerToggleComponent's \"for\"-attribute!`);\n }\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-material.mjs","sources":["../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-icon-registry.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-datepicker-intl.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-date-adapter.service.ts","../../../../../libs/yuuvis/material/src/lib/services/device.interface.ts","../../../../../libs/yuuvis/material/src/lib/services/device.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-paginator-intl.service.ts","../../../../../libs/yuuvis/material/src/lib/providers/material.providers.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/components/datepicker/datepicker.component.ts","../../../../../libs/yuuvis/material/src/lib/components/datepicker/datepicker.component.html","../../../../../libs/yuuvis/material/src/lib/components/datepicker/datepicker-toggle.component.ts","../../../../../libs/yuuvis/material/src/yuuvis-material.ts"],"sourcesContent":["import { ErrorHandler, Inject, Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DOCUMENT } from '@angular/common';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class YmtMatIconRegistryService extends MatIconRegistry {\n #ymtFontSetClassNames = ['material-symbols-sharp'];\n\n constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, @Inject(DOCUMENT) document: any, _errorHandler: ErrorHandler) {\n super(_httpClient, _sanitizer, document, _errorHandler);\n this.setDefaultFontSetClass();\n }\n\n override setDefaultFontSetClass(...classnames: string[]) {\n const merged = [...new Set([...classnames, ...this.#ymtFontSetClassNames])];\n super.setDefaultFontSetClass(...merged);\n return this;\n }\n\n static isFontIcon(input: string | null) {\n if (typeof input === 'string') {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, 'image/svg+xml');\n return coerceBooleanProperty(doc.querySelector('parsererror'));\n }\n return false;\n }\n}\n","import { MatDatepickerIntl } from '@angular/material/datepicker';\nimport { TranslateService } from '@ngx-translate/core';\nimport { inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Injectable({ providedIn: 'root' })\nexport class YmtDatepickerIntlService extends MatDatepickerIntl {\n #translate = inject(TranslateService);\n \n constructor() {\n super();\n \n this.translateLabels();\n this.#translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.translateLabels();\n });\n }\n \n translateLabels() {\n this.openCalendarLabel = this.#translate.instant('ymt.datepicker.openCalendarLabel');\n this.closeCalendarLabel = this.#translate.instant('ymt.datepicker.closeCalendarLabel');\n this.calendarLabel = this.#translate.instant('ymt.datepicker.calendarLabel');\n this.comparisonDateLabel = this.#translate.instant('ymt.datepicker.comparisonDateLabel');\n this.prevMonthLabel = this.#translate.instant('ymt.datepicker.prevMonthLabel');\n this.nextMonthLabel = this.#translate.instant('ymt.datepicker.nextMonthLabel');\n this.prevYearLabel = this.#translate.instant('ymt.datepicker.prevYearLabel');\n this.nextYearLabel = this.#translate.instant('ymt.datepicker.nextYearLabel');\n this.prevMultiYearLabel = this.#translate.instant('ymt.datepicker.prevMultiYearLabel');\n this.nextMultiYearLabel = this.#translate.instant('ymt.datepicker.nextMultiYearLabel');\n this.switchToMonthViewLabel = this.#translate.instant('ymt.datepicker.switchToMonthViewLabel');\n this.switchToMultiYearViewLabel = this.#translate.instant('ymt.datepicker.switchToMultiYearViewLabel');\n this.startDateLabel = this.#translate.instant('ymt.datepicker.startDateLabel');\n this.endDateLabel = this.#translate.instant('ymt.datepicker.endDateLabel');\n this.changes.next();\n }\n \n override formatYearRange(start: string, end: string): string {\n return super.formatYearRange(start, end);\n }\n \n override formatYearRangeLabel(start: string, end: string): string {\n return super.formatYearRangeLabel(start, end);\n }\n}\n","import { inject, Injectable, Provider } from '@angular/core';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_NATIVE_DATE_FORMATS, MatDateFormats, NativeDateAdapter } from '@angular/material/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n * @deprecated Use `YMT_DATE_FORMATS` instead.\n * @see YMT_DATE_FORMATS\n * fixes typo in the name\n */\nexport const YMT_DATE_FROMATS: MatDateFormats = {\n ...MAT_NATIVE_DATE_FORMATS,\n parse: {\n dateInput: null,\n timeInput: null\n }\n};\n\nexport const YMT_DATE_FORMATS: MatDateFormats = {\n ...MAT_NATIVE_DATE_FORMATS,\n parse: {\n dateInput: null,\n timeInput: null\n }\n};\n\nexport function provideYmtDateAdapter(formats: MatDateFormats = YMT_DATE_FORMATS): Provider[] {\n return [\n { provide: DateAdapter, useClass: YmtDateAdapterService },\n { provide: MAT_DATE_FORMATS, useValue: formats }\n ];\n}\n\ninterface IParseFormats {\n separator: '.' | '/' | '-' | string;\n order: 'mdy' | 'dmy' | 'ymd';\n}\n\n@Injectable()\nexport class YmtDateAdapterService extends NativeDateAdapter {\n #translateService = inject(TranslateService);\n\n override locale = this.#translateService.currentLang;\n\n constructor() {\n super();\n }\n\n override parse(value: any, parseFormat: any = ''): Date | null {\n // categories: { separators: ['.','/','-'], order: ['mdy','dmy','ymd'] }\n let date: Date | null = null;\n if (typeof value === 'string') {\n switch (this.locale) {\n case 'en':\n date = this.parseDateString(value, { separator: '/', order: 'mdy' });\n break;\n case 'de':\n date = this.parseDateString(value, { separator: '.', order: 'dmy' });\n break;\n case 'fi':\n date = this.parseDateString(value, { separator: '.', order: 'dmy' });\n break;\n }\n }\n return super.parse(date, parseFormat);\n }\n\n parseDateString(value: string, config: IParseFormats): Date {\n const { separator, order } = config;\n const dateStrArr = value.split(separator); // DD.MM.YYYY => { separator: '.', order: 'dmy' }\n const day = Number(dateStrArr[order.indexOf('d')]);\n const month = Number(dateStrArr[order.indexOf('m')]) - 1;\n const year = Number(dateStrArr[order.indexOf('y')]);\n const date = new Date(year, month, day);\n const debugObject = {\n config: { separator, order },\n dateStrArr,\n day,\n month,\n year,\n date\n };\n\n return date;\n }\n}\n","export enum DeviceScreenOrientation {\n PORTRAIT = 'portrait',\n LANDSCAPE = 'landscape'\n}\n\n\nexport interface DeviceScreen {\n size: ScreenSize;\n orientation: DeviceScreenOrientation\n width: number;\n height: number;\n}\n\nexport interface DeviceScreenBounds {\n width: number;\n height: number;\n}\n\nexport type ScreenSize = 's' | 'm' | 'l' | 'xl';\n\n\n","import { inject, Injectable, signal } from '@angular/core';\nimport { DeviceDetectorService, DeviceInfo } from 'ngx-device-detector';\nimport { BehaviorSubject, debounceTime, fromEvent, Observable, ReplaySubject } from 'rxjs';\nimport { DeviceScreen, DeviceScreenBounds, DeviceScreenOrientation, ScreenSize } from './device.interface';\n\n/**\n * Service that adapts the application layout and behavior to different devices,\n * screen sizes, orientations, and browser zoom levels.\n *\n * This service operates globally as a singleton, listening to window resize events\n * and maintaining reactive state about the current screen and zoom conditions.\n * It also writes attributes to the `<body>` element so that CSS rules can respond\n * to screen state without requiring Angular bindings.\n *\n * **Key Features:**\n * - Screen size classification (s / m / l / xl) based on viewport dimensions\n * - Orientation detection (portrait / landscape), with native API fallback on mobile\n * - Small-screen layout signal for toggling compact UI modes\n * - Browser zoom level tracking via `pageZoomPercentage$`\n * - Automatic `<body>` attribute management for CSS-driven responsive styles\n *\n * **Usage:**\n * 1. `DeviceService` is initialized automatically by `provideYmtMaterial()` in `app.config.ts`\n * 2. Pass `{ supportsSmallScreens: true }` to `provideYmtMaterial()` if the app has a dedicated compact layout\n * 3. Inject `DeviceService` wherever needed — it is already initialized\n * 4. Subscribe to `screenChange$` or `pageZoomPercentage$` to react to changes\n *\n * **Body attributes written by this service:**\n * - `data-screen-size` — current size bucket: `s` | `m` | `l` | `xl`\n * - `data-screen-orientation` — `portrait` | `landscape`\n * - `data-touch-enabled` — present only when the device supports touch input\n *\n * ```html\n * <body data-screen-size=\"l\" data-screen-orientation=\"landscape\">\n * ...\n * </body>\n * ```\n *\n * **Screen size boundaries:**\n *\n * | Size | Range | Device |\n * |------|----------------------------|-----------------------------------|\n * | `s` | < 600px | mobile phone |\n * | `m` | 600px – 900/1200px | tablet (upper bound by orientation) |\n * | `l` | 900/1200px – 1800px | desktop |\n * | `xl` | ≥ 1800px | wide / large desktop |\n *\n * @see {@link DeviceScreen} for the screen state shape emitted by `screenChange$`\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DeviceService {\n //#region Dependencies\n\n #deviceDetectorService = inject(DeviceDetectorService);\n\n //#endregion\n\n //#region Properties\n\n #upperScreenBoundary = {\n small: 600,\n mediumPortrait: 900,\n mediumLandscape: 1200,\n large: 1800\n };\n\n #resize$ = fromEvent(window, 'resize').pipe(debounceTime(this.#getDebounceTime()));\n #screen?: DeviceScreen;\n #screenSource = new ReplaySubject<DeviceScreen>(1);\n\n /**\n * Emits the current {@link DeviceScreen} state whenever the window is resized.\n *\n * The emitted value includes the size bucket (`s` | `m` | `l` | `xl`), orientation,\n * and the raw viewport dimensions in pixels. Use this stream to reactively adapt\n * layout or behavior whenever the screen state changes.\n *\n * Replay buffer of 1 — late subscribers always receive the most recent value\n * without waiting for the next resize event.\n *\n * @example\n * ```ts\n * deviceService.screenChange$.subscribe(screen => {\n * console.log(screen.size); // 'l'\n * console.log(screen.orientation); // 'landscape'\n * console.log(screen.width); // 1440\n * });\n * ```\n */\n screenChange$: Observable<DeviceScreen> = this.#screenSource.asObservable();\n\n /**\n * Signal that indicates whether the app should render in a compact small-screen layout.\n *\n * This is `true` only when all three conditions are met:\n * 1. `supportsSmallScreens` was passed as `true` to {@link init}\n * 2. The current screen size bucket is `s` (< 600px viewport width)\n * 3. The current orientation is `portrait`\n *\n * Components that have a dedicated compact mode should read this signal\n * and switch their layout accordingly.\n *\n * @default false\n */\n smallScreenLayout = signal<boolean>(false);\n\n #supportsSmallScreens = signal<boolean>(false);\n\n /**\n * `true` if the current device is a mobile phone (Android, iPhone, Windows Phone, etc.).\n * Populated once at service creation from `ngx-device-detector`.\n */\n isMobile: boolean = this.#deviceDetectorService.isMobile();\n\n /**\n * `true` if the current device is a tablet (e.g. iPad).\n * Populated once at service creation from `ngx-device-detector`.\n */\n isTablet: boolean = this.#deviceDetectorService.isTablet();\n\n /**\n * `true` if the app is running in a desktop browser.\n * Populated once at service creation from `ngx-device-detector`.\n */\n isDesktop: boolean = this.#deviceDetectorService.isDesktop();\n\n /**\n * Detailed device and browser information provided by `ngx-device-detector`.\n * Includes OS, browser name and version, device type, and user agent.\n */\n info?: DeviceInfo = this.#deviceDetectorService.getDeviceInfo();\n\n /**\n * `true` if the device supports touch input.\n * Detected via `ontouchstart` presence or `navigator.maxTouchPoints > 0`.\n */\n isTouchEnabled = this.#isTouchEnabled();\n\n #pageZoom$ = new BehaviorSubject<number>(0);\n\n /**\n * Emits the current browser zoom level as a percentage whenever it changes.\n *\n * The value is derived from `window.outerWidth / window.innerWidth * 100`.\n * At 100% zoom the value is `100`, at 150% it is `150`, and so on.\n *\n * Emits only when the value actually changes (no duplicate emissions).\n * Updates are driven by the window `resize` event, which all major browsers\n * fire when the user changes the zoom level via Ctrl+/- or Ctrl+scroll.\n * On desktop there is a 500ms debounce; on mobile, no debounce is applied.\n *\n * @example\n * ```ts\n * deviceService.pageZoomPercentage$.subscribe(zoom => {\n * console.log(`Current zoom: ${zoom}%`); // e.g. \"Current zoom: 150%\"\n * });\n * ```\n */\n pageZoomPercentage$ = this.#pageZoom$.asObservable();\n\n //#endregion\n\n //#region Public APIs\n\n /**\n * Initializes the service and performs the first screen state evaluation.\n *\n * Called automatically by `provideYmtMaterial()` during application startup.\n *\n * Immediately evaluates the current viewport dimensions, classifies the screen size\n * and orientation, writes the result to the `<body>` attributes, and emits the initial\n * value on `screenChange$`. Subsequent updates are handled automatically via the\n * internal resize listener.\n *\n * @param supportsSmallScreens - Set to `true` if the application has a dedicated compact\n * layout for small portrait screens. When `true`, the {@link smallScreenLayout} signal\n * will be set to `true` whenever the screen bucket is `s` and orientation is `portrait`.\n * Defaults to `false`.\n */\n init(supportsSmallScreens = false): void {\n this.#supportsSmallScreens.set(supportsSmallScreens);\n this.#setScreen();\n this.#setPageZoom();\n this.#handleScreenResize();\n }\n\n //#endregion\n\n //#region Utilities\n\n #getPageZoom(): number {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n return (window.outerWidth / window.innerWidth) * 100;\n }\n\n #setPageZoom(): void {\n const zoom = this.#getPageZoom();\n if (zoom !== this.#pageZoom$.value) {\n this.#pageZoom$.next(zoom);\n }\n }\n\n #handleScreenResize(): void {\n this.#resize$.subscribe(() => {\n this.#setScreen();\n this.#setPageZoom();\n });\n }\n\n #isTouchEnabled(): boolean {\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n }\n\n #setScreen(): void {\n const bounds: DeviceScreenBounds = {\n width: window.innerWidth,\n height: window.innerHeight\n };\n let orientation: DeviceScreenOrientation =\n bounds.width >= bounds.height ? DeviceScreenOrientation.LANDSCAPE : DeviceScreenOrientation.PORTRAIT;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.isMobile && window.screen['orientation']) {\n const screenOrientation = window.screen['orientation'].type;\n if (screenOrientation === 'landscape-primary' || screenOrientation === 'landscape-secondary') {\n orientation = DeviceScreenOrientation.LANDSCAPE;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n } else if (screenOrientation === 'portrait-primary' || screenOrientation === 'portrait-secondary') {\n orientation = DeviceScreenOrientation.PORTRAIT;\n }\n }\n this.#screen = {\n size: this.#getScreenSize(bounds, orientation),\n orientation,\n width: bounds.width,\n height: bounds.height\n };\n this.#screenSource.next(this.#screen);\n this.smallScreenLayout.set(\n this.#supportsSmallScreens() && this.#screen.size === 's' && this.#screen.orientation === 'portrait'\n );\n this.#setupDOM(this.#screen);\n // force change detection because resize will not be recognized by Angular in some cases\n // TODO: check: causes recursive ticks in some cases ...\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n setTimeout(() => {}, 0);\n }\n\n #setupDOM(screen: DeviceScreen): void {\n const body: HTMLBodyElement = document.querySelector('body') as HTMLBodyElement;\n body.setAttribute('data-screen-size', screen.size);\n body.setAttribute('data-screen-orientation', screen.orientation);\n if (this.isTouchEnabled) body.setAttribute('data-touch-enabled', 'true');\n else body.removeAttribute('data-touch-enabled');\n }\n\n #getScreenSize(bounds: DeviceScreenBounds, orientation: DeviceScreenOrientation): ScreenSize {\n if (this.#isBelow(this.#upperScreenBoundary.small, bounds)) {\n return 's';\n } else if (\n this.#isBelow(\n orientation === 'landscape'\n ? this.#upperScreenBoundary.mediumLandscape\n : this.#upperScreenBoundary.mediumPortrait,\n bounds\n )\n ) {\n return 'm';\n } else if (this.#isBelow(this.#upperScreenBoundary.large, bounds)) {\n return 'l';\n } else {\n return 'xl';\n }\n }\n\n #isBelow(size: number, bounds: DeviceScreenBounds): boolean {\n const landscape = bounds.width < this.#upperScreenBoundary.large ? bounds.width >= bounds.height : false;\n return (landscape && bounds.height < size) || (!landscape && bounds.width < size);\n }\n\n #getDebounceTime(): number {\n // on mobile devices resize only happens when rotating the device or when\n // keyboard appears, so we don't need to debounce\n return this.isMobile ? 0 : 500;\n }\n\n //#endregion\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { TranslateService } from '@ngx-translate/core';\n\n/* Draft */\n@Injectable()\nexport class YmtMatPaginatorIntlService extends MatPaginatorIntl {\n #translate = inject(TranslateService);\n rangeLabelSeparator: string = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n \n override getRangeLabel = (\n page: number,\n pageSize: number,\n length: number\n ) => {\n if (length === 0 || pageSize === 0) {\n return `0 ${this.rangeLabelSeparator} ${length}`;\n }\n \n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ?\n Math.min(startIndex + pageSize, length) :\n startIndex + pageSize;\n return `${startIndex + 1} - ${endIndex} ${this.rangeLabelSeparator} ${length}`;\n };\n \n //=== Proposal =========================================================\n \n injectTranslateService(translate: TranslateService) {\n this.#translate = translate;\n \n this.#translate.onLangChange.subscribe(() => {\n this.translateLabels();\n });\n \n this.translateLabels();\n }\n \n translateLabels() {\n this.itemsPerPageLabel = this.#translate.instant('ymt.paginator.itemsPerPageLabel');\n this.nextPageLabel = this.#translate.instant('ymt.paginator.nextPageLabel');\n this.previousPageLabel = this.#translate.instant('ymt.paginator.previousPageLabel');\n this.firstPageLabel = this.#translate.instant('ymt.paginator.firstPageLabel');\n this.lastPageLabel = this.#translate.instant('ymt.paginator.lastPageLabel');\n this.rangeLabelSeparator = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n this.changes.next();\n }\n \n //=== Proposal END =====================================================\n}\n","import {\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n provideEnvironmentInitializer,\n Provider\n} from '@angular/core';\nimport {\n MAT_DATE_FORMATS,\n MAT_DATE_LOCALE,\n MAT_RIPPLE_GLOBAL_OPTIONS,\n RippleGlobalOptions\n} from '@angular/material/core';\nimport { MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig } from '@angular/material/dialog';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormFieldDefaultOptions } from '@angular/material/form-field';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { MAT_TABS_CONFIG, MatTabsConfig } from '@angular/material/tabs';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipDefaultOptions } from '@angular/material/tooltip';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DeviceService, YMT_DATE_FORMATS } from '../services';\nimport { YmtMatIconRegistryService } from '../services/ymt-mat-icon-registry.service';\nimport { YmtMatPaginatorIntlService } from '../services/ymt-mat-paginator-intl.service';\n\nexport const provideYmtMaterial = (\n customTheme?: any[],\n options?: { supportsSmallScreens: boolean }\n): EnvironmentProviders => {\n const providers: Provider[] = [\n /**\n * Material Date Locale Default\n */\n {\n provide: MAT_DATE_LOCALE,\n useFactory: (translate: TranslateService) => translate.defaultLang,\n deps: [TranslateService]\n },\n { provide: MAT_DATE_FORMATS, useValue: YMT_DATE_FORMATS },\n\n /**\n * Material Datepicker Internationalization Service Override\n */\n /*{\n provide: MatDatepickerIntl,\n useClass: YmtDatepickerIntlService,\n deps: [TranslateService],\n },*/\n /*{\n provide: MatDatepickerIntl,\n deps: [[new Optional(), new SkipSelf(), MatDatepickerIntl]],\n useFactory: (parentIntl: MatDatepickerIntl)=> {\n return parentIntl || new YmtDatepickerIntlService();\n },\n },*/\n\n /**\n * Material Date Adapter\n */\n // provideYmtDateAdapter(),\n\n /**\n * Material Icon Registry Service Override\n */\n { provide: MatIconRegistry, useClass: YmtMatIconRegistryService },\n\n /**\n * Material Ripple Config\n */\n { provide: MAT_RIPPLE_GLOBAL_OPTIONS, useValue: { disabled: true } as RippleGlobalOptions },\n\n {\n provide: MAT_DIALOG_DEFAULT_OPTIONS,\n useValue: {\n ...new MatDialogConfig(),\n closeOnNavigation: false\n }\n },\n\n /**\n * Material Paginator Internationalization Service Override\n */\n {\n provide: MatPaginatorIntl,\n useFactory: (translate: TranslateService) => {\n const service = new YmtMatPaginatorIntlService();\n service.injectTranslateService(translate);\n return service;\n },\n deps: [TranslateService]\n },\n\n /**\n * Material Tooltip Config\n */\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: {\n showDelay: 500,\n positionAtOrigin: true,\n disableTooltipInteractivity: true\n } as MatTooltipDefaultOptions\n },\n\n /**\n * Material Form Field Config\n */\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n appearance: 'outline',\n floatLabel: 'always',\n subscriptSizing: 'dynamic'\n } as MatFormFieldDefaultOptions\n },\n\n /**\n * Material Tab Config\n */\n {\n provide: MAT_TABS_CONFIG,\n useValue: {\n animationDuration: '0',\n stretchTabs: false,\n alignTabs: 'start'\n } as MatTabsConfig\n }\n ];\n return makeEnvironmentProviders([\n ...providers,\n provideEnvironmentInitializer(() => {\n inject(DeviceService).init(options?.supportsSmallScreens);\n })\n ]);\n};\n","export enum YMT_ICON_BUTTON_SIZE {\n extraSmall = 'extra-small',\n small = 'small',\n medium = 'medium'\n}\n","import {\n AfterViewInit,\n ApplicationRef,\n booleanAttribute,\n ComponentRef,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { YMT_ICON_BUTTON_SIZE } from './ymt-icon-button.model';\n\n@Directive({\n selector: 'button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]',\n standalone: true,\n host: {\n 'mat-icon-button': ''\n }\n})\nexport class YmtIconButtonDirective implements AfterViewInit {\n disabled = input(false, { transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { transform: booleanAttribute, alias: 'aria-disabled' });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'extra-small' | 'small' | 'medium' | YMT_ICON_BUTTON_SIZE>(\n YMT_ICON_BUTTON_SIZE.medium,\n { alias: 'icon-button-size' }\n );\n\n #elRef = inject(ElementRef);\n #host = this.#elRef.nativeElement;\n #injector = inject(EnvironmentInjector);\n #appRef = inject(ApplicationRef);\n #MatIconButtonComponentRef: ComponentRef<MatIconButton> | null = null;\n #materialIconButtonInputs = [\n { name: 'disabled', signal: this.disabled },\n { name: 'disableRipple', signal: this.disableRipple },\n { name: 'aria-disabled', signal: this.ariaDisabled },\n { name: 'disabledInteractive', signal: this.disabledInteractive }\n ];\n\n constructor() {\n effect(() => this.#applySizeClass());\n effect(() => this.#setMaterialInputs());\n }\n\n ngAfterViewInit() {\n this.#MatIconButtonComponentRef = this.#createComponent();\n this.#setMaterialInputs();\n }\n\n #applySizeClass() {\n const size = this.size();\n const host = this.#host.classList;\n host.toggle('ymt-icon-button--size-xs', size === YMT_ICON_BUTTON_SIZE.extraSmall);\n host.toggle('ymt-icon-button--size-s', size === YMT_ICON_BUTTON_SIZE.small);\n host.toggle('ymt-icon-button--size-m', size === YMT_ICON_BUTTON_SIZE.medium);\n }\n\n #setMaterialInputs() {\n const inputs = this.#materialIconButtonInputs.map(({ name, signal }) => ({ name, value: signal() }));\n if (this.#MatIconButtonComponentRef) {\n inputs.forEach(({ name, value }) => this.#MatIconButtonComponentRef!.setInput(name, value));\n }\n }\n\n #createComponent() {\n const matIcon = this.#host.querySelector('mat-icon'); //todo support also upcoming yuv-icon\n const environmentInjector = this.#injector;\n const hostElement = this.#host;\n const componentRef = createComponent(MatIconButton, { hostElement, projectableNodes: [[matIcon]], environmentInjector });\n this.#appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n}\n","export enum YMT_BUTTON_SIZE {\n small = 'small',\n medium = 'medium'\n}\n","import {\n AfterViewInit,\n ApplicationRef,\n booleanAttribute,\n ComponentRef,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n OnInit\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { YMT_BUTTON_SIZE } from './ymt-button.model';\n\nexport type ButtonType = 'primary' | 'secondary' | 'tertiary' | 'danger';\n\nconst MatButtonAttributeMap: Record<ButtonType, string> = {\n primary: 'mat-flat-button',\n secondary: 'mat-stroked-button',\n tertiary: 'mat-button',\n danger: 'mat-flat-button'\n};\n\n@Directive({\n selector: 'button[ymtButton], a[ymtButton]',\n standalone: true\n})\nexport class YmtButtonDirective implements OnInit, AfterViewInit {\n ymtButton = input<ButtonType>('primary');\n disabled = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { alias: 'aria-disabled', transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'small' | 'medium' | YMT_BUTTON_SIZE>(YMT_BUTTON_SIZE.medium, { alias: 'button-size' });\n // Todo: Add input \"isBusy\" as \"busy inactive state\": not clickable and with mat-spinner in button\n\n #environmentInjector = inject(EnvironmentInjector);\n #applicationRef = inject(ApplicationRef);\n #hostElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n #matButtonComponentRef: ComponentRef<MatButton> | null = null;\n\n #iconPrefix: Element[] = [];\n #noneIconNodes: Node[] = [];\n #iconSuffix: Element[] = [];\n\n #matButtonAttribute = MatButtonAttributeMap;\n\n constructor() {\n effect(() => {\n const disabled = this.disabled();\n const ariaDisabled = this.ariaDisabled();\n const disableRipple = this.disableRipple();\n const disabledInteractive = this.disabledInteractive();\n this.#updateInputs(disabled, ariaDisabled, disableRipple, disabledInteractive);\n });\n\n effect(() => {\n this.#applySizeClass();\n });\n }\n\n ngOnInit() {\n this.#iconPrefix = this.#getIconPrefixElements();\n this.#noneIconNodes = this.#getNoneIconNodes();\n this.#iconSuffix = this.#getIconSuffixElements();\n this.#matButtonComponentRef = this.#createMatButtonComponent();\n }\n\n ngAfterViewInit() {\n this.#updateInputs();\n }\n\n #updateInputs(\n disabled: boolean = this.disabled(),\n ariaDisabled: boolean = this.ariaDisabled(),\n disableRipple: boolean = this.disableRipple(),\n disabledInteractive: boolean = this.disabledInteractive()\n ) {\n this.#matButtonComponentRef?.setInput('disabled', disabled);\n this.#matButtonComponentRef?.setInput('aria-disabled', ariaDisabled);\n this.#matButtonComponentRef?.setInput('disableRipple', disableRipple);\n this.#matButtonComponentRef?.setInput('disabledInteractive', disabledInteractive);\n }\n\n #createMatButtonComponent(\n hostElement: HTMLElement = this.#hostElement,\n environmentInjector: EnvironmentInjector = this.#environmentInjector,\n iconPrefix: Element[] = this.#iconPrefix,\n noneIconNodes: Node[] = this.#noneIconNodes,\n iconSuffix: Element[] = this.#iconSuffix\n ) {\n this.#setInitialAttributesToHost();\n const componentRef = createComponent(MatButton, {\n environmentInjector,\n hostElement,\n projectableNodes: [[...iconPrefix], [...noneIconNodes], [...iconSuffix]]\n });\n this.#applicationRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n\n #setInitialAttributesToHost() {\n this.#hostElement.setAttribute(this.#matButtonAttribute[this.ymtButton()], '');\n if (this.ymtButton() === 'danger') {\n this.#hostElement.classList.add('ymt-button--danger');\n }\n }\n\n #getIconPrefixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon:not([iconPositionEnd])'));\n }\n\n #getIconSuffixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon[iconPositionEnd]'));\n }\n\n #getNoneIconNodes() {\n const iter = document.createNodeIterator(this.#hostElement, NodeFilter.SHOW_ALL, (node) => {\n return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#hostElement\n ? NodeFilter.FILTER_ACCEPT\n : NodeFilter.FILTER_REJECT;\n });\n let currentNode: Node | null;\n const filteredNodes: Node[] = [];\n while ((currentNode = iter.nextNode())) {\n filteredNodes.push(currentNode);\n }\n return filteredNodes;\n }\n\n #applySizeClass() {\n this.size() === YMT_BUTTON_SIZE.small\n ? this.#hostElement.classList.add(`ymt-button--size-s`)\n : this.#hostElement.classList.remove(`ymt-button--size-s`);\n this.size() === YMT_BUTTON_SIZE.medium\n ? this.#hostElement.classList.add(`ymt-button--size-m`)\n : this.#hostElement.classList.remove(`ymt-button--size-m`);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n HostBinding,\n HostListener,\n inject,\n Input,\n input,\n OnDestroy,\n Renderer2,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatInput } from '@angular/material/input';\nimport { AbstractControlDirective, ControlValueAccessor, FormControlStatus, FormGroup, FormsModule, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormField, MatFormFieldControl } from '@angular/material/form-field';\nimport { TranslateService } from '@ngx-translate/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerIntl,\n MatDateRangeInput,\n MatDateRangePicker,\n MatEndDate,\n MatStartDate\n} from '@angular/material/datepicker';\nimport { MatTimepicker, MatTimepickerInput } from '@angular/material/timepicker';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE, MAT_NATIVE_DATE_FORMATS, MatDateFormats, NativeDateModule } from '@angular/material/core';\nimport { YmtDatepickerIntlService } from '../../services/ymt-datepicker-intl.service';\nimport { provideYmtDateAdapter, YMT_DATE_FORMATS } from '../../services';\n\ntype DatepickerValue = DatetimeValue;\ntype DatetimeValue = Date | string | null;\ntype MultiDateValue = Set<Date> | null; // not implemented yet!\ntype DateRangeValue = IRangeValue<DatetimeValue> | null; // not implemented yet!\nexport type DatepickerMode = keyof typeof EnumDatepickerMode;\nenum EnumDatepickerMode {\n DATE = 'DATE',\n // MULTI_DATE = 'MULTI_DATE', // not implemented yet!\n DATE_RANGE = 'DATE_RANGE',\n TIME = 'TIME'\n}\ninterface IRangeValue<T = unknown> {\n start: T;\n end: T;\n}\nexport interface DateRangePlaceholder {\n startDate: string;\n endDate: string;\n}\n/**\n * @deprecated\n */\n@Component({\n selector: 'ymt-datepicker',\n templateUrl: './datepicker.component.html',\n styleUrl: './datepicker.component.scss',\n standalone: true,\n imports: [\n CommonModule,\n MatInput,\n FormsModule,\n ReactiveFormsModule,\n MatDatepicker,\n MatDatepickerInput,\n MatTimepicker,\n MatTimepickerInput,\n MatDateRangeInput,\n MatDateRangePicker,\n MatEndDate,\n MatStartDate,\n NativeDateModule\n ],\n providers: [\n { provide: MatFormFieldControl, useExisting: DatepickerComponent },\n /*{\n provide: MAT_DATE_FORMATS,\n useValue: {\n ...MAT_NATIVE_DATE_FORMATS,\n display: {\n ...MAT_NATIVE_DATE_FORMATS.display,\n dateInput: {\n ...MAT_NATIVE_DATE_FORMATS.display.dateInput,\n day: 'numeric' as Intl.DateTimeFormatOptions['day'] // has effect\n }\n }\n } as MatDateFormats,\n },*/\n { provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService },\n provideYmtDateAdapter()\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatepickerComponent implements MatFormFieldControl<DatepickerValue>, ControlValueAccessor, AfterViewInit, OnDestroy {\n // Todo: Refactoring: Write BaseMatFormFieldControlComponent class for further custom controls in @yuuvis/material\n // Done: Internationalization\n // Done: Implement Datepicker features and options:\n // // [X] max\n // // [X] min\n // Done: MatFormFieldControl implementation:\n // // [x]handling errorState: https://material.angular.dev/components/input/overview#changing-when-error-messages-are-shown\n // // [x]handling focus\n // // [x]handling setDescribedByIds(ids: string[]): void\n // // [x] set aria-labeledby\n // // [x] set disabled\n // Todo: Refactoring: Better solution for handling value changes from input-element to model (kill ngModelOptions on inputs)\n // Todo: Better solution for DATE_RANGE-mode: content projection for input[matStartDate/matEndDate]\n // Done: Check aria-describedby logic of MatFormField to implement the correct setting\n // Done: Trigger\"stateChanges\" in effect function\n // Done: set errorState when input value is invalid\n // Done: Check how to destroy the component and complete stateChanges Observable\n // Done: Check how to get the ngControl instance of this component (optionally set)\n\n #translate = inject(TranslateService);\n #dateAdapter = inject(DateAdapter);\n #locale = signal(inject<unknown>(MAT_DATE_LOCALE));\n #injectNgControl = (ngC = inject(NgControl, { self: true, optional: true })) => (ngC ? (ngC.valueAccessor = this) && ngC : null);\n #destroyRef = inject(DestroyRef);\n #formField = inject(MatFormField, { optional: true });\n\n // implemented as part of MatFormFieldControl interface\n ngControl: NgControl | AbstractControlDirective | null = this.#injectNgControl();\n stateChanges = new Subject<void>();\n\n @HostListener('focusin') onFocusIn() {\n this.focused = true;\n }\n @HostListener('focusout') onFocusout() {\n this.focused = false;\n this.propagateTouched();\n }\n\n #value = signal<DatepickerValue>(null);\n @Input()\n set value(v: DatepickerValue) {\n let _value = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));\n const _previousValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(this.ngControl?.value));\n if (_value && _previousValue) {\n if (this.mode === EnumDatepickerMode.TIME) {\n _value = new Date(_previousValue.setHours(_value.getHours(), _value.getMinutes()));\n } else if (this.mode === EnumDatepickerMode.DATE) {\n _value = new Date(_value.setHours(_previousValue.getHours(), _previousValue.getMinutes()));\n }\n } else {\n _value = v;\n }\n this.#value.set(_value);\n this.#empty.set(!_value);\n this.propagateChange(this.value);\n }\n get value(): DatepickerValue {\n return this.#value();\n }\n\n #disabled = signal<boolean>(false);\n @Input()\n set disabled(v: BooleanInput) {\n this.#disabled.set(coerceBooleanProperty(v));\n this.timepickerInput()?.setDisabledState(this.#disabled());\n }\n get disabled(): boolean {\n return this.#disabled();\n }\n\n #id = signal<string>('');\n @Input()\n set id(v: string) {\n this.#id.set(v);\n }\n get id(): string {\n return this.#id();\n }\n\n #placeholder = signal<string>('');\n @Input()\n set placeholder(v: string) {\n this.#placeholder.set(v);\n }\n get placeholder(): string {\n return this.#placeholder();\n }\n\n #required = signal<boolean>(false);\n @Input()\n set required(v: BooleanInput) {\n this.#required.set(coerceBooleanProperty(v));\n }\n get required(): boolean {\n return this.#required();\n }\n\n #userAriaDescribedBy = signal<string>('');\n @Input()\n set userAriaDescribedBy(v: string) {\n this.#userAriaDescribedBy.set(v);\n }\n get userAriaDescribedBy(): string {\n return this.#userAriaDescribedBy();\n }\n\n #empty = signal<boolean>(false);\n set empty(v: boolean) {\n this.#empty.set(v);\n }\n get empty() {\n return this.#empty();\n }\n\n #errorState = signal<boolean>(false);\n set errorState(v: boolean) {\n this.#errorState.set(v);\n }\n get errorState() {\n return this.#errorState();\n }\n\n #focused = signal<boolean>(false);\n set focused(v: boolean) {\n this.#focused.set(v);\n }\n get focused() {\n return this.#focused();\n }\n\n // implemented as part of MatFormFieldControl interface\n @HostBinding('class.floating')\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n readonly autofilled?: boolean;\n readonly controlType: string = 'datepicker';\n readonly disableAutomaticLabeling: boolean = false;\n\n protected readonly datepickerMode = EnumDatepickerMode;\n protected readonly datepicker = viewChild('datepicker', { read: MatDatepicker<never> });\n protected readonly rangepicker = viewChild<MatDateRangePicker<never>>('rangepicker');\n protected readonly timepicker = viewChild('timepicker', { read: MatTimepicker<never> });\n protected readonly datepickerInput = viewChild<MatFormFieldControl<never>>('datepickerInput');\n protected readonly timepickerInput = viewChild<MatTimepickerInput<never>>('timepickerInput');\n\n #mode = signal<DatepickerMode>(EnumDatepickerMode.DATE);\n @Input()\n set mode(v: DatepickerMode) {\n this.#mode.set(v);\n }\n get mode(): DatepickerMode {\n return this.#mode();\n }\n\n #min = signal<DatepickerValue>(null);\n @Input()\n set min(v: DatepickerValue) {\n const validValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));\n\n if (!this.#dateAdapter.sameDate(validValue, this.#min())) {\n this.#min.set(validValue);\n }\n }\n get min() {\n return this.#min();\n }\n\n #max = signal<DatepickerValue>(null);\n @Input()\n set max(v: DatepickerValue) {\n const validValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));\n\n if (!this.#dateAdapter.sameDate(validValue, this.#max())) {\n this.#max.set(validValue);\n }\n }\n get max() {\n return this.#max();\n }\n\n #rangePlaceholder = signal<DateRangePlaceholder>({ startDate: 'Start Date', endDate: 'End Date' });\n @Input()\n set rangePlaceholder(v: DateRangePlaceholder) {\n this.#rangePlaceholder.set(v);\n }\n get rangePlaceholder(): DateRangePlaceholder {\n return this.#rangePlaceholder();\n }\n\n rangeValue = { start: '', end: '' };\n\n startDateFormControlName = input<string>('');\n endDateFormControlName = input<string>('');\n formGroup = input<FormGroup>();\n\n constructor() {\n // triggers state changes for the MatFormFieldControl\n effect(() => {\n this.#value();\n this.#placeholder();\n this.#rangePlaceholder(); // Todo: Check if it needs to trigger \"stateChanges\"!\n this.#disabled();\n this.#id();\n this.#focused();\n this.#empty();\n this.#required();\n this.#errorState();\n this.#locale();\n this.#mode();\n this.#min();\n this.#max();\n untracked(() => this.stateChanges.next());\n });\n\n // handle language change\n this.#translate.onLangChange.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((event) => {\n this.#locale.set(event.lang);\n this.#dateAdapter.setLocale(this.#locale());\n });\n // effect(() => {\n // this.#value();\n // untracked(() => console.log('DatepickerComponent.value: ', this.value));\n // });\n }\n\n // implemented as part of ControlValueAccessor interface\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange: (_: any) => void = () => {};\n // implemented as part of ControlValueAccessor interface\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateTouched: () => void = () => {};\n\n // implemented as part of ControlValueAccessor interface\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // implemented as part of ControlValueAccessor interface\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n\n // implemented as part of ControlValueAccessor interface\n writeValue(date: DatepickerValue): void {\n this.value = date;\n }\n\n // implemented as part of ControlValueAccessor interface\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n\n // implemented as part of MatFormFieldControl interface\n onContainerClick(event: MouseEvent): void {\n const focusableInput = this.datepickerInput();\n if (focusableInput && !this.focused && !this.disabled) {\n // sets focus to MatFormFieldControls\n focusableInput.onContainerClick(event);\n this.focused = true;\n }\n }\n\n // implemented as part of MatFormFieldControl interface\n setDescribedByIds(ids: string[]): void {\n this.datepickerInput()?.setDescribedByIds(ids);\n }\n\n ngAfterViewInit(): void {\n const _datepickerInput = this.datepickerInput();\n const _formField = this.#formField;\n\n if (_datepickerInput) {\n // set MatFormFieldControl.id for auto labeling within a MatFormField\n this.id = _datepickerInput.id || this.id;\n // track datepicker input state changes as they are MatFormFieldControl inputs\n _datepickerInput.stateChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n // set errorState\n this.errorState = _datepickerInput.errorState;\n // set disabled state\n this.disabled = _datepickerInput.disabled;\n });\n }\n\n // set the input's aria-describedby attribute to the parent MatFormField._hintLabelIds (=\"label-1 label-2 ...\")\n if (_formField) {\n this.setDescribedByIds([..._formField._hintLabelId.split(' ')]);\n }\n\n // set errorState for Range-Mode\n this.formGroup()\n ?.statusChanges.pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe((v: FormControlStatus) => {\n this.errorState = v === 'INVALID';\n });\n\n this.ngControl?.valueChanges?.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((value) => {\n // get the previous value of the associated formFieldControl\n if (!this.value && value) this.value = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(value));\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n /* Custom Datepicker Functions */\n\n open(): void {\n this.datepicker()?.open();\n this.rangepicker()?.open();\n this.timepicker()?.open();\n }\n}\n","@switch (mode) {\n @case (datepickerMode.DATE) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matDatepicker]=\"datepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n }\n @case (datepickerMode.DATE_RANGE) {\n @let formGroup = this.formGroup();\n @let startDate = this.startDateFormControlName();\n @let endDate = this.endDateFormControlName();\n @if (formGroup && startDate && endDate) {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [formGroup]=\"formGroup\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" [formControlName]=\"startDate\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" [formControlName]=\"endDate\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n } @else {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" (dateChange)=\"rangeValue.start = $event.value\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" (dateChange)=\"rangeValue.end = $event.value\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n }\n }\n @case (datepickerMode.TIME) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matTimepicker]=\"timepicker\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n #timepickerInput=\"matTimepickerInput\"\n >\n <mat-timepicker #timepicker/>\n }\n @default {\n <input\n type=\"datetime-locale\"\n [placeholder]=\"placeholder\"\n matInput\n [(ngModel)]=\"value\"\n #datepickerInput=\"matInput\"\n />\n }\n}\n\n","import { ChangeDetectionStrategy, Component, DestroyRef, effect, inject, Input, OnDestroy, OnInit, signal } from '@angular/core';\nimport { MatDatepickerIntl } from '@angular/material/datepicker';\nimport { DatepickerComponent } from '../datepicker';\nimport { YmtDatepickerIntlService } from '../../services';\nimport { YmtIconButtonDirective } from '../../directives';\nimport { MatIcon } from '@angular/material/icon';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'ymt-datepicker-toggle',\n template: `\n <button type=\"button\" ymtIconButton [attr.aria-label]=\"ariaLabel\" [aria-disabled]=\"disabled\" [disabled]=\"disabled\">\n <ng-content select=\"mat-icon\"></ng-content>\n </button>\n `,\n imports: [YmtIconButtonDirective],\n providers: [{ provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService }],\n host: {\n // Bind the `click` on the host, rather than the inner `button`, so that we can call\n // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n // it so that the input doesn't get focused automatically by the form field (See #21836).\n '(click)': '_open($event)'\n },\n exportAs: 'matDatepickerToggle',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatepickerToggleComponent implements OnInit, OnDestroy {\n #intl = inject(MatDatepickerIntl);\n #destroyRef = inject(DestroyRef);\n\n #datepicker = signal<DatepickerComponent | null>(null);\n @Input({ alias: 'for', required: true })\n set datepicker(v: DatepickerComponent | null) {\n this.#datepicker.set(v);\n }\n get datepicker() {\n return this.#datepicker();\n }\n\n #disabled = signal<boolean>(false);\n @Input()\n set disabled(v: BooleanInput) {\n this.#disabled.set(coerceBooleanProperty(v));\n }\n get disabled(): boolean {\n return this.#disabled();\n }\n\n #ariaLabel = signal(this.#intl.openCalendarLabel);\n @Input()\n set ariaLabel(v: string) {\n this.#ariaLabel.set(v);\n }\n get ariaLabel() {\n return this.#ariaLabel();\n }\n\n stateChanges = new Subject<void>();\n\n constructor() {\n effect(() => {\n this.#datepicker();\n this.#disabled();\n this.#ariaLabel();\n this.stateChanges.next();\n });\n }\n\n _open(event: Event): void {\n if (this.datepicker && !this.disabled) {\n this.datepicker.open();\n event.stopPropagation();\n }\n }\n\n ngOnInit(): void {\n const datepicker = this.datepicker;\n if (datepicker) {\n datepicker.stateChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n this.ariaLabel = this.#intl.openCalendarLabel;\n if (this.disabled !== datepicker.disabled) {\n this.disabled = datepicker.disabled;\n }\n });\n } else {\n throw new Error(`DatepickerComponent is missing on DatepickerToggleComponent's \"for\"-attribute!`);\n }\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"ymt.datepicker.calendarLabel": "\u0627\u0644\u062a\u0642\u0648\u064a\u0645",
|
|
3
|
+
"ymt.datepicker.closeCalendarLabel": "\u0625\u063a\u0644\u0627\u0642 \u0627\u0644\u062a\u0642\u0648\u064a\u0645",
|
|
4
|
+
"ymt.datepicker.comparisonDateLabel": "\u0641\u062a\u0631\u0629 \u0627\u0644\u0645\u0631\u062c\u0639",
|
|
5
|
+
"ymt.datepicker.endDateLabel": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0627\u0646\u062a\u0647\u0627\u0621",
|
|
6
|
+
"ymt.datepicker.nextMonthLabel": "\u0627\u0644\u0634\u0647\u0631 \u0627\u0644\u062a\u0627\u0644\u064a",
|
|
7
|
+
"ymt.datepicker.nextMultiYearLabel": "\u0627\u0644\u0633\u0646\u0648\u0627\u062a \u0627\u0644\u0640 24 \u0627\u0644\u062a\u0627\u0644\u064a\u0629",
|
|
8
|
+
"ymt.datepicker.nextYearLabel": "\u0627\u0644\u0633\u0646\u0629 \u0627\u0644\u062a\u0627\u0644\u064a\u0629",
|
|
9
|
+
"ymt.datepicker.openCalendarLabel": "\u0641\u062a\u062d \u0627\u0644\u062a\u0642\u0648\u064a\u0645",
|
|
10
|
+
"ymt.datepicker.prevMonthLabel": "\u0627\u0644\u0634\u0647\u0631 \u0627\u0644\u0633\u0627\u0628\u0642",
|
|
11
|
+
"ymt.datepicker.prevMultiYearLabel": "\u0627\u0644\u0633\u0646\u0648\u0627\u062a \u0627\u0644\u0640 24 \u0627\u0644\u0633\u0627\u0628\u0642\u0629",
|
|
12
|
+
"ymt.datepicker.prevYearLabel": "\u0627\u0644\u0633\u0646\u0629 \u0627\u0644\u0633\u0627\u0628\u0642\u0629",
|
|
13
|
+
"ymt.datepicker.startDateLabel": "\u062a\u0627\u0631\u064a\u062e \u0627\u0644\u0628\u062f\u0627\u064a\u0629",
|
|
14
|
+
"ymt.datepicker.switchToMonthViewLabel": "\u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u062a\u0627\u0631\u064a\u062e",
|
|
15
|
+
"ymt.datepicker.switchToMultiYearViewLabel": "\u0627\u062e\u062a\u064a\u0627\u0631 \u0627\u0644\u0634\u0647\u0631 \u0648\u0627\u0644\u0633\u0646\u0629",
|
|
16
|
+
"ymt.paginator.firstPageLabel": "\u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0623\u0648\u0644\u0649",
|
|
17
|
+
"ymt.paginator.itemsPerPageLabel": "\u0627\u0644\u0646\u062a\u0627\u0626\u062c \u0644\u0643\u0644 \u0635\u0641\u062d\u0629",
|
|
18
|
+
"ymt.paginator.lastPageLabel": "\u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0623\u062e\u064a\u0631\u0629",
|
|
19
|
+
"ymt.paginator.nextPageLabel": "\u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u062a\u0627\u0644\u064a\u0629",
|
|
20
|
+
"ymt.paginator.previousPageLabel": "\u0627\u0644\u0635\u0641\u062d\u0629 \u0627\u0644\u0633\u0627\u0628\u0642\u0629",
|
|
21
|
+
"ymt.paginator.rangeLabelSeparator": "\u0645\u0646"
|
|
22
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AfterViewInit, OnInit } from '@angular/core';
|
|
2
2
|
import { YMT_BUTTON_SIZE } from './ymt-button.model';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
type ButtonType = 'primary' | 'secondary' | 'tertiary' | 'danger';
|
|
4
|
+
export type ButtonType = 'primary' | 'secondary' | 'tertiary' | 'danger';
|
|
5
5
|
export declare class YmtButtonDirective implements OnInit, AfterViewInit {
|
|
6
6
|
#private;
|
|
7
7
|
ymtButton: import("@angular/core").InputSignal<ButtonType>;
|
|
@@ -16,4 +16,3 @@ export declare class YmtButtonDirective implements OnInit, AfterViewInit {
|
|
|
16
16
|
static ɵfac: i0.ɵɵFactoryDeclaration<YmtButtonDirective, never>;
|
|
17
17
|
static ɵdir: i0.ɵɵDirectiveDeclaration<YmtButtonDirective, "button[ymtButton], a[ymtButton]", never, { "ymtButton": { "alias": "ymtButton"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; "isSignal": true; }; "disableRipple": { "alias": "disableRipple"; "required": false; "isSignal": true; }; "disabledInteractive": { "alias": "disabledInteractive"; "required": false; "isSignal": true; }; "size": { "alias": "button-size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
18
18
|
}
|
|
19
|
-
export {};
|
package/package.json
CHANGED
|
@@ -1,41 +1,74 @@
|
|
|
1
1
|
import { TemplateRef } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* subtitle and actions in the pane header.
|
|
4
|
+
* Header component for `ymt-pane`. Renders a two-row layout:
|
|
6
5
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* - **Top row:** icon (optional), title, and actions area
|
|
7
|
+
* - **Bottom row:** subtitle and badges area
|
|
9
8
|
*
|
|
9
|
+
* ## Title & Subtitle
|
|
10
|
+
*
|
|
11
|
+
* Can be set as plain strings via the `title` and `subtitle` inputs,
|
|
12
|
+
* or as rich content via the `#yuvPaneHeaderTitle` and `#yuvPaneHeaderSubtitle`
|
|
13
|
+
* content child templates. When a template is provided it takes precedence
|
|
14
|
+
* over the corresponding string input.
|
|
15
|
+
*
|
|
16
|
+
* ## Icon
|
|
17
|
+
*
|
|
18
|
+
* Set the `icon` input to a Material Icon ligature to display an icon
|
|
19
|
+
* to the left of the title row.
|
|
20
|
+
*
|
|
21
|
+
* ## Actions & Badges
|
|
22
|
+
*
|
|
23
|
+
* Pass a `TemplateRef` to the `actions` input to render action buttons
|
|
24
|
+
* aligned to the right of the title row. Similarly, pass a `TemplateRef`
|
|
25
|
+
* to the `badges` input to render badges aligned to the right of the
|
|
26
|
+
* subtitle row.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```html
|
|
30
|
+
* <!-- Simple usage with string inputs -->
|
|
31
|
+
* <ymt-pane-header
|
|
32
|
+
* [title]="'Documents'"
|
|
33
|
+
* [subtitle]="'12 items'"
|
|
34
|
+
* [icon]="'folder'"
|
|
35
|
+
* [actions]="headerActions"
|
|
36
|
+
* [badges]="headerBadges">
|
|
37
|
+
* </ymt-pane-header>
|
|
38
|
+
*
|
|
39
|
+
* <ng-template #headerActions>
|
|
40
|
+
* <button ymt-icon-button icon="add"></button>
|
|
41
|
+
* </ng-template>
|
|
42
|
+
*
|
|
43
|
+
* <ng-template #headerBadges>
|
|
44
|
+
* <ymt-badge severity="info">active</ymt-badge>
|
|
45
|
+
* </ng-template>
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
10
49
|
* ```html
|
|
11
|
-
* <!--
|
|
12
|
-
* <ymt-pane-header [
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* <ng-template #yuvPaneHeaderTitle><h2>🦁Custom pane title</h2></ng-template>
|
|
16
|
-
* <ng-template #yuvPaneHeaderSubtitle><ymt-badge severity="warning">locked</ymt-badge></ng-template>
|
|
50
|
+
* <!-- Rich content via template projection -->
|
|
51
|
+
* <ymt-pane-header [icon]="'lock'">
|
|
52
|
+
* <ng-template #yuvPaneHeaderTitle>Custom <strong>title</strong></ng-template>
|
|
53
|
+
* <ng-template #yuvPaneHeaderSubtitle><ymt-badge severity="warning">locked</ymt-badge></ng-template>
|
|
17
54
|
* </ymt-pane-header>
|
|
18
55
|
* ```
|
|
19
56
|
*/
|
|
20
57
|
export declare class YmtPaneHeaderComponent {
|
|
21
|
-
/**
|
|
22
|
-
* Title of the pane
|
|
23
|
-
*/
|
|
58
|
+
/** Plain-text title displayed in the top row. Ignored when a `#yuvPaneHeaderTitle` template is projected. */
|
|
24
59
|
title: import("@angular/core").InputSignal<string | undefined>;
|
|
25
|
-
/**
|
|
26
|
-
* Icon of the pane
|
|
27
|
-
*/
|
|
60
|
+
/** Material Icon ligature rendered to the left of the title row (e.g. `'folder'`, `'lock'`). */
|
|
28
61
|
icon: import("@angular/core").InputSignal<string | undefined>;
|
|
29
|
-
/**
|
|
30
|
-
* Subtitle of the pane
|
|
31
|
-
*/
|
|
62
|
+
/** Plain-text subtitle displayed in the bottom row. Ignored when a `#yuvPaneHeaderSubtitle` template is projected. */
|
|
32
63
|
subtitle: import("@angular/core").InputSignal<string | undefined>;
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
64
|
+
/** Template rendered in the actions area, aligned to the right of the title row. */
|
|
65
|
+
actions: import("@angular/core").InputSignal<TemplateRef<unknown> | undefined>;
|
|
66
|
+
/** Template rendered in the badges area, aligned to the right of the subtitle row. */
|
|
67
|
+
badges: import("@angular/core").InputSignal<TemplateRef<unknown> | undefined>;
|
|
68
|
+
/** Content child template for rich title content. Takes precedence over the `title` input. */
|
|
69
|
+
titleSlot: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
|
|
70
|
+
/** Content child template for rich subtitle content. Takes precedence over the `subtitle` input. */
|
|
71
|
+
subtitleSlot: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
|
|
39
72
|
static ɵfac: i0.ɵɵFactoryDeclaration<YmtPaneHeaderComponent, never>;
|
|
40
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<YmtPaneHeaderComponent, "ymt-pane-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; }, {}, ["titleSlot", "subtitleSlot"], never, true, never>;
|
|
73
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<YmtPaneHeaderComponent, "ymt-pane-header", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "badges": { "alias": "badges"; "required": false; "isSignal": true; }; }, {}, ["titleSlot", "subtitleSlot"], never, true, never>;
|
|
41
74
|
}
|