@grumptech/ngx-basic-ui 1.0.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/breadcrumb/breadcrumb/breadcrumb.component.scss +18 -0
- package/code-editor/code-editor/code-editor.component.scss +58 -0
- package/fesm2022/grumptech-ngx-basic-ui-breadcrumb.mjs +25 -0
- package/fesm2022/grumptech-ngx-basic-ui-breadcrumb.mjs.map +1 -0
- package/fesm2022/grumptech-ngx-basic-ui-code-editor.mjs +92 -0
- package/fesm2022/grumptech-ngx-basic-ui-code-editor.mjs.map +1 -0
- package/fesm2022/grumptech-ngx-basic-ui-navigation.mjs +39 -0
- package/fesm2022/grumptech-ngx-basic-ui-navigation.mjs.map +1 -0
- package/fesm2022/grumptech-ngx-basic-ui.mjs +6 -0
- package/fesm2022/grumptech-ngx-basic-ui.mjs.map +1 -0
- package/navigation/navigation/navigation.component.scss +37 -0
- package/package.json +47 -0
- package/thin-scrollbars/_index.scss +19 -0
- package/types/grumptech-ngx-basic-ui-breadcrumb.d.ts +22 -0
- package/types/grumptech-ngx-basic-ui-code-editor.d.ts +33 -0
- package/types/grumptech-ngx-basic-ui-navigation.d.ts +28 -0
- package/types/grumptech-ngx-basic-ui.d.ts +2 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
@use "../../thin-scrollbars";
|
|
2
|
+
|
|
3
|
+
:host {
|
|
4
|
+
display: flex;
|
|
5
|
+
flex-direction: column;
|
|
6
|
+
min-width: 0;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.scroll {
|
|
10
|
+
display: block;
|
|
11
|
+
flex: 1;
|
|
12
|
+
border-radius: 4px;
|
|
13
|
+
border: 1px solid gray;
|
|
14
|
+
padding: 6px;
|
|
15
|
+
min-width: 0;
|
|
16
|
+
@include thin-scrollbars.scrollbars;
|
|
17
|
+
|
|
18
|
+
&.disabled {
|
|
19
|
+
background-color: rgba(0, 0, 0, 0.03);
|
|
20
|
+
border-color: lightgray;
|
|
21
|
+
cursor: text;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
textarea {
|
|
26
|
+
resize: none;
|
|
27
|
+
white-space: pre;
|
|
28
|
+
field-sizing: content;
|
|
29
|
+
width: auto;
|
|
30
|
+
padding: 0;
|
|
31
|
+
margin: 0;
|
|
32
|
+
outline: 0;
|
|
33
|
+
border: 0;
|
|
34
|
+
min-width: 100%;
|
|
35
|
+
background-color: transparent;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.warning-message {
|
|
39
|
+
flex-shrink: 0;
|
|
40
|
+
position: relative;
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
cursor: pointer;
|
|
43
|
+
margin-top: 0.5em;
|
|
44
|
+
border-radius: 0.5em;
|
|
45
|
+
background-color: #f44336;
|
|
46
|
+
height: 2em;
|
|
47
|
+
width: 100%;
|
|
48
|
+
}
|
|
49
|
+
.warning-message_text {
|
|
50
|
+
position: absolute;
|
|
51
|
+
box-sizing: border-box;
|
|
52
|
+
width: 100%;
|
|
53
|
+
padding: 0.33em 0.43em;
|
|
54
|
+
white-space: nowrap;
|
|
55
|
+
overflow: hidden;
|
|
56
|
+
text-overflow: ellipsis;
|
|
57
|
+
color: white;
|
|
58
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { RouterLink } from '@angular/router';
|
|
4
|
+
|
|
5
|
+
class Breadcrumb {
|
|
6
|
+
urlPrefix = input('', ...(ngDevMode ? [{ debugName: "urlPrefix" }] : /* istanbul ignore next */ []));
|
|
7
|
+
relativeTo = input(...(ngDevMode ? [undefined, { debugName: "relativeTo" }] : /* istanbul ignore next */ []));
|
|
8
|
+
parts = input([], ...(ngDevMode ? [{ debugName: "parts" }] : /* istanbul ignore next */ []));
|
|
9
|
+
trackFn(part, index) {
|
|
10
|
+
return `${part.label}-${part.url ? `,${part.url}` : ''}-${index}`;
|
|
11
|
+
}
|
|
12
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: Breadcrumb, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: Breadcrumb, isStandalone: true, selector: "b-breadcrumb", inputs: { urlPrefix: { classPropertyName: "urlPrefix", publicName: "urlPrefix", isSignal: true, isRequired: false, transformFunction: null }, relativeTo: { classPropertyName: "relativeTo", publicName: "relativeTo", isSignal: true, isRequired: false, transformFunction: null }, parts: { classPropertyName: "parts", publicName: "parts", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (parts().length) {\n <div class=\"breadcrumb\">\n @for (\n part of parts();\n track trackFn(part, index);\n let index = $index, last = $last\n ) {\n @if (part.url) {\n <a [relativeTo]=\"relativeTo()\" [routerLink]=\"urlPrefix() + part.url\">{{\n part.label\n }}</a>\n } @else {\n <span>{{ part.label }}</span>\n }\n @if (!last) {\n <span class=\"separator\">></span>\n }\n }\n </div>\n}\n", styles: [":host{display:block}.breadcrumb a{cursor:pointer;color:#00e;margin-right:10px;text-decoration:none}.breadcrumb a:hover{text-decoration:underline}.breadcrumb span{margin-right:10px}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
14
|
+
}
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: Breadcrumb, decorators: [{
|
|
16
|
+
type: Component,
|
|
17
|
+
args: [{ selector: 'b-breadcrumb', changeDetection: ChangeDetectionStrategy.OnPush, imports: [RouterLink], template: "@if (parts().length) {\n <div class=\"breadcrumb\">\n @for (\n part of parts();\n track trackFn(part, index);\n let index = $index, last = $last\n ) {\n @if (part.url) {\n <a [relativeTo]=\"relativeTo()\" [routerLink]=\"urlPrefix() + part.url\">{{\n part.label\n }}</a>\n } @else {\n <span>{{ part.label }}</span>\n }\n @if (!last) {\n <span class=\"separator\">></span>\n }\n }\n </div>\n}\n", styles: [":host{display:block}.breadcrumb a{cursor:pointer;color:#00e;margin-right:10px;text-decoration:none}.breadcrumb a:hover{text-decoration:underline}.breadcrumb span{margin-right:10px}\n"] }]
|
|
18
|
+
}], propDecorators: { urlPrefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "urlPrefix", required: false }] }], relativeTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "relativeTo", required: false }] }], parts: [{ type: i0.Input, args: [{ isSignal: true, alias: "parts", required: false }] }] } });
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Generated bundle index. Do not edit.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
export { Breadcrumb };
|
|
25
|
+
//# sourceMappingURL=grumptech-ngx-basic-ui-breadcrumb.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grumptech-ngx-basic-ui-breadcrumb.mjs","sources":["../../../projects/ngx-basic-ui/breadcrumb/breadcrumb/breadcrumb.component.ts","../../../projects/ngx-basic-ui/breadcrumb/breadcrumb/breadcrumb.component.html","../../../projects/ngx-basic-ui/breadcrumb/grumptech-ngx-basic-ui-breadcrumb.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { BreadcrumbPart } from '../models';\n\n@Component({\n selector: 'b-breadcrumb',\n templateUrl: 'breadcrumb.component.html',\n styleUrl: 'breadcrumb.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink],\n})\nexport class Breadcrumb {\n readonly urlPrefix = input('');\n readonly relativeTo = input<ActivatedRoute | null>();\n readonly parts = input<BreadcrumbPart[]>([]);\n\n protected trackFn(\n part: { label: string; url?: string },\n index: number,\n ): string {\n return `${part.label}-${part.url ? `,${part.url}` : ''}-${index}`;\n }\n}\n","@if (parts().length) {\n <div class=\"breadcrumb\">\n @for (\n part of parts();\n track trackFn(part, index);\n let index = $index, last = $last\n ) {\n @if (part.url) {\n <a [relativeTo]=\"relativeTo()\" [routerLink]=\"urlPrefix() + part.url\">{{\n part.label\n }}</a>\n } @else {\n <span>{{ part.label }}</span>\n }\n @if (!last) {\n <span class=\"separator\">></span>\n }\n }\n </div>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAWa,UAAU,CAAA;AACZ,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,gFAAC;IACrB,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAyB;AAC3C,IAAA,KAAK,GAAG,KAAK,CAAmB,EAAE,4EAAC;IAElC,OAAO,CACf,IAAqC,EACrC,KAAa,EAAA;QAEb,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA,CAAE,GAAG,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE;IACnE;wGAVW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAV,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECXvB,qeAoBA,EAAA,MAAA,EAAA,CAAA,wLAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDXY,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAET,UAAU,EAAA,UAAA,EAAA,CAAA;kBAPtB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,cAAc,mBAGP,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,UAAU,CAAC,EAAA,QAAA,EAAA,qeAAA,EAAA,MAAA,EAAA,CAAA,wLAAA,CAAA,EAAA;;;AETvB;;AAEG;;;;"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, output, signal, inject, DestroyRef, ChangeDetectionStrategy, Component, Injectable } from '@angular/core';
|
|
3
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
|
+
import * as i1 from '@angular/forms';
|
|
5
|
+
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
+
import { CdkTextareaAutosize } from '@angular/cdk/text-field';
|
|
7
|
+
import { debounceTime } from 'rxjs';
|
|
8
|
+
import JSON5 from 'json5';
|
|
9
|
+
|
|
10
|
+
// CdkTextareaAutosize can be removed once `field-sizing: content;` is fully supported.
|
|
11
|
+
class CodeEditor {
|
|
12
|
+
data = input.required(...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
13
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
14
|
+
formatter = input(...(ngDevMode ? [undefined, { debugName: "formatter" }] : /* istanbul ignore next */ []));
|
|
15
|
+
validator = input(...(ngDevMode ? [undefined, { debugName: "validator" }] : /* istanbul ignore next */ []));
|
|
16
|
+
validChange = output();
|
|
17
|
+
warningMessage = signal('', ...(ngDevMode ? [{ debugName: "warningMessage" }] : /* istanbul ignore next */ []));
|
|
18
|
+
formControl = new FormControl('', { nonNullable: true });
|
|
19
|
+
id;
|
|
20
|
+
static counter = 0;
|
|
21
|
+
destroyRef = inject(DestroyRef);
|
|
22
|
+
constructor() {
|
|
23
|
+
this.id = `b-code-editor_${++CodeEditor.counter}`;
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
this.formControl.valueChanges
|
|
27
|
+
.pipe(takeUntilDestroyed(this.destroyRef), debounceTime(200))
|
|
28
|
+
.subscribe((value) => {
|
|
29
|
+
const validator = this.validator();
|
|
30
|
+
if (!validator) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const result = validator(value);
|
|
34
|
+
if (!result.valid) {
|
|
35
|
+
this.warningMessage.set(result.message);
|
|
36
|
+
console.warn(result.message);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
this.validChange.emit(value);
|
|
40
|
+
this.warningMessage.set('');
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
ngOnChanges(changes) {
|
|
45
|
+
if (changes.data) {
|
|
46
|
+
const formatter = this.formatter();
|
|
47
|
+
this.formControl.setValue(formatter
|
|
48
|
+
? formatter(changes.data.currentValue)
|
|
49
|
+
: changes.data.currentValue);
|
|
50
|
+
}
|
|
51
|
+
if (changes.disabled) {
|
|
52
|
+
changes.disabled.currentValue
|
|
53
|
+
? this.formControl.disable()
|
|
54
|
+
: this.formControl.enable();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
getData() {
|
|
58
|
+
return this.formControl.value;
|
|
59
|
+
}
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: CodeEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: CodeEditor, isStandalone: true, selector: "b-code-editor", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, formatter: { classPropertyName: "formatter", publicName: "formatter", isSignal: true, isRequired: false, transformFunction: null }, validator: { classPropertyName: "validator", publicName: "validator", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { validChange: "validChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"scroll\" [class.disabled]=\"disabled()\">\n <textarea\n cdkTextareaAutosize\n [id]=\"id\"\n [style.color]=\"disabled() ? 'rgba(0, 0, 0, 0.5)' : ''\"\n [formControl]=\"formControl\"\n spellcheck=\"false\"\n ></textarea>\n</div>\n@if (warningMessage()) {\n <div class=\"warning-message\">\n <div class=\"warning-message_text\">{{ warningMessage() }}</div>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column;min-width:0}.scroll{display:block;flex:1;border-radius:4px;border:1px solid gray;padding:6px;min-width:0;overflow:auto}.scroll::-webkit-scrollbar{width:6px;height:6px}.scroll::-webkit-scrollbar-corner{display:none}.scroll::-webkit-scrollbar-thumb{border-radius:4px;background:#aaa}.scroll::-webkit-scrollbar-track{border-radius:4px;background:#eee}.scroll.disabled{background-color:#00000008;border-color:#d3d3d3;cursor:text}textarea{resize:none;white-space:pre;field-sizing:content;width:auto;padding:0;margin:0;outline:0;border:0;min-width:100%;background-color:transparent}.warning-message{flex-shrink:0;position:relative;overflow:hidden;cursor:pointer;margin-top:.5em;border-radius:.5em;background-color:#f44336;height:2em;width:100%}.warning-message_text{position:absolute;box-sizing:border-box;width:100%;padding:.33em .43em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
62
|
+
}
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: CodeEditor, decorators: [{
|
|
64
|
+
type: Component,
|
|
65
|
+
args: [{ selector: 'b-code-editor', changeDetection: ChangeDetectionStrategy.OnPush, imports: [ReactiveFormsModule, CdkTextareaAutosize], template: "<div class=\"scroll\" [class.disabled]=\"disabled()\">\n <textarea\n cdkTextareaAutosize\n [id]=\"id\"\n [style.color]=\"disabled() ? 'rgba(0, 0, 0, 0.5)' : ''\"\n [formControl]=\"formControl\"\n spellcheck=\"false\"\n ></textarea>\n</div>\n@if (warningMessage()) {\n <div class=\"warning-message\">\n <div class=\"warning-message_text\">{{ warningMessage() }}</div>\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column;min-width:0}.scroll{display:block;flex:1;border-radius:4px;border:1px solid gray;padding:6px;min-width:0;overflow:auto}.scroll::-webkit-scrollbar{width:6px;height:6px}.scroll::-webkit-scrollbar-corner{display:none}.scroll::-webkit-scrollbar-thumb{border-radius:4px;background:#aaa}.scroll::-webkit-scrollbar-track{border-radius:4px;background:#eee}.scroll.disabled{background-color:#00000008;border-color:#d3d3d3;cursor:text}textarea{resize:none;white-space:pre;field-sizing:content;width:auto;padding:0;margin:0;outline:0;border:0;min-width:100%;background-color:transparent}.warning-message{flex-shrink:0;position:relative;overflow:hidden;cursor:pointer;margin-top:.5em;border-radius:.5em;background-color:#f44336;height:2em;width:100%}.warning-message_text{position:absolute;box-sizing:border-box;width:100%;padding:.33em .43em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}\n"] }]
|
|
66
|
+
}], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], formatter: [{ type: i0.Input, args: [{ isSignal: true, alias: "formatter", required: false }] }], validator: [{ type: i0.Input, args: [{ isSignal: true, alias: "validator", required: false }] }], validChange: [{ type: i0.Output, args: ["validChange"] }] } });
|
|
67
|
+
|
|
68
|
+
class JsonFormatter {
|
|
69
|
+
format(data) {
|
|
70
|
+
let object;
|
|
71
|
+
try {
|
|
72
|
+
object = JSON5.parse(data);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return data;
|
|
76
|
+
}
|
|
77
|
+
return JSON5.stringify(object);
|
|
78
|
+
}
|
|
79
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: JsonFormatter, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
80
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: JsonFormatter, providedIn: 'root' });
|
|
81
|
+
}
|
|
82
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: JsonFormatter, decorators: [{
|
|
83
|
+
type: Injectable,
|
|
84
|
+
args: [{ providedIn: 'root' }]
|
|
85
|
+
}] });
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Generated bundle index. Do not edit.
|
|
89
|
+
*/
|
|
90
|
+
|
|
91
|
+
export { CodeEditor, JsonFormatter };
|
|
92
|
+
//# sourceMappingURL=grumptech-ngx-basic-ui-code-editor.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grumptech-ngx-basic-ui-code-editor.mjs","sources":["../../../projects/ngx-basic-ui/code-editor/code-editor/code-editor.component.ts","../../../projects/ngx-basic-ui/code-editor/code-editor/code-editor.component.html","../../../projects/ngx-basic-ui/code-editor/formatters/json-formatter.ts","../../../projects/ngx-basic-ui/code-editor/grumptech-ngx-basic-ui-code-editor.ts"],"sourcesContent":["import {\n Component,\n OnChanges,\n OnInit,\n SimpleChanges,\n input,\n output,\n signal,\n inject,\n DestroyRef,\n ChangeDetectionStrategy,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { CdkTextareaAutosize } from '@angular/cdk/text-field';\nimport { debounceTime } from 'rxjs';\n\n// CdkTextareaAutosize can be removed once `field-sizing: content;` is fully supported.\n@Component({\n selector: 'b-code-editor',\n templateUrl: './code-editor.component.html',\n styleUrl: './code-editor.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, CdkTextareaAutosize],\n})\nexport class CodeEditor implements OnInit, OnChanges {\n readonly data = input.required<string>();\n readonly disabled = input(false);\n readonly formatter = input<(data: string) => string>();\n readonly validator = input<\n (data: string) => {\n valid: boolean;\n message: string;\n }\n >();\n readonly validChange = output<string>();\n protected readonly warningMessage = signal('');\n protected readonly formControl = new FormControl('', { nonNullable: true });\n protected readonly id: string;\n private static counter = 0;\n private destroyRef = inject(DestroyRef);\n\n constructor() {\n this.id = `b-code-editor_${++CodeEditor.counter}`;\n }\n\n ngOnInit(): void {\n this.formControl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef), debounceTime(200))\n .subscribe((value) => {\n const validator = this.validator();\n if (!validator) {\n return;\n }\n const result = validator(value);\n if (!result.valid) {\n this.warningMessage.set(result.message);\n console.warn(result.message);\n } else {\n this.validChange.emit(value);\n this.warningMessage.set('');\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.data) {\n const formatter = this.formatter();\n this.formControl.setValue(\n formatter\n ? formatter(changes.data.currentValue)\n : changes.data.currentValue,\n );\n }\n if (changes.disabled) {\n changes.disabled.currentValue\n ? this.formControl.disable()\n : this.formControl.enable();\n }\n }\n\n getData(): string {\n return this.formControl.value;\n }\n}\n","<div class=\"scroll\" [class.disabled]=\"disabled()\">\n <textarea\n cdkTextareaAutosize\n [id]=\"id\"\n [style.color]=\"disabled() ? 'rgba(0, 0, 0, 0.5)' : ''\"\n [formControl]=\"formControl\"\n spellcheck=\"false\"\n ></textarea>\n</div>\n@if (warningMessage()) {\n <div class=\"warning-message\">\n <div class=\"warning-message_text\">{{ warningMessage() }}</div>\n </div>\n}\n","import { Injectable } from '@angular/core';\nimport JSON5 from 'json5';\n\n@Injectable({ providedIn: 'root' })\nexport class JsonFormatter {\n format(data: string): string {\n let object: any;\n try {\n object = JSON5.parse(data);\n } catch {\n return data;\n }\n return JSON5.stringify(object);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { RouterLink, RouterLinkActive } from '@angular/router';
|
|
4
|
+
import * as i1 from '@angular/material/list';
|
|
5
|
+
import { MatListModule } from '@angular/material/list';
|
|
6
|
+
|
|
7
|
+
class Navigation {
|
|
8
|
+
urlPrefix = input('', ...(ngDevMode ? [{ debugName: "urlPrefix" }] : /* istanbul ignore next */ []));
|
|
9
|
+
relativeTo = input(...(ngDevMode ? [undefined, { debugName: "relativeTo" }] : /* istanbul ignore next */ []));
|
|
10
|
+
menu = input([], ...(ngDevMode ? [{ debugName: "menu" }] : /* istanbul ignore next */ []));
|
|
11
|
+
menuItems = [];
|
|
12
|
+
ngOnChanges(changes) {
|
|
13
|
+
if (changes.menu) {
|
|
14
|
+
this.menuItems = this.toFlatMenuItemsRecursive(this.menu());
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
toFlatMenuItemsRecursive(items, level = 0) {
|
|
18
|
+
return items.flatMap((i) => {
|
|
19
|
+
const item = i.url
|
|
20
|
+
? { name: i.name, url: i.url, level }
|
|
21
|
+
: { name: i.name, level };
|
|
22
|
+
const children = this.toFlatMenuItemsRecursive(i.children, level + 1);
|
|
23
|
+
return [item].concat(children);
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: Navigation, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
27
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: Navigation, isStandalone: true, selector: "b-navigation", inputs: { urlPrefix: { classPropertyName: "urlPrefix", publicName: "urlPrefix", isSignal: true, isRequired: false, transformFunction: null }, relativeTo: { classPropertyName: "relativeTo", publicName: "relativeTo", isSignal: true, isRequired: false, transformFunction: null }, menu: { classPropertyName: "menu", publicName: "menu", isSignal: true, isRequired: false, transformFunction: null } }, usesOnChanges: true, ngImport: i0, template: "<nav>\n <div class=\"container\">\n @for (item of menuItems; track item) {\n @if (item.url) {\n <a\n mat-list-item\n [style.paddingLeft.px]=\"item.level * 10 + 10\"\n [relativeTo]=\"relativeTo()\"\n [routerLink]=\"urlPrefix() + item.url\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{\n matrixParams: 'ignored',\n queryParams: 'ignored',\n paths: 'exact',\n fragment: 'ignored',\n }\"\n >{{ item.name }}</a\n >\n } @else {\n <div [style.paddingLeft.px]=\"item.level * 10 + 10\" disabled>\n {{ item.name }}\n </div>\n }\n }\n </div>\n</nav>\n", styles: [":host{box-sizing:border-box}nav{height:100%;box-sizing:border-box;padding:5px}.container{padding-bottom:15px;font-size:16px}.container a{display:block;line-height:40px;color:#1e1e1e;text-decoration:none;height:40px;border-radius:8px}.container a:hover{background-color:#00000005}.container a:focus{background-color:#0000000d}.container a.active{background-color:#673ab740}.container div{height:40px;line-height:40px;color:#1e1e1eb3}\n"], dependencies: [{ kind: "ngmodule", type: MatListModule }, { kind: "component", type: i1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: Navigation, decorators: [{
|
|
30
|
+
type: Component,
|
|
31
|
+
args: [{ selector: 'b-navigation', changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatListModule, RouterLink, RouterLinkActive], template: "<nav>\n <div class=\"container\">\n @for (item of menuItems; track item) {\n @if (item.url) {\n <a\n mat-list-item\n [style.paddingLeft.px]=\"item.level * 10 + 10\"\n [relativeTo]=\"relativeTo()\"\n [routerLink]=\"urlPrefix() + item.url\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{\n matrixParams: 'ignored',\n queryParams: 'ignored',\n paths: 'exact',\n fragment: 'ignored',\n }\"\n >{{ item.name }}</a\n >\n } @else {\n <div [style.paddingLeft.px]=\"item.level * 10 + 10\" disabled>\n {{ item.name }}\n </div>\n }\n }\n </div>\n</nav>\n", styles: [":host{box-sizing:border-box}nav{height:100%;box-sizing:border-box;padding:5px}.container{padding-bottom:15px;font-size:16px}.container a{display:block;line-height:40px;color:#1e1e1e;text-decoration:none;height:40px;border-radius:8px}.container a:hover{background-color:#00000005}.container a:focus{background-color:#0000000d}.container a.active{background-color:#673ab740}.container div{height:40px;line-height:40px;color:#1e1e1eb3}\n"] }]
|
|
32
|
+
}], propDecorators: { urlPrefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "urlPrefix", required: false }] }], relativeTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "relativeTo", required: false }] }], menu: [{ type: i0.Input, args: [{ isSignal: true, alias: "menu", required: false }] }] } });
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Generated bundle index. Do not edit.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
export { Navigation };
|
|
39
|
+
//# sourceMappingURL=grumptech-ngx-basic-ui-navigation.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grumptech-ngx-basic-ui-navigation.mjs","sources":["../../../projects/ngx-basic-ui/navigation/navigation/navigation.component.ts","../../../projects/ngx-basic-ui/navigation/navigation/navigation.component.html","../../../projects/ngx-basic-ui/navigation/grumptech-ngx-basic-ui-navigation.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n OnChanges,\n SimpleChanges,\n input,\n} from '@angular/core';\nimport { ActivatedRoute, RouterLink, RouterLinkActive } from '@angular/router';\nimport { MatListModule } from '@angular/material/list';\nimport { MenuItem } from '../models';\n\ninterface FlatMenuItem {\n name: string;\n url?: string;\n level: number;\n}\n\n@Component({\n selector: 'b-navigation',\n templateUrl: 'navigation.component.html',\n styleUrl: 'navigation.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatListModule, RouterLink, RouterLinkActive],\n})\nexport class Navigation implements OnChanges {\n readonly urlPrefix = input('');\n readonly relativeTo = input<ActivatedRoute | null>();\n readonly menu = input<MenuItem[]>([]);\n menuItems: FlatMenuItem[] = [];\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.menu) {\n this.menuItems = this.toFlatMenuItemsRecursive(this.menu());\n }\n }\n\n private toFlatMenuItemsRecursive(\n items: MenuItem[],\n level = 0,\n ): FlatMenuItem[] {\n return items.flatMap((i) => {\n const item = i.url\n ? { name: i.name, url: i.url, level }\n : { name: i.name, level };\n const children = this.toFlatMenuItemsRecursive(i.children, level + 1);\n return [item].concat(children);\n });\n }\n}\n","<nav>\n <div class=\"container\">\n @for (item of menuItems; track item) {\n @if (item.url) {\n <a\n mat-list-item\n [style.paddingLeft.px]=\"item.level * 10 + 10\"\n [relativeTo]=\"relativeTo()\"\n [routerLink]=\"urlPrefix() + item.url\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{\n matrixParams: 'ignored',\n queryParams: 'ignored',\n paths: 'exact',\n fragment: 'ignored',\n }\"\n >{{ item.name }}</a\n >\n } @else {\n <div [style.paddingLeft.px]=\"item.level * 10 + 10\" disabled>\n {{ item.name }}\n </div>\n }\n }\n </div>\n</nav>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAwBa,UAAU,CAAA;AACZ,IAAA,SAAS,GAAG,KAAK,CAAC,EAAE,gFAAC;IACrB,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAyB;AAC3C,IAAA,IAAI,GAAG,KAAK,CAAa,EAAE,2EAAC;IACrC,SAAS,GAAmB,EAAE;AAE9B,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AAChB,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7D;IACF;AAEQ,IAAA,wBAAwB,CAC9B,KAAiB,EACjB,KAAK,GAAG,CAAC,EAAA;AAET,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACzB,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC;AACb,kBAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK;kBACjC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;AAC3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;AAChC,QAAA,CAAC,CAAC;IACJ;wGAvBW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,UAAU,yeCxBvB,+tBA0BA,EAAA,MAAA,EAAA,CAAA,obAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDJY,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,oOAAE,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,uBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAE1C,UAAU,EAAA,UAAA,EAAA,CAAA;kBAPtB,SAAS;+BACE,cAAc,EAAA,eAAA,EAGP,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,aAAa,EAAE,UAAU,EAAE,gBAAgB,CAAC,EAAA,QAAA,EAAA,+tBAAA,EAAA,MAAA,EAAA,CAAA,obAAA,CAAA,EAAA;;;AEtBxD;;AAEG;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grumptech-ngx-basic-ui.mjs","sources":["../../../projects/ngx-basic-ui/index.ts","../../../projects/ngx-basic-ui/grumptech-ngx-basic-ui.ts"],"sourcesContent":["export default {};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAAA,YAAe,EAAE;;ACAjB;;AAEG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
:host {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
nav {
|
|
6
|
+
height: 100%;
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
padding: 5px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.container {
|
|
12
|
+
padding-bottom: 15px;
|
|
13
|
+
font-size: 16px;
|
|
14
|
+
a {
|
|
15
|
+
display: block;
|
|
16
|
+
line-height: 40px;
|
|
17
|
+
color: rgb(30, 30, 30);
|
|
18
|
+
text-decoration: none;
|
|
19
|
+
height: 40px;
|
|
20
|
+
border-radius: 8px;
|
|
21
|
+
|
|
22
|
+
&:hover {
|
|
23
|
+
background-color: rgba(0, 0, 0, 0.02);
|
|
24
|
+
}
|
|
25
|
+
&:focus {
|
|
26
|
+
background-color: rgba(0, 0, 0, 0.05);
|
|
27
|
+
}
|
|
28
|
+
&.active {
|
|
29
|
+
background-color: rgba(103, 58, 183, 0.25);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
div {
|
|
33
|
+
height: 40px;
|
|
34
|
+
line-height: 40px;
|
|
35
|
+
color: rgb(30, 30, 30, 0.7);
|
|
36
|
+
}
|
|
37
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@grumptech/ngx-basic-ui",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "basic Angular ui components",
|
|
5
|
+
"author": "GrumpTech",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/GrumpTech/ngx-basic-ui.git"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"Angular",
|
|
13
|
+
"components"
|
|
14
|
+
],
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/GrumpTech/ngx-basic-ui/issues"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/GrumpTech/ngx-basic-ui#readme",
|
|
19
|
+
"module": "fesm2022/grumptech-ngx-basic-ui.mjs",
|
|
20
|
+
"typings": "types/grumptech-ngx-basic-ui.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
"./package.json": {
|
|
23
|
+
"default": "./package.json"
|
|
24
|
+
},
|
|
25
|
+
".": {
|
|
26
|
+
"types": "./types/grumptech-ngx-basic-ui.d.ts",
|
|
27
|
+
"default": "./fesm2022/grumptech-ngx-basic-ui.mjs"
|
|
28
|
+
},
|
|
29
|
+
"./breadcrumb": {
|
|
30
|
+
"types": "./types/grumptech-ngx-basic-ui-breadcrumb.d.ts",
|
|
31
|
+
"default": "./fesm2022/grumptech-ngx-basic-ui-breadcrumb.mjs"
|
|
32
|
+
},
|
|
33
|
+
"./code-editor": {
|
|
34
|
+
"types": "./types/grumptech-ngx-basic-ui-code-editor.d.ts",
|
|
35
|
+
"default": "./fesm2022/grumptech-ngx-basic-ui-code-editor.mjs"
|
|
36
|
+
},
|
|
37
|
+
"./navigation": {
|
|
38
|
+
"types": "./types/grumptech-ngx-basic-ui-navigation.d.ts",
|
|
39
|
+
"default": "./fesm2022/grumptech-ngx-basic-ui-navigation.mjs"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"sideEffects": false,
|
|
43
|
+
"type": "module",
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"tslib": "^2.3.0"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
@mixin scrollbars {
|
|
2
|
+
overflow: auto;
|
|
3
|
+
|
|
4
|
+
&::-webkit-scrollbar {
|
|
5
|
+
width: 6px;
|
|
6
|
+
height: 6px;
|
|
7
|
+
}
|
|
8
|
+
&::-webkit-scrollbar-corner {
|
|
9
|
+
display: none;
|
|
10
|
+
}
|
|
11
|
+
&::-webkit-scrollbar-thumb {
|
|
12
|
+
border-radius: 4px;
|
|
13
|
+
background: #aaa;
|
|
14
|
+
}
|
|
15
|
+
&::-webkit-scrollbar-track {
|
|
16
|
+
border-radius: 4px;
|
|
17
|
+
background: #eee;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ActivatedRoute } from '@angular/router';
|
|
3
|
+
|
|
4
|
+
interface BreadcrumbPart {
|
|
5
|
+
label: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
declare class Breadcrumb {
|
|
10
|
+
readonly urlPrefix: _angular_core.InputSignal<string>;
|
|
11
|
+
readonly relativeTo: _angular_core.InputSignal<ActivatedRoute | null | undefined>;
|
|
12
|
+
readonly parts: _angular_core.InputSignal<BreadcrumbPart[]>;
|
|
13
|
+
protected trackFn(part: {
|
|
14
|
+
label: string;
|
|
15
|
+
url?: string;
|
|
16
|
+
}, index: number): string;
|
|
17
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Breadcrumb, never>;
|
|
18
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Breadcrumb, "b-breadcrumb", never, { "urlPrefix": { "alias": "urlPrefix"; "required": false; "isSignal": true; }; "relativeTo": { "alias": "relativeTo"; "required": false; "isSignal": true; }; "parts": { "alias": "parts"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { Breadcrumb };
|
|
22
|
+
export type { BreadcrumbPart };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
3
|
+
import { FormControl } from '@angular/forms';
|
|
4
|
+
|
|
5
|
+
declare class CodeEditor implements OnInit, OnChanges {
|
|
6
|
+
readonly data: _angular_core.InputSignal<string>;
|
|
7
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
8
|
+
readonly formatter: _angular_core.InputSignal<((data: string) => string) | undefined>;
|
|
9
|
+
readonly validator: _angular_core.InputSignal<((data: string) => {
|
|
10
|
+
valid: boolean;
|
|
11
|
+
message: string;
|
|
12
|
+
}) | undefined>;
|
|
13
|
+
readonly validChange: _angular_core.OutputEmitterRef<string>;
|
|
14
|
+
protected readonly warningMessage: _angular_core.WritableSignal<string>;
|
|
15
|
+
protected readonly formControl: FormControl<string>;
|
|
16
|
+
protected readonly id: string;
|
|
17
|
+
private static counter;
|
|
18
|
+
private destroyRef;
|
|
19
|
+
constructor();
|
|
20
|
+
ngOnInit(): void;
|
|
21
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
22
|
+
getData(): string;
|
|
23
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CodeEditor, never>;
|
|
24
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeEditor, "b-code-editor", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "formatter": { "alias": "formatter"; "required": false; "isSignal": true; }; "validator": { "alias": "validator"; "required": false; "isSignal": true; }; }, { "validChange": "validChange"; }, never, never, true, never>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
declare class JsonFormatter {
|
|
28
|
+
format(data: string): string;
|
|
29
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<JsonFormatter, never>;
|
|
30
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<JsonFormatter>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export { CodeEditor, JsonFormatter };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { OnChanges, SimpleChanges } from '@angular/core';
|
|
3
|
+
import { ActivatedRoute } from '@angular/router';
|
|
4
|
+
|
|
5
|
+
interface MenuItem {
|
|
6
|
+
name: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
children: MenuItem[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
interface FlatMenuItem {
|
|
12
|
+
name: string;
|
|
13
|
+
url?: string;
|
|
14
|
+
level: number;
|
|
15
|
+
}
|
|
16
|
+
declare class Navigation implements OnChanges {
|
|
17
|
+
readonly urlPrefix: _angular_core.InputSignal<string>;
|
|
18
|
+
readonly relativeTo: _angular_core.InputSignal<ActivatedRoute | null | undefined>;
|
|
19
|
+
readonly menu: _angular_core.InputSignal<MenuItem[]>;
|
|
20
|
+
menuItems: FlatMenuItem[];
|
|
21
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
22
|
+
private toFlatMenuItemsRecursive;
|
|
23
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Navigation, never>;
|
|
24
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Navigation, "b-navigation", never, { "urlPrefix": { "alias": "urlPrefix"; "required": false; "isSignal": true; }; "relativeTo": { "alias": "relativeTo"; "required": false; "isSignal": true; }; "menu": { "alias": "menu"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export { Navigation };
|
|
28
|
+
export type { MenuItem };
|