@mxtommy/kip 3.11.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/.github/copilot-instructions.md +102 -27
  2. package/.github/instructions/angular.instructions.md +1 -1
  3. package/CHANGELOG.md +33 -2
  4. package/README.md +98 -78
  5. package/docs/widget-schematic.md +102 -0
  6. package/images/ChartplotterMode.png +0 -0
  7. package/package.json +8 -3
  8. package/public/3rdpartylicenses.txt +95 -69
  9. package/public/assets/help-docs/chartplotter.md +122 -0
  10. package/public/assets/help-docs/community.md +68 -0
  11. package/public/assets/help-docs/configuration.md +1 -1
  12. package/public/assets/help-docs/contact-us.md +58 -8
  13. package/public/assets/help-docs/dashboards.md +117 -42
  14. package/public/assets/help-docs/datainspector.md +1 -1
  15. package/public/assets/help-docs/datasets.md +1 -1
  16. package/public/assets/help-docs/embedwidget.md +1 -1
  17. package/public/assets/help-docs/grafana.md +1 -1
  18. package/public/assets/help-docs/influxdb.md +1 -1
  19. package/public/assets/help-docs/kiosk.md +30 -14
  20. package/public/assets/help-docs/menu.json +5 -3
  21. package/public/assets/help-docs/putcontrols.md +5 -5
  22. package/public/assets/help-docs/welcome.md +49 -23
  23. package/public/assets/help-docs/zones.md +1 -1
  24. package/public/assets/svg/icons.svg +22 -24
  25. package/public/{chunk-F4VOQO2M.js → chunk-4HLTLR5F.js} +1 -1
  26. package/public/chunk-52M2PJJL.js +4 -0
  27. package/public/chunk-5FWE6Y4K.js +52 -0
  28. package/public/{chunk-K4BST2XF.js → chunk-75QTGQOO.js} +1 -1
  29. package/public/{chunk-XE352AKG.js → chunk-AB255PKD.js} +1 -1
  30. package/public/{chunk-GMZROOAF.js → chunk-ACTDISHE.js} +1 -1
  31. package/public/chunk-AYVYZ27A.js +2 -0
  32. package/public/chunk-B3P2F52Y.js +9 -0
  33. package/public/{chunk-EJ4JM3HG.js → chunk-BMDGKBYM.js} +23 -23
  34. package/public/chunk-CTZYGIOB.js +8 -0
  35. package/public/chunk-CVTWABMM.js +2 -0
  36. package/public/chunk-CZJ7AC6N.js +1 -0
  37. package/public/chunk-F5X5MWHG.js +0 -0
  38. package/public/{chunk-TIXQ3FAF.js → chunk-HIADZ4BV.js} +1 -1
  39. package/public/chunk-IJ22WXFB.js +1 -0
  40. package/public/chunk-IPSRX374.js +1 -0
  41. package/public/chunk-JCW5H5WP.js +1 -0
  42. package/public/{chunk-I6UWIF55.js → chunk-KHL7FGID.js} +1 -1
  43. package/public/{chunk-ANRGX57I.js → chunk-OB3QLUH6.js} +12 -12
  44. package/public/{chunk-G4B4D3XR.js → chunk-OQULS6SV.js} +1 -1
  45. package/public/chunk-P3OU5V2Y.js +1 -0
  46. package/public/chunk-RYHOAWDD.js +4 -0
  47. package/public/chunk-SVP7ZRWY.js +5 -0
  48. package/public/{chunk-IZAPOSYM.js → chunk-SZ2GUIT5.js} +1 -1
  49. package/public/chunk-TCZ5ZAXQ.js +3 -0
  50. package/public/chunk-V7PWLOQ2.js +6 -0
  51. package/public/index.html +2 -2
  52. package/public/main-3LAUI5JW.js +5 -0
  53. package/public/scripts-7HSGK5LZ.js +14 -0
  54. package/public/styles-MJ4EO4B4.css +1 -0
  55. package/tools/schematics/collection.json +9 -0
  56. package/tools/schematics/create-host2-widget/files/readme/README.md.template +109 -0
  57. package/tools/schematics/create-host2-widget/files/spec/widget-__name@dasherize__.component.spec.ts +38 -0
  58. package/tools/schematics/create-host2-widget/files/widget/widget-__name@dasherize__.component.html +6 -0
  59. package/tools/schematics/create-host2-widget/files/widget/widget-__name@dasherize__.component.scss +5 -0
  60. package/tools/schematics/create-host2-widget/files/widget/widget-__name@dasherize__.component.ts.template +94 -0
  61. package/tools/schematics/create-host2-widget/index.js +138 -0
  62. package/tools/schematics/create-host2-widget/schema.json +89 -0
  63. package/tools/schematics/create-host2-widget/test/create-host2-widget.spec.ts +70 -0
  64. package/tools/schematics/create-host2-widget/utils/formatting.js +119 -0
  65. package/public/chunk-2MAVQD65.js +0 -3
  66. package/public/chunk-5MLB3PYZ.js +0 -11
  67. package/public/chunk-66OJ5PZF.js +0 -2
  68. package/public/chunk-6NRGS3BZ.js +0 -1
  69. package/public/chunk-FPMCI7XZ.js +0 -6
  70. package/public/chunk-GIZH6HIB.js +0 -2
  71. package/public/chunk-KPOCVRYH.js +0 -2
  72. package/public/chunk-N3HCHSSE.js +0 -2
  73. package/public/chunk-P4K222SI.js +0 -8
  74. package/public/chunk-PYBIMDD3.js +0 -5
  75. package/public/chunk-S4OKR5KN.js +0 -1
  76. package/public/chunk-TARCFDF4.js +0 -4
  77. package/public/chunk-VZ77T3BF.js +0 -4
  78. package/public/chunk-XFU5YJJP.js +0 -5
  79. package/public/main-KP322K7A.js +0 -51
  80. package/public/styles-PDNHT2L2.css +0 -1
@@ -0,0 +1,70 @@
1
+ import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
2
+ import { Tree } from '@angular-devkit/schematics';
3
+ import * as path from 'path';
4
+
5
+ // Path to collection.json
6
+ const collectionPath = path.join(__dirname, '..', 'collection.json').replace(/test\/[.][.]/, '..');
7
+
8
+ describe('create-host2-widget schematic', () => {
9
+ const runner = new SchematicTestRunner('kip-schematics', collectionPath);
10
+ let appTree: UnitTestTree;
11
+
12
+ beforeEach(() => {
13
+ // Minimal host tree with widget.service.ts skeleton to exercise mutations
14
+ appTree = new UnitTestTree(Tree.empty());
15
+ appTree.create('src/app/core/services/widget.service.ts', `import { Type } from '@angular/core';\nexport interface WidgetDescription { selector: string; componentClassName: string; category: string; name: string; description: string; icon: string; minWidth: number; minHeight: number; defaultWidth: number; defaultHeight: number; requiredPlugins: string[]; }\nexport class WidgetService {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly _componentTypeMap: Record<string, Type<any>> = {\n };\n private readonly _widgetDefinition: readonly WidgetDescription[] = [\n ];\n}`);
16
+ });
17
+
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ function run(options: Record<string, any>) {
20
+ return runner.runSchematic('create-host2-widget', {
21
+ name: 'alpha', title: 'Alpha', registerWidget: 'Core',
22
+ pathType: 'number', pathDefault: null, ignoreZones: false,
23
+ addSpec: false, todoBlock: false, readme: false,
24
+ ...options
25
+ }, appTree);
26
+ }
27
+
28
+ it('generates widget files', async () => {
29
+ const tree = await run({});
30
+ expect(tree.exists('src/app/widgets/widget-alpha/widget-alpha.component.ts')).toBeTrue();
31
+ });
32
+
33
+ it('updates service: import, map, definition', async () => {
34
+ const tree = await run({});
35
+ const service = tree.read('src/app/core/services/widget.service.ts')!.toString('utf-8');
36
+ expect(service).toContain("import { WidgetAlphaComponent } from '../../widgets/widget-alpha/widget-alpha.component'");
37
+ expect(service).toMatch(/_componentTypeMap[\s\S]*WidgetAlphaComponent: WidgetAlphaComponent/);
38
+ expect(service).toMatch(/selector: 'widget-alpha'/);
39
+ });
40
+
41
+ it('inserts second widget in same category after first', async () => {
42
+ let tree = await run({});
43
+ appTree = tree; // carry over
44
+ tree = await run({ name: 'beta', title: 'Beta' });
45
+ const service = tree.read('src/app/core/services/widget.service.ts')!.toString('utf-8');
46
+ const alphaIdx = service.indexOf("selector: 'widget-alpha'");
47
+ const betaIdx = service.indexOf("selector: 'widget-beta'");
48
+ expect(alphaIdx).toBeGreaterThan(-1);
49
+ expect(betaIdx).toBeGreaterThan(-1);
50
+ expect(betaIdx).toBeGreaterThan(alphaIdx); // inserted after
51
+ });
52
+
53
+ it('is idempotent (running with same name does not duplicate)', async () => {
54
+ let tree = await run({});
55
+ appTree = tree;
56
+ tree = await run({});
57
+ const service = tree.read('src/app/core/services/widget.service.ts')!.toString('utf-8');
58
+ const occurrences = (service.match(/selector: 'widget-alpha'/g) || []).length;
59
+ expect(occurrences).toBe(1);
60
+ });
61
+
62
+ it('skips registration when registerWidget = no', async () => {
63
+ const tree = await run({ name: 'gamma', title: 'Gamma', registerWidget: 'no' });
64
+ const service = tree.read('src/app/core/services/widget.service.ts')!.toString('utf-8');
65
+ expect(service).not.toContain('WidgetGammaComponent');
66
+ expect(service).not.toContain("selector: 'widget-gamma'");
67
+ // component file still generated
68
+ expect(tree.exists('src/app/widgets/widget-gamma/widget-gamma.component.ts')).toBeTrue();
69
+ });
70
+ });
@@ -0,0 +1,119 @@
1
+ // JavaScript utility helpers for widget.service.ts mutation formatting & insertion logic
2
+ // Converted from TypeScript version.
3
+
4
+ function escapeSingle(str) {
5
+ return str.replace(/'/g, "\\'");
6
+ }
7
+
8
+ function buildWidgetDefinitionObject(selector, className, opts) {
9
+ return `{
10
+ name: '${opts.title}',
11
+ description: '${escapeSingle(opts.description)}',
12
+ icon: '${opts.icon}', // TODO replace placeholder icon
13
+ minWidth: ${opts.minWidth},
14
+ minHeight: ${opts.minHeight},
15
+ defaultWidth: ${opts.defaultWidth},
16
+ defaultHeight: ${opts.defaultHeight},
17
+ category: '${opts.category}',
18
+ requiredPlugins: [],
19
+ selector: '${selector}',
20
+ componentClassName: '${className}'
21
+ },`;
22
+ }
23
+
24
+ function appendImport(src, importStatement) {
25
+ if (src.includes(importStatement)) return src;
26
+ const importBlockRegex = /^(?:import[^;]+;\s*)+/m;
27
+ if (importBlockRegex.test(src)) {
28
+ return src.replace(importBlockRegex, (block) => {
29
+ const normalized = block.replace(/\n*$/, '');
30
+ return normalized + '\n' + importStatement + '\n\n';
31
+ });
32
+ }
33
+ return importStatement + '\n\n' + src;
34
+ }
35
+
36
+ function updateComponentMap(src, className) {
37
+ const mapPattern = /_componentTypeMap: Record<string, Type<any>> = {([\s\S]*?)};/m;
38
+ return src.replace(mapPattern, (m, inner) => {
39
+ if (inner.includes(className + ':')) return m;
40
+ const lines = inner.split(/\n/);
41
+ while (lines.length && lines[lines.length - 1].trim() === '') lines.pop();
42
+ for (let i = lines.length - 1; i >= 0; i--) {
43
+ const trimmed = lines[i].trim();
44
+ if (!trimmed) continue;
45
+ if (!trimmed.includes(':')) break;
46
+ if (!trimmed.endsWith(',')) lines[i] = lines[i] + ',';
47
+ break;
48
+ }
49
+ lines.push(` ${className}: ${className}`);
50
+ // Replace inner content, then normalize closing brace indentation to two spaces
51
+ let replaced = m.replace(inner, lines.join('\n') + '\n');
52
+ replaced = replaced.replace(/\n *};/, '\n };');
53
+ return replaced;
54
+ });
55
+ }
56
+
57
+ function normalizeDefinitionFormatting(content, baseIndent) {
58
+ let rebuilt = content;
59
+ // Remove any blank line(s) between objects: ensure pattern `},\n{` with exactly one newline
60
+ rebuilt = rebuilt.replace(/},\n\n+(\s*{)/g, '},\n$1');
61
+ // Remove blank line before closing array
62
+ rebuilt = rebuilt.replace(/,\n\n(\s*])/g, ',\n$1');
63
+ // Remove stray duplicate blank lines inside objects
64
+ rebuilt = rebuilt.replace(/({\n)([ \t]*\n)+/g, '$1');
65
+ rebuilt = rebuilt.replace(/\n\s*\n(\s+\w+:)/g, '\n$1');
66
+ // Normalize opening brace indentation
67
+ rebuilt = rebuilt.replace(/^(\s*){(?=\n)/gm, baseIndent + '{');
68
+ // Collapse any 2+ blank lines to single newline
69
+ rebuilt = rebuilt.replace(/\n{2,}/g, '\n');
70
+ // Remove any trailing blank lines; do NOT force an extra newline because the array pattern supplies one before the closing ];
71
+ return rebuilt.replace(/\n\s*$/,'');
72
+ }
73
+
74
+ function insertDefinitionObject(src, selector, className, opts) {
75
+ const defArrayPattern = /private readonly _widgetDefinition: readonly WidgetDescription\[] = \[(\s*[\s\S]*?)\n\s*];/m;
76
+ return src.replace(defArrayPattern, (m, inner) => {
77
+ if (inner.includes(`selector: '${selector}'`)) return m;
78
+ let defObj = buildWidgetDefinitionObject(selector, className, opts).trim();
79
+ defObj = defObj.startsWith('{') ? defObj : '{' + defObj;
80
+ defObj = defObj.replace(/\n{2,}/g, '\n');
81
+ const linesDef = defObj.split(/\n/).map(l => l.trimEnd());
82
+ const openIdx = 0; const closeIdx = linesDef.length - 1;
83
+ const indentMatch = inner.match(/^(\s*){/m);
84
+ const baseIndent = indentMatch ? indentMatch[1] : ' ';
85
+ const firstLine = baseIndent + '{';
86
+ const lastLine = baseIndent + linesDef[closeIdx].trim();
87
+ const middle = linesDef.slice(openIdx + 1, closeIdx).filter(l => l.trim().length > 0).map(l => baseIndent + ' ' + l.trim());
88
+ defObj = [firstLine, ...middle, lastLine].join('\n');
89
+ const objectRegex = /{[\s\S]*?},\n?/g;
90
+ const objects = inner.match(objectRegex) || [];
91
+ if (objects.length === 0) {
92
+ return m.replace(inner, defObj + '\n');
93
+ }
94
+ const metas = objects.map(o => ({ text: o, category: (o.match(/category: '([^']+)'/) || [])[1] }));
95
+ let insertAfter = -1;
96
+ for (let i = 0; i < metas.length; i++) {
97
+ if (metas[i].category === opts.category) insertAfter = i;
98
+ }
99
+ const formattedNew = defObj + '\n';
100
+ let rebuilt = '';
101
+ metas.forEach((meta, idx) => {
102
+ const normalized = meta.text.endsWith('\n') ? meta.text : meta.text + '\n';
103
+ rebuilt += normalized;
104
+ if (idx === insertAfter) rebuilt += formattedNew; // inserted immediately, no extra blank line expected
105
+ });
106
+ if (insertAfter === -1) rebuilt += formattedNew; // appended at end
107
+ rebuilt = normalizeDefinitionFormatting(rebuilt, baseIndent);
108
+ return m.replace(inner, rebuilt);
109
+ });
110
+ }
111
+
112
+ module.exports = {
113
+ escapeSingle,
114
+ buildWidgetDefinitionObject,
115
+ appendImport,
116
+ updateComponentMap,
117
+ insertDefinitionObject,
118
+ normalizeDefinitionFormatting
119
+ };
@@ -1,3 +0,0 @@
1
- import{Ab as _,B as te,Bb as f,E as re,Ed as _e,F as g,Fa as Z,Gb as B,Gd as Y,Hb as l,Ia as ce,J as ie,K as ne,L as z,Oa as h,Od as fe,Pa as le,Qd as w,Sa as y,V as j,Wa as F,X as s,Xa as S,Xb as v,Ya as H,ab as N,bb as C,cb as k,da as ae,ea as O,ee as we,fe as b,ga as n,gd as A,ge,he as $,ib as m,id as K,j as c,ja as Q,jb as p,ka as W,ld as he,na as G,oa as oe,oc as T,ra as se,rb as L,tb as U,td as me,ud as pe,va as M,vb as D,w as V,wa as E,wb as u,xa as de,xb as d,yb as x,yd as ue,zb as q}from"./chunk-ANRGX57I.js";var I=["*"],ye=["content"],Ce=[[["mat-drawer"]],[["mat-drawer-content"]],"*"],ke=["mat-drawer","mat-drawer-content","*"];function De(i,P){if(i&1){let e=L();m(0,"div",1),U("click",function(){Q(e);let r=D();return W(r._onBackdropClicked())}),p()}if(i&2){let e=D();l("mat-drawer-shown",e._isShowingBackdrop())}}function xe(i,P){i&1&&(m(0,"mat-drawer-content"),d(1,2),p())}var Me=[[["mat-sidenav"]],[["mat-sidenav-content"]],"*"],Ee=["mat-sidenav","mat-sidenav-content","*"];function Fe(i,P){if(i&1){let e=L();m(0,"div",1),U("click",function(){Q(e);let r=D();return W(r._onBackdropClicked())}),p()}if(i&2){let e=D();l("mat-drawer-shown",e._isShowingBackdrop())}}function Se(i,P){i&1&&(m(0,"mat-sidenav-content"),d(1,2),p())}var Be=`.mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-sys-background));box-sizing:border-box;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent))}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(forced-colors: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-content.mat-drawer-content-hidden{opacity:0}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow, none);background-color:var(--mat-sidenav-container-background-color, var(--mat-sys-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));width:var(--mat-sidenav-container-width, 360px);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(forced-colors: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(forced-colors: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-transition .mat-drawer{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating){visibility:hidden;box-shadow:none}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container{display:none}.mat-drawer.mat-drawer-opened.mat-drawer-opened{transform:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto}.mat-sidenav-fixed{position:fixed}
2
- `;var Te=new O("MAT_DRAWER_DEFAULT_AUTOSIZE",{providedIn:"root",factory:Ae}),ee=new O("MAT_DRAWER_CONTAINER");function Ae(){return!1}var R=(()=>{class i extends b{_platform=n(A);_changeDetectorRef=n(T);_container=n(X);constructor(){let e=n(E),t=n(we),r=n(S);super(e,t,r)}ngAfterContentInit(){this._container._contentMarginChanges.subscribe(()=>{this._changeDetectorRef.markForCheck()})}_shouldBeHidden(){if(this._platform.isBrowser)return!1;let{start:e,end:t}=this._container;return e!=null&&e.mode!=="over"&&e.opened||t!=null&&t.mode!=="over"&&t.opened}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=h({type:i,selectors:[["mat-drawer-content"]],hostAttrs:[1,"mat-drawer-content"],hostVars:6,hostBindings:function(t,r){t&2&&(B("margin-left",r._container._contentMargins.left,"px")("margin-right",r._container._contentMargins.right,"px"),l("mat-drawer-content-hidden",r._shouldBeHidden()))},features:[v([{provide:b,useExisting:i}]),y],ngContentSelectors:I,decls:1,vars:0,template:function(t,r){t&1&&(u(),d(0))},encapsulation:2,changeDetection:0})}return i})(),J=(()=>{class i{_elementRef=n(E);_focusTrapFactory=n(pe);_focusMonitor=n(he);_platform=n(A);_ngZone=n(S);_renderer=n(ce);_interactivityChecker=n(me);_doc=n(oe);_container=n(ee,{optional:!0});_focusTrap=null;_elementFocusedBeforeDrawerWasOpened=null;_eventCleanups;_isAttached;_anchor;get position(){return this._position}set position(e){e=e==="end"?"end":"start",e!==this._position&&(this._isAttached&&this._updatePositionInParent(e),this._position=e,this.onPositionChanged.emit())}_position="start";get mode(){return this._mode}set mode(e){this._mode=e,this._updateFocusTrapState(),this._modeChanged.next()}_mode="over";get disableClose(){return this._disableClose}set disableClose(e){this._disableClose=w(e)}_disableClose=!1;get autoFocus(){let e=this._autoFocus;return e??(this.mode==="side"?"dialog":"first-tabbable")}set autoFocus(e){(e==="true"||e==="false"||e==null)&&(e=w(e)),this._autoFocus=e}_autoFocus;get opened(){return this._opened()}set opened(e){this.toggle(w(e))}_opened=se(!1);_openedVia;_animationStarted=new c;_animationEnd=new c;openedChange=new F(!0);_openedStream=this.openedChange.pipe(g(e=>e),V(()=>{}));openedStart=this._animationStarted.pipe(g(()=>this.opened),z(void 0));_closedStream=this.openedChange.pipe(g(e=>!e),V(()=>{}));closedStart=this._animationStarted.pipe(g(()=>!this.opened),z(void 0));_destroyed=new c;onPositionChanged=new F;_content;_modeChanged=new c;_injector=n(G);_changeDetectorRef=n(T);constructor(){this.openedChange.pipe(s(this._destroyed)).subscribe(e=>{e?(this._elementFocusedBeforeDrawerWasOpened=this._doc.activeElement,this._takeFocus()):this._isFocusWithinDrawer()&&this._restoreFocus(this._openedVia||"program")}),this._ngZone.runOutsideAngular(()=>{let e=this._elementRef.nativeElement;te(e,"keydown").pipe(g(t=>t.keyCode===27&&!this.disableClose&&!ue(t)),s(this._destroyed)).subscribe(t=>this._ngZone.run(()=>{this.close(),t.stopPropagation(),t.preventDefault()})),this._eventCleanups=[this._renderer.listen(e,"transitionrun",this._handleTransitionEvent),this._renderer.listen(e,"transitionend",this._handleTransitionEvent),this._renderer.listen(e,"transitioncancel",this._handleTransitionEvent)]}),this._animationEnd.subscribe(()=>{this.openedChange.emit(this.opened)})}_forceFocus(e,t){this._interactivityChecker.isFocusable(e)||(e.tabIndex=-1,this._ngZone.runOutsideAngular(()=>{let r=()=>{a(),o(),e.removeAttribute("tabindex")},a=this._renderer.listen(e,"blur",r),o=this._renderer.listen(e,"mousedown",r)})),e.focus(t)}_focusByCssSelector(e,t){let r=this._elementRef.nativeElement.querySelector(e);r&&this._forceFocus(r,t)}_takeFocus(){if(!this._focusTrap)return;let e=this._elementRef.nativeElement;switch(this.autoFocus){case!1:case"dialog":return;case!0:case"first-tabbable":H(()=>{!this._focusTrap.focusInitialElement()&&typeof e.focus=="function"&&e.focus()},{injector:this._injector});break;case"first-heading":this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');break;default:this._focusByCssSelector(this.autoFocus);break}}_restoreFocus(e){this.autoFocus!=="dialog"&&(this._elementFocusedBeforeDrawerWasOpened?this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened,e):this._elementRef.nativeElement.blur(),this._elementFocusedBeforeDrawerWasOpened=null)}_isFocusWithinDrawer(){let e=this._doc.activeElement;return!!e&&this._elementRef.nativeElement.contains(e)}ngAfterViewInit(){this._isAttached=!0,this._position==="end"&&this._updatePositionInParent("end"),this._platform.isBrowser&&(this._focusTrap=this._focusTrapFactory.create(this._elementRef.nativeElement),this._updateFocusTrapState())}ngOnDestroy(){this._eventCleanups.forEach(e=>e()),this._focusTrap?.destroy(),this._anchor?.remove(),this._anchor=null,this._animationStarted.complete(),this._animationEnd.complete(),this._modeChanged.complete(),this._destroyed.next(),this._destroyed.complete()}open(e){return this.toggle(!0,e)}close(){return this.toggle(!1)}_closeViaBackdropClick(){return this._setOpen(!1,!0,"mouse")}toggle(e=!this.opened,t){e&&t&&(this._openedVia=t);let r=this._setOpen(e,!e&&this._isFocusWithinDrawer(),this._openedVia||"program");return e||(this._openedVia=null),r}_setOpen(e,t,r){return e===this.opened?Promise.resolve(e?"open":"close"):(this._opened.set(e),this._container?._transitionsEnabled?this._setIsAnimating(!0):setTimeout(()=>{this._animationStarted.next(),this._animationEnd.next()}),this._elementRef.nativeElement.classList.toggle("mat-drawer-opened",e),!e&&t&&this._restoreFocus(r),this._changeDetectorRef.markForCheck(),this._updateFocusTrapState(),new Promise(a=>{this.openedChange.pipe(ne(1)).subscribe(o=>a(o?"open":"close"))}))}_setIsAnimating(e){this._elementRef.nativeElement.classList.toggle("mat-drawer-animating",e)}_getWidth(){return this._elementRef.nativeElement.offsetWidth||0}_updateFocusTrapState(){this._focusTrap&&(this._focusTrap.enabled=!!this._container?.hasBackdrop&&this.opened)}_updatePositionInParent(e){if(!this._platform.isBrowser)return;let t=this._elementRef.nativeElement,r=t.parentNode;e==="end"?(this._anchor||(this._anchor=this._doc.createComment("mat-drawer-anchor"),r.insertBefore(this._anchor,t)),r.appendChild(t)):this._anchor&&this._anchor.parentNode.insertBefore(t,this._anchor)}_handleTransitionEvent=e=>{let t=this._elementRef.nativeElement;e.target===t&&this._ngZone.run(()=>{e.type==="transitionrun"?this._animationStarted.next(e):(e.type==="transitionend"&&this._setIsAnimating(!1),this._animationEnd.next(e))})};static \u0275fac=function(t){return new(t||i)};static \u0275cmp=h({type:i,selectors:[["mat-drawer"]],viewQuery:function(t,r){if(t&1&&q(ye,5),t&2){let a;_(a=f())&&(r._content=a.first)}},hostAttrs:[1,"mat-drawer"],hostVars:12,hostBindings:function(t,r){t&2&&(N("align",null)("tabIndex",r.mode!=="side"?"-1":null),B("visibility",!r._container&&!r.opened?"hidden":null),l("mat-drawer-end",r.position==="end")("mat-drawer-over",r.mode==="over")("mat-drawer-push",r.mode==="push")("mat-drawer-side",r.mode==="side"))},inputs:{position:"position",mode:"mode",disableClose:"disableClose",autoFocus:"autoFocus",opened:"opened"},outputs:{openedChange:"openedChange",_openedStream:"opened",openedStart:"openedStart",_closedStream:"closed",closedStart:"closedStart",onPositionChanged:"positionChanged"},exportAs:["matDrawer"],ngContentSelectors:I,decls:3,vars:0,consts:[["content",""],["cdkScrollable","",1,"mat-drawer-inner-container"]],template:function(t,r){t&1&&(u(),m(0,"div",1,0),d(2),p())},dependencies:[b],encapsulation:2,changeDetection:0})}return i})(),X=(()=>{class i{_dir=n(_e,{optional:!0});_element=n(E);_ngZone=n(S);_changeDetectorRef=n(T);_animationDisabled=fe();_transitionsEnabled=!1;_allDrawers;_drawers=new de;_content;_userContent;get start(){return this._start}get end(){return this._end}get autosize(){return this._autosize}set autosize(e){this._autosize=w(e)}_autosize=n(Te);get hasBackdrop(){return this._drawerHasBackdrop(this._start)||this._drawerHasBackdrop(this._end)}set hasBackdrop(e){this._backdropOverride=e==null?null:w(e)}_backdropOverride;backdropClick=new F;_start;_end;_left;_right;_destroyed=new c;_doCheckSubject=new c;_contentMargins={left:null,right:null};_contentMarginChanges=new c;get scrollable(){return this._userContent||this._content}_injector=n(G);constructor(){let e=n(A),t=n(ge);this._dir?.change.pipe(s(this._destroyed)).subscribe(()=>{this._validateDrawers(),this.updateContentMargins()}),t.change().pipe(s(this._destroyed)).subscribe(()=>this.updateContentMargins()),!this._animationDisabled&&e.isBrowser&&this._ngZone.runOutsideAngular(()=>{setTimeout(()=>{this._element.nativeElement.classList.add("mat-drawer-transition"),this._transitionsEnabled=!0},200)})}ngAfterContentInit(){this._allDrawers.changes.pipe(j(this._allDrawers),s(this._destroyed)).subscribe(e=>{this._drawers.reset(e.filter(t=>!t._container||t._container===this)),this._drawers.notifyOnChanges()}),this._drawers.changes.pipe(j(null)).subscribe(()=>{this._validateDrawers(),this._drawers.forEach(e=>{this._watchDrawerToggle(e),this._watchDrawerPosition(e),this._watchDrawerMode(e)}),(!this._drawers.length||this._isDrawerOpen(this._start)||this._isDrawerOpen(this._end))&&this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),this._ngZone.runOutsideAngular(()=>{this._doCheckSubject.pipe(ie(10),s(this._destroyed)).subscribe(()=>this.updateContentMargins())})}ngOnDestroy(){this._contentMarginChanges.complete(),this._doCheckSubject.complete(),this._drawers.destroy(),this._destroyed.next(),this._destroyed.complete()}open(){this._drawers.forEach(e=>e.open())}close(){this._drawers.forEach(e=>e.close())}updateContentMargins(){let e=0,t=0;if(this._left&&this._left.opened){if(this._left.mode=="side")e+=this._left._getWidth();else if(this._left.mode=="push"){let r=this._left._getWidth();e+=r,t-=r}}if(this._right&&this._right.opened){if(this._right.mode=="side")t+=this._right._getWidth();else if(this._right.mode=="push"){let r=this._right._getWidth();t+=r,e-=r}}e=e||null,t=t||null,(e!==this._contentMargins.left||t!==this._contentMargins.right)&&(this._contentMargins={left:e,right:t},this._ngZone.run(()=>this._contentMarginChanges.next(this._contentMargins)))}ngDoCheck(){this._autosize&&this._isPushed()&&this._ngZone.runOutsideAngular(()=>this._doCheckSubject.next())}_watchDrawerToggle(e){e._animationStarted.pipe(s(this._drawers.changes)).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()}),e.mode!=="side"&&e.openedChange.pipe(s(this._drawers.changes)).subscribe(()=>this._setContainerClass(e.opened))}_watchDrawerPosition(e){e.onPositionChanged.pipe(s(this._drawers.changes)).subscribe(()=>{H({read:()=>this._validateDrawers()},{injector:this._injector})})}_watchDrawerMode(e){e._modeChanged.pipe(s(re(this._drawers.changes,this._destroyed))).subscribe(()=>{this.updateContentMargins(),this._changeDetectorRef.markForCheck()})}_setContainerClass(e){let t=this._element.nativeElement.classList,r="mat-drawer-container-has-open";e?t.add(r):t.remove(r)}_validateDrawers(){this._start=this._end=null,this._drawers.forEach(e=>{e.position=="end"?(this._end!=null,this._end=e):(this._start!=null,this._start=e)}),this._right=this._left=null,this._dir&&this._dir.value==="rtl"?(this._left=this._end,this._right=this._start):(this._left=this._start,this._right=this._end)}_isPushed(){return this._isDrawerOpen(this._start)&&this._start.mode!="over"||this._isDrawerOpen(this._end)&&this._end.mode!="over"}_onBackdropClicked(){this.backdropClick.emit(),this._closeModalDrawersViaBackdrop()}_closeModalDrawersViaBackdrop(){[this._start,this._end].filter(e=>e&&!e.disableClose&&this._drawerHasBackdrop(e)).forEach(e=>e._closeViaBackdropClick())}_isShowingBackdrop(){return this._isDrawerOpen(this._start)&&this._drawerHasBackdrop(this._start)||this._isDrawerOpen(this._end)&&this._drawerHasBackdrop(this._end)}_isDrawerOpen(e){return e!=null&&e.opened}_drawerHasBackdrop(e){return this._backdropOverride==null?!!e&&e.mode!=="side":this._backdropOverride}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=h({type:i,selectors:[["mat-drawer-container"]],contentQueries:function(t,r,a){if(t&1&&(x(a,R,5),x(a,J,5)),t&2){let o;_(o=f())&&(r._content=o.first),_(o=f())&&(r._allDrawers=o)}},viewQuery:function(t,r){if(t&1&&q(R,5),t&2){let a;_(a=f())&&(r._userContent=a.first)}},hostAttrs:[1,"mat-drawer-container"],hostVars:2,hostBindings:function(t,r){t&2&&l("mat-drawer-container-explicit-backdrop",r._backdropOverride)},inputs:{autosize:"autosize",hasBackdrop:"hasBackdrop"},outputs:{backdropClick:"backdropClick"},exportAs:["matDrawerContainer"],features:[v([{provide:ee,useExisting:i}])],ngContentSelectors:ke,decls:4,vars:2,consts:[[1,"mat-drawer-backdrop",3,"mat-drawer-shown"],[1,"mat-drawer-backdrop",3,"click"]],template:function(t,r){t&1&&(u(Ce),C(0,De,1,2,"div",0),d(1),d(2,1),C(3,xe,2,0,"mat-drawer-content")),t&2&&(k(r.hasBackdrop?0:-1),Z(3),k(r._content?-1:3))},dependencies:[R],styles:[`.mat-drawer-container{position:relative;z-index:1;color:var(--mat-sidenav-content-text-color, var(--mat-sys-on-background));background-color:var(--mat-sidenav-content-background-color, var(--mat-sys-background));box-sizing:border-box;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible;background-color:var(--mat-sidenav-scrim-color, color-mix(in srgb, var(--mat-sys-neutral-variant20) 40%, transparent))}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}@media(forced-colors: active){.mat-drawer-backdrop{opacity:.5}}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-content.mat-drawer-content-hidden{opacity:0}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;color:var(--mat-sidenav-container-text-color, var(--mat-sys-on-surface-variant));box-shadow:var(--mat-sidenav-container-elevation-shadow, none);background-color:var(--mat-sidenav-container-background-color, var(--mat-sys-surface));border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));width:var(--mat-sidenav-container-width, 360px);display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}@media(forced-colors: active){.mat-drawer,[dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}}@media(forced-colors: active){[dir=rtl] .mat-drawer,.mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0);border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0}[dir=rtl] .mat-drawer{border-top-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-left-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-right-radius:0;border-bottom-right-radius:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{border-top-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-bottom-right-radius:var(--mat-sidenav-container-shape, var(--mat-sys-corner-large));border-top-left-radius:0;border-bottom-left-radius:0;left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-transition .mat-drawer{transition:transform 400ms cubic-bezier(0.25, 0.8, 0.25, 1)}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating){visibility:hidden;box-shadow:none}.mat-drawer:not(.mat-drawer-opened):not(.mat-drawer-animating) .mat-drawer-inner-container{display:none}.mat-drawer.mat-drawer-opened.mat-drawer-opened{transform:none}.mat-drawer-side{box-shadow:none;border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid}.mat-drawer-side.mat-drawer-end{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side{border-left-color:var(--mat-sidenav-container-divider-color, transparent);border-left-width:1px;border-left-style:solid;border-right:none}[dir=rtl] .mat-drawer-side.mat-drawer-end{border-right-color:var(--mat-sidenav-container-divider-color, transparent);border-right-width:1px;border-right-style:solid;border-left:none}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto}.mat-sidenav-fixed{position:fixed}
3
- `],encapsulation:2,changeDetection:0})}return i})(),ve=(()=>{class i extends R{static \u0275fac=(()=>{let e;return function(r){return(e||(e=M(i)))(r||i)}})();static \u0275cmp=h({type:i,selectors:[["mat-sidenav-content"]],hostAttrs:[1,"mat-drawer-content","mat-sidenav-content"],features:[v([{provide:b,useExisting:i}]),y],ngContentSelectors:I,decls:1,vars:0,template:function(t,r){t&1&&(u(),d(0))},encapsulation:2,changeDetection:0})}return i})(),Re=(()=>{class i extends J{get fixedInViewport(){return this._fixedInViewport}set fixedInViewport(e){this._fixedInViewport=w(e)}_fixedInViewport=!1;get fixedTopGap(){return this._fixedTopGap}set fixedTopGap(e){this._fixedTopGap=K(e)}_fixedTopGap=0;get fixedBottomGap(){return this._fixedBottomGap}set fixedBottomGap(e){this._fixedBottomGap=K(e)}_fixedBottomGap=0;static \u0275fac=(()=>{let e;return function(r){return(e||(e=M(i)))(r||i)}})();static \u0275cmp=h({type:i,selectors:[["mat-sidenav"]],hostAttrs:[1,"mat-drawer","mat-sidenav"],hostVars:16,hostBindings:function(t,r){t&2&&(N("tabIndex",r.mode!=="side"?"-1":null)("align",null),B("top",r.fixedInViewport?r.fixedTopGap:null,"px")("bottom",r.fixedInViewport?r.fixedBottomGap:null,"px"),l("mat-drawer-end",r.position==="end")("mat-drawer-over",r.mode==="over")("mat-drawer-push",r.mode==="push")("mat-drawer-side",r.mode==="side")("mat-sidenav-fixed",r.fixedInViewport))},inputs:{fixedInViewport:"fixedInViewport",fixedTopGap:"fixedTopGap",fixedBottomGap:"fixedBottomGap"},exportAs:["matSidenav"],features:[v([{provide:J,useExisting:i}]),y],ngContentSelectors:I,decls:3,vars:0,consts:[["content",""],["cdkScrollable","",1,"mat-drawer-inner-container"]],template:function(t,r){t&1&&(u(),m(0,"div",1,0),d(2),p())},dependencies:[b],encapsulation:2,changeDetection:0})}return i})(),tt=(()=>{class i extends X{_allDrawers=void 0;_content=void 0;static \u0275fac=(()=>{let e;return function(r){return(e||(e=M(i)))(r||i)}})();static \u0275cmp=h({type:i,selectors:[["mat-sidenav-container"]],contentQueries:function(t,r,a){if(t&1&&(x(a,ve,5),x(a,Re,5)),t&2){let o;_(o=f())&&(r._content=o.first),_(o=f())&&(r._allDrawers=o)}},hostAttrs:[1,"mat-drawer-container","mat-sidenav-container"],hostVars:2,hostBindings:function(t,r){t&2&&l("mat-drawer-container-explicit-backdrop",r._backdropOverride)},exportAs:["matSidenavContainer"],features:[v([{provide:ee,useExisting:i},{provide:X,useExisting:i}]),y],ngContentSelectors:Ee,decls:4,vars:2,consts:[[1,"mat-drawer-backdrop",3,"mat-drawer-shown"],[1,"mat-drawer-backdrop",3,"click"]],template:function(t,r){t&1&&(u(Me),C(0,Fe,1,2,"div",0),d(1),d(2,1),C(3,Se,2,0,"mat-sidenav-content")),t&2&&(k(r.hasBackdrop?0:-1),Z(3),k(r._content?-1:3))},dependencies:[ve],styles:[Be],encapsulation:2,changeDetection:0})}return i})(),rt=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=le({type:i});static \u0275inj=ae({imports:[Y,$,$,Y]})}return i})();export{ve as a,Re as b,tt as c,rt as d};