gridstack 10.3.0 → 11.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/README.md +37 -3
- package/dist/angular/README.md +47 -25
- package/dist/angular/{esm2020 → esm2022}/gridstack-angular.mjs +5 -5
- package/dist/angular/esm2022/index.mjs +8 -0
- package/dist/angular/esm2022/lib/base-widget.mjs +34 -0
- package/dist/angular/esm2022/lib/gridstack-item.component.mjs +72 -0
- package/dist/angular/esm2022/lib/gridstack.component.mjs +300 -0
- package/dist/angular/esm2022/lib/gridstack.module.mjs +39 -0
- package/dist/angular/{fesm2020 → fesm2022}/gridstack-angular.mjs +400 -369
- package/dist/angular/fesm2022/gridstack-angular.mjs.map +1 -0
- package/dist/angular/index.d.ts +4 -5
- package/dist/angular/lib/base-widget.d.ts +18 -16
- package/dist/angular/lib/gridstack-item.component.d.ts +37 -37
- package/dist/angular/lib/gridstack.component.d.ts +135 -129
- package/dist/angular/lib/gridstack.module.d.ts +10 -10
- package/dist/angular/src/base-widget.ts +36 -0
- package/dist/angular/src/gridstack-item.component.ts +82 -0
- package/dist/angular/src/gridstack.component.ts +312 -0
- package/dist/angular/src/gridstack.module.ts +32 -0
- package/dist/dd-base-impl.d.ts +2 -2
- package/dist/dd-base-impl.js +2 -2
- package/dist/dd-base-impl.js.map +1 -1
- package/dist/dd-draggable.d.ts +7 -16
- package/dist/dd-draggable.js +23 -34
- package/dist/dd-draggable.js.map +1 -1
- package/dist/dd-droppable.d.ts +2 -2
- package/dist/dd-droppable.js +2 -2
- package/dist/dd-droppable.js.map +1 -1
- package/dist/dd-element.d.ts +5 -5
- package/dist/dd-element.js +2 -2
- package/dist/dd-element.js.map +1 -1
- package/dist/dd-gridstack.d.ts +5 -5
- package/dist/dd-gridstack.js +8 -8
- package/dist/dd-gridstack.js.map +1 -1
- package/dist/dd-manager.d.ts +2 -2
- package/dist/dd-manager.js +2 -2
- package/dist/dd-manager.js.map +1 -1
- package/dist/dd-resizable-handle.d.ts +2 -2
- package/dist/dd-resizable-handle.js +3 -3
- package/dist/dd-resizable-handle.js.map +1 -1
- package/dist/dd-resizable.d.ts +4 -2
- package/dist/dd-resizable.js +15 -10
- package/dist/dd-resizable.js.map +1 -1
- package/dist/dd-touch.d.ts +2 -2
- package/dist/dd-touch.js +2 -2
- package/dist/dd-touch.js.map +1 -1
- package/dist/es5/dd-base-impl.d.ts +2 -2
- package/dist/es5/dd-base-impl.js +2 -2
- package/dist/es5/dd-base-impl.js.map +1 -1
- package/dist/es5/dd-draggable.d.ts +7 -16
- package/dist/es5/dd-draggable.js +20 -29
- package/dist/es5/dd-draggable.js.map +1 -1
- package/dist/es5/dd-droppable.d.ts +2 -2
- package/dist/es5/dd-droppable.js +2 -2
- package/dist/es5/dd-droppable.js.map +1 -1
- package/dist/es5/dd-element.d.ts +5 -5
- package/dist/es5/dd-element.js +2 -2
- package/dist/es5/dd-element.js.map +1 -1
- package/dist/es5/dd-gridstack.d.ts +5 -5
- package/dist/es5/dd-gridstack.js +9 -6
- package/dist/es5/dd-gridstack.js.map +1 -1
- package/dist/es5/dd-manager.d.ts +2 -2
- package/dist/es5/dd-manager.js +2 -2
- package/dist/es5/dd-manager.js.map +1 -1
- package/dist/es5/dd-resizable-handle.d.ts +2 -2
- package/dist/es5/dd-resizable-handle.js +2 -2
- package/dist/es5/dd-resizable-handle.js.map +1 -1
- package/dist/es5/dd-resizable.d.ts +4 -2
- package/dist/es5/dd-resizable.js +13 -8
- package/dist/es5/dd-resizable.js.map +1 -1
- package/dist/es5/dd-touch.d.ts +2 -2
- package/dist/es5/dd-touch.js +2 -2
- package/dist/es5/dd-touch.js.map +1 -1
- package/dist/es5/gridstack-all.js +1 -1
- package/dist/es5/gridstack-all.js.LICENSE.txt +2 -2
- package/dist/es5/gridstack-all.js.map +1 -1
- package/dist/es5/gridstack-engine.d.ts +2 -2
- package/dist/es5/gridstack-engine.js +5 -5
- package/dist/es5/gridstack-engine.js.map +1 -1
- package/dist/es5/gridstack-poly.js +2 -2
- package/dist/es5/gridstack.d.ts +22 -17
- package/dist/es5/gridstack.js +170 -142
- package/dist/es5/gridstack.js.map +1 -1
- package/dist/es5/types.d.ts +16 -8
- package/dist/es5/types.js +3 -10
- package/dist/es5/types.js.map +1 -1
- package/dist/es5/utils.d.ts +6 -2
- package/dist/es5/utils.js +43 -8
- package/dist/es5/utils.js.map +1 -1
- package/dist/gridstack-all.js +1 -1
- package/dist/gridstack-all.js.LICENSE.txt +2 -2
- package/dist/gridstack-all.js.map +1 -1
- package/dist/gridstack-engine.d.ts +2 -2
- package/dist/gridstack-engine.js +61 -61
- package/dist/gridstack-engine.js.map +1 -1
- package/dist/gridstack-extra.css +1 -1
- package/dist/gridstack.css +2 -2
- package/dist/gridstack.d.ts +22 -17
- package/dist/gridstack.js +255 -227
- package/dist/gridstack.js.map +1 -1
- package/dist/src/gridstack-extra.scss +25 -0
- package/dist/src/gridstack.scss +157 -0
- package/dist/types.d.ts +16 -8
- package/dist/types.js +2 -9
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +6 -2
- package/dist/utils.js +57 -25
- package/dist/utils.js.map +1 -1
- package/doc/CHANGES.md +16 -0
- package/doc/README.md +18 -23
- package/package.json +3 -2
- package/.github/FUNDING.yml +0 -12
- package/angular/.editorconfig +0 -16
- package/angular/.vscode/extensions.json +0 -4
- package/angular/.vscode/launch.json +0 -20
- package/angular/.vscode/tasks.json +0 -42
- package/angular/README.md +0 -170
- package/angular/README_build.md +0 -27
- package/angular/angular.json +0 -135
- package/angular/package.json +0 -40
- package/angular/projects/lib/README.md +0 -24
- package/angular/projects/lib/ng-package.json +0 -7
- package/angular/projects/lib/package.json +0 -11
- package/angular/projects/lib/tsconfig.lib.json +0 -15
- package/angular/projects/lib/tsconfig.lib.prod.json +0 -10
- package/angular/projects/lib/tsconfig.spec.json +0 -17
- package/dist/angular/esm2020/lib/base-widget.mjs +0 -30
- package/dist/angular/esm2020/lib/gridstack-item.component.mjs +0 -68
- package/dist/angular/esm2020/lib/gridstack.component.mjs +0 -280
- package/dist/angular/esm2020/lib/gridstack.module.mjs +0 -39
- package/dist/angular/esm2020/public-api.mjs +0 -8
- package/dist/angular/fesm2015/gridstack-angular.mjs +0 -420
- package/dist/angular/fesm2015/gridstack-angular.mjs.map +0 -1
- package/dist/angular/fesm2020/gridstack-angular.mjs.map +0 -1
- package/dist/angular/package.json +0 -31
- package/dist/angular/public-api.d.ts +0 -4
package/angular/README.md
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
# Angular wrapper
|
|
2
|
-
|
|
3
|
-
The Angular [wrapper component](projects/lib/src/lib/gridstack.component.ts) <gridstack> is a better way to use Gridstack, but alternative raw [ngFor](projects/demo/src/app/ngFor.ts) or [simple](projects/demo/src/app/simple.ts) demos are also given.
|
|
4
|
-
|
|
5
|
-
# Dynamic grid items
|
|
6
|
-
this is the recommended way if you are going to have multiple grids (alow drag&drop between) or drag from toolbar to create items, or drag to remove items, etc...
|
|
7
|
-
|
|
8
|
-
I.E. don't use Angular templating to create grid items as that is harder to sync when gridstack will also add/remove items.
|
|
9
|
-
|
|
10
|
-
HTML
|
|
11
|
-
```html
|
|
12
|
-
<gridstack [options]="gridOptions">
|
|
13
|
-
</gridstack>
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
CSS
|
|
17
|
-
```css
|
|
18
|
-
@import "gridstack/dist/gridstack.min.css";
|
|
19
|
-
|
|
20
|
-
.grid-stack {
|
|
21
|
-
background: #FAFAD2;
|
|
22
|
-
}
|
|
23
|
-
.grid-stack-item-content {
|
|
24
|
-
text-align: center;
|
|
25
|
-
background-color: #18bc9c;
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
in your module Code
|
|
30
|
-
```ts
|
|
31
|
-
import { GridstackModule } from 'gridstack/dist/angular';
|
|
32
|
-
|
|
33
|
-
@NgModule({
|
|
34
|
-
imports: [GridstackModule, ...]
|
|
35
|
-
...
|
|
36
|
-
bootstrap: [AppComponent]
|
|
37
|
-
})
|
|
38
|
-
export class AppModule { }
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Component Code
|
|
42
|
-
```ts
|
|
43
|
-
import { GridStackOptions } from 'gridstack';
|
|
44
|
-
|
|
45
|
-
// sample grid options + items to load...
|
|
46
|
-
public gridOptions: GridStackOptions = {
|
|
47
|
-
margin: 5,
|
|
48
|
-
children: [ // or call load()/addWidget() with same data
|
|
49
|
-
{x:0, y:0, minW:2, content:'Item 1'},
|
|
50
|
-
{x:1, y:0, content:'Item 2'},
|
|
51
|
-
{x:0, y:1, content:'Item 3'},
|
|
52
|
-
]
|
|
53
|
-
}
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
# More Complete example
|
|
57
|
-
In this example (build on previous one) will use your actual custom angular components inside each grid item (instead of dummy html content) and have per component saved settings as well (using BaseWidget).
|
|
58
|
-
|
|
59
|
-
HTML
|
|
60
|
-
```html
|
|
61
|
-
<gridstack [options]="gridOptions" (changeCB)="onChange($event)">
|
|
62
|
-
<div empty-content>message when grid is empty</div>
|
|
63
|
-
</gridstack>
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Code
|
|
67
|
-
```ts
|
|
68
|
-
import { Component } from '@angular/core';
|
|
69
|
-
import { GridStack, GridStackOptions } from 'gridstack';
|
|
70
|
-
import { GridstackComponent, gsCreateNgComponents, NgGridStackWidget, nodesCB, BaseWidget } from 'gridstack/dist/angular';
|
|
71
|
-
|
|
72
|
-
// some custom components
|
|
73
|
-
@Component({
|
|
74
|
-
selector: 'app-a',
|
|
75
|
-
template: 'Comp A {{text}}',
|
|
76
|
-
})
|
|
77
|
-
export class AComponent extends BaseWidget implements OnDestroy {
|
|
78
|
-
@Input() text: string = 'foo'; // test custom input data
|
|
79
|
-
public override serialize(): NgCompInputs | undefined { return this.text ? {text: this.text} : undefined; }
|
|
80
|
-
ngOnDestroy() {
|
|
81
|
-
console.log('Comp A destroyed'); // test to make sure cleanup happens
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
@Component({
|
|
86
|
-
selector: 'app-b',
|
|
87
|
-
template: 'Comp B',
|
|
88
|
-
})
|
|
89
|
-
export class BComponent extends BaseWidget {
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// .... in your module for example
|
|
93
|
-
constructor() {
|
|
94
|
-
// register all our dynamic components types created by the grid
|
|
95
|
-
GridstackComponent.addComponentToSelectorType([AComponent, BComponent]);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// now our content will use Components instead of dummy html content
|
|
99
|
-
public gridOptions: NgGridStackOptions = {
|
|
100
|
-
margin: 5,
|
|
101
|
-
minRow: 1, // make space for empty message
|
|
102
|
-
children: [ // or call load()/addWidget() with same data
|
|
103
|
-
{x:0, y:0, minW:2, selector:'app-a'},
|
|
104
|
-
{x:1, y:0, selector:'app-b'},
|
|
105
|
-
{x:0, y:1, content:'plain html content'},
|
|
106
|
-
]
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// called whenever items change size/position/etc.. see other events
|
|
110
|
-
public onChange(data: nodesCB) {
|
|
111
|
-
console.log('change ', data.nodes.length > 1 ? data.nodes : data.nodes[0]);
|
|
112
|
-
}
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
# ngFor with wrapper
|
|
116
|
-
For simple case where you control the children creation (gridstack doesn't do create or re-parenting)
|
|
117
|
-
|
|
118
|
-
HTML
|
|
119
|
-
```html
|
|
120
|
-
<gridstack [options]="gridOptions" (changeCB)="onChange($event)">
|
|
121
|
-
<gridstack-item *ngFor="let n of items; trackBy: identify" [options]="n">
|
|
122
|
-
Item {{n.id}}
|
|
123
|
-
</gridstack-item>
|
|
124
|
-
</gridstack>
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
Code
|
|
128
|
-
```javascript
|
|
129
|
-
import { GridStackOptions, GridStackWidget } from 'gridstack';
|
|
130
|
-
import { nodesCB } from 'gridstack/dist/angular';
|
|
131
|
-
|
|
132
|
-
/** sample grid options and items to load... */
|
|
133
|
-
public gridOptions: GridStackOptions = { margin: 5 }
|
|
134
|
-
public items: GridStackWidget[] = [
|
|
135
|
-
{x:0, y:0, minW:2, id:'1'}, // must have unique id used for trackBy
|
|
136
|
-
{x:1, y:0, id:'2'},
|
|
137
|
-
{x:0, y:1, id:'3'},
|
|
138
|
-
];
|
|
139
|
-
|
|
140
|
-
// called whenever items change size/position/etc..
|
|
141
|
-
public onChange(data: nodesCB) {
|
|
142
|
-
console.log('change ', data.nodes.length > 1 ? data.nodes : data.nodes[0]);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
// ngFor unique node id to have correct match between our items used and GS
|
|
146
|
-
public identify(index: number, w: GridStackWidget) {
|
|
147
|
-
return w.id; // or use index if no id is set and you only modify at the end...
|
|
148
|
-
}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
## Demo
|
|
152
|
-
You can see a fuller example at [app.component.ts](projects/demo/src/app/app.component.ts)
|
|
153
|
-
|
|
154
|
-
to build the demo, go to [angular/projects/demo](projects/demo/) and run `yarn` + `yarn start` and navigate to `http://localhost:4200/`
|
|
155
|
-
|
|
156
|
-
Code ship starting with v8.1.2+ in `dist/angular` for people to use directly and is an angular module! (source code under `dist/angular/src`)
|
|
157
|
-
## Caveats
|
|
158
|
-
|
|
159
|
-
- This wrapper needs:
|
|
160
|
-
- gridstack v8 to run as it needs the latest changes (use older version that matches GS versions)
|
|
161
|
-
- Angular 13+ for dynamic createComponent() API
|
|
162
|
-
|
|
163
|
-
## *ngFor Caveats
|
|
164
|
-
- This wrapper handles well ngFor loops, but if you're using a trackBy function (as I would recommend) and no element id change after an update,
|
|
165
|
-
you must manually update the `GridstackItemComponent.option` directly - see [modifyNgFor()](src/app/app.component.ts#L174) example.
|
|
166
|
-
- The original client list of items is not updated to match **content** changes made by gridstack (TBD later), but adding new item or removing (as shown in demo) will update those new items. Client could use change/added/removed events to sync that list if they wish to do so.
|
|
167
|
-
|
|
168
|
-
Would appreciate getting help doing the same for React and Vue (2 other popular frameworks)
|
|
169
|
-
|
|
170
|
-
-Alain
|
package/angular/README_build.md
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# GridstackLib
|
|
2
|
-
|
|
3
|
-
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.10.
|
|
4
|
-
|
|
5
|
-
## Development server
|
|
6
|
-
|
|
7
|
-
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
|
|
8
|
-
|
|
9
|
-
## Code scaffolding
|
|
10
|
-
|
|
11
|
-
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
|
|
12
|
-
|
|
13
|
-
## Build
|
|
14
|
-
|
|
15
|
-
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
16
|
-
|
|
17
|
-
## Running unit tests
|
|
18
|
-
|
|
19
|
-
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
20
|
-
|
|
21
|
-
## Running end-to-end tests
|
|
22
|
-
|
|
23
|
-
Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
|
|
24
|
-
|
|
25
|
-
## Further help
|
|
26
|
-
|
|
27
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
package/angular/angular.json
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
|
|
3
|
-
"version": 1,
|
|
4
|
-
"newProjectRoot": "projects",
|
|
5
|
-
"projects": {
|
|
6
|
-
"lib": {
|
|
7
|
-
"projectType": "library",
|
|
8
|
-
"root": "projects/lib",
|
|
9
|
-
"sourceRoot": "projects/lib/src",
|
|
10
|
-
"prefix": "lib",
|
|
11
|
-
"architect": {
|
|
12
|
-
"build": {
|
|
13
|
-
"builder": "@angular-devkit/build-angular:ng-packagr",
|
|
14
|
-
"options": {
|
|
15
|
-
"project": "projects/lib/ng-package.json"
|
|
16
|
-
},
|
|
17
|
-
"configurations": {
|
|
18
|
-
"production": {
|
|
19
|
-
"tsConfig": "projects/lib/tsconfig.lib.prod.json"
|
|
20
|
-
},
|
|
21
|
-
"development": {
|
|
22
|
-
"tsConfig": "projects/lib/tsconfig.lib.json"
|
|
23
|
-
}
|
|
24
|
-
},
|
|
25
|
-
"defaultConfiguration": "production"
|
|
26
|
-
},
|
|
27
|
-
"test": {
|
|
28
|
-
"builder": "@angular-devkit/build-angular:karma",
|
|
29
|
-
"options": {
|
|
30
|
-
"main": "projects/lib/src/test.ts",
|
|
31
|
-
"tsConfig": "projects/lib/tsconfig.spec.json",
|
|
32
|
-
"karmaConfig": "projects/lib/karma.conf.js"
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
"demo": {
|
|
38
|
-
"projectType": "application",
|
|
39
|
-
"schematics": {},
|
|
40
|
-
"root": "projects/demo",
|
|
41
|
-
"sourceRoot": "projects/demo/src",
|
|
42
|
-
"prefix": "app",
|
|
43
|
-
"architect": {
|
|
44
|
-
"build": {
|
|
45
|
-
"builder": "@angular-devkit/build-angular:browser",
|
|
46
|
-
"options": {
|
|
47
|
-
"outputPath": "dist/demo",
|
|
48
|
-
"index": "projects/demo/src/index.html",
|
|
49
|
-
"main": "projects/demo/src/main.ts",
|
|
50
|
-
"polyfills": "projects/demo/src/polyfills.ts",
|
|
51
|
-
"tsConfig": "projects/demo/tsconfig.app.json",
|
|
52
|
-
"assets": [
|
|
53
|
-
"projects/demo/src/favicon.ico",
|
|
54
|
-
"projects/demo/src/assets"
|
|
55
|
-
],
|
|
56
|
-
"styles": [
|
|
57
|
-
"projects/demo/src/styles.css"
|
|
58
|
-
],
|
|
59
|
-
"scripts": []
|
|
60
|
-
},
|
|
61
|
-
"configurations": {
|
|
62
|
-
"production": {
|
|
63
|
-
"budgets": [
|
|
64
|
-
{
|
|
65
|
-
"type": "initial",
|
|
66
|
-
"maximumWarning": "500kb",
|
|
67
|
-
"maximumError": "1mb"
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"type": "anyComponentStyle",
|
|
71
|
-
"maximumWarning": "2kb",
|
|
72
|
-
"maximumError": "4kb"
|
|
73
|
-
}
|
|
74
|
-
],
|
|
75
|
-
"fileReplacements": [
|
|
76
|
-
{
|
|
77
|
-
"replace": "projects/demo/src/environments/environment.ts",
|
|
78
|
-
"with": "projects/demo/src/environments/environment.prod.ts"
|
|
79
|
-
}
|
|
80
|
-
],
|
|
81
|
-
"outputHashing": "all"
|
|
82
|
-
},
|
|
83
|
-
"development": {
|
|
84
|
-
"buildOptimizer": false,
|
|
85
|
-
"optimization": false,
|
|
86
|
-
"vendorChunk": true,
|
|
87
|
-
"extractLicenses": false,
|
|
88
|
-
"sourceMap": true,
|
|
89
|
-
"namedChunks": true
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
"defaultConfiguration": "production"
|
|
93
|
-
},
|
|
94
|
-
"serve": {
|
|
95
|
-
"builder": "@angular-devkit/build-angular:dev-server",
|
|
96
|
-
"configurations": {
|
|
97
|
-
"production": {
|
|
98
|
-
"browserTarget": "demo:build:production"
|
|
99
|
-
},
|
|
100
|
-
"development": {
|
|
101
|
-
"browserTarget": "demo:build:development"
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
"defaultConfiguration": "development"
|
|
105
|
-
},
|
|
106
|
-
"extract-i18n": {
|
|
107
|
-
"builder": "@angular-devkit/build-angular:extract-i18n",
|
|
108
|
-
"options": {
|
|
109
|
-
"browserTarget": "demo:build"
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
"test": {
|
|
113
|
-
"builder": "@angular-devkit/build-angular:karma",
|
|
114
|
-
"options": {
|
|
115
|
-
"main": "projects/demo/src/test.ts",
|
|
116
|
-
"polyfills": "projects/demo/src/polyfills.ts",
|
|
117
|
-
"tsConfig": "projects/demo/tsconfig.spec.json",
|
|
118
|
-
"karmaConfig": "projects/demo/karma.conf.js",
|
|
119
|
-
"assets": [
|
|
120
|
-
"projects/demo/src/favicon.ico",
|
|
121
|
-
"projects/demo/src/assets"
|
|
122
|
-
],
|
|
123
|
-
"styles": [
|
|
124
|
-
"projects/demo/src/styles.css"
|
|
125
|
-
],
|
|
126
|
-
"scripts": []
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
"cli": {
|
|
133
|
-
"analytics": false
|
|
134
|
-
}
|
|
135
|
-
}
|
package/angular/package.json
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "gridstack-lib",
|
|
3
|
-
"version": "0.0.0",
|
|
4
|
-
"scripts": {
|
|
5
|
-
"ng": "ng",
|
|
6
|
-
"start": "ng serve",
|
|
7
|
-
"build": "ng build",
|
|
8
|
-
"watch": "ng build --watch --configuration development",
|
|
9
|
-
"test": "ng test"
|
|
10
|
-
},
|
|
11
|
-
"private": true,
|
|
12
|
-
"dependencies": {
|
|
13
|
-
"@angular/animations": "^14.2.0",
|
|
14
|
-
"@angular/common": "^14.2.0",
|
|
15
|
-
"@angular/compiler": "^14.2.0",
|
|
16
|
-
"@angular/core": "^14.2.0",
|
|
17
|
-
"@angular/forms": "^14.2.0",
|
|
18
|
-
"@angular/platform-browser": "^14.2.0",
|
|
19
|
-
"@angular/platform-browser-dynamic": "^14.2.0",
|
|
20
|
-
"@angular/router": "^14.2.0",
|
|
21
|
-
"gridstack": "^10.2.1",
|
|
22
|
-
"rxjs": "~7.5.0",
|
|
23
|
-
"tslib": "^2.3.0",
|
|
24
|
-
"zone.js": "~0.11.4"
|
|
25
|
-
},
|
|
26
|
-
"devDependencies": {
|
|
27
|
-
"@angular-devkit/build-angular": "^14.2.11",
|
|
28
|
-
"@angular/cli": "~14.2.10",
|
|
29
|
-
"@angular/compiler-cli": "^14.2.0",
|
|
30
|
-
"@types/jasmine": "~4.0.0",
|
|
31
|
-
"jasmine-core": "~4.3.0",
|
|
32
|
-
"karma": "~6.4.0",
|
|
33
|
-
"karma-chrome-launcher": "~3.1.0",
|
|
34
|
-
"karma-coverage": "~2.2.0",
|
|
35
|
-
"karma-jasmine": "~5.1.0",
|
|
36
|
-
"karma-jasmine-html-reporter": "~2.0.0",
|
|
37
|
-
"ng-packagr": "^14.2.0",
|
|
38
|
-
"typescript": "~4.7.2"
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# Gs
|
|
2
|
-
|
|
3
|
-
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Run `ng generate component component-name --project gs` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project gs`.
|
|
8
|
-
> Note: Don't forget to add `--project gs` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build gs` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build gs`, go to the dist folder `cd dist/gs` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test gs` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
|
2
|
-
{
|
|
3
|
-
"extends": "../../tsconfig.json",
|
|
4
|
-
"compilerOptions": {
|
|
5
|
-
"outDir": "../../out-tsc/lib",
|
|
6
|
-
"declaration": true,
|
|
7
|
-
"declarationMap": true,
|
|
8
|
-
"inlineSources": true,
|
|
9
|
-
"types": []
|
|
10
|
-
},
|
|
11
|
-
"exclude": [
|
|
12
|
-
"src/test.ts",
|
|
13
|
-
"**/*.spec.ts"
|
|
14
|
-
]
|
|
15
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/* To learn more about this file see: https://angular.io/config/tsconfig. */
|
|
2
|
-
{
|
|
3
|
-
"extends": "../../tsconfig.json",
|
|
4
|
-
"compilerOptions": {
|
|
5
|
-
"outDir": "../../out-tsc/spec",
|
|
6
|
-
"types": [
|
|
7
|
-
"jasmine"
|
|
8
|
-
]
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"src/test.ts"
|
|
12
|
-
],
|
|
13
|
-
"include": [
|
|
14
|
-
"**/*.spec.ts",
|
|
15
|
-
"**/*.d.ts"
|
|
16
|
-
]
|
|
17
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* gridstack-item.component.ts 10.3.0
|
|
3
|
-
* Copyright (c) 2022 Alain Dumesny - see GridStack root license
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Base interface that all widgets need to implement in order for GridstackItemComponent to correctly save/load/delete/..
|
|
7
|
-
*/
|
|
8
|
-
import { Injectable } from '@angular/core';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
export class BaseWidget {
|
|
11
|
-
/**
|
|
12
|
-
* REDEFINE to return an object representing the data needed to re-create yourself, other than `selector` already handled.
|
|
13
|
-
* This should map directly to the @Input() fields of this objects on create, so a simple apply can be used on read
|
|
14
|
-
*/
|
|
15
|
-
serialize() { return; }
|
|
16
|
-
/**
|
|
17
|
-
* REDEFINE this if your widget needs to read from saved data and transform it to create itself - you do this for
|
|
18
|
-
* things that are not mapped directly into @Input() fields for example.
|
|
19
|
-
*/
|
|
20
|
-
deserialize(w) {
|
|
21
|
-
if (w.input)
|
|
22
|
-
Object.assign(this, w.input);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
BaseWidget.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BaseWidget, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
26
|
-
BaseWidget.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BaseWidget });
|
|
27
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BaseWidget, decorators: [{
|
|
28
|
-
type: Injectable
|
|
29
|
-
}] });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS13aWRnZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hbmd1bGFyL3Byb2plY3RzL2xpYi9zcmMvbGliL2Jhc2Utd2lkZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVIOztHQUVHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJMUMsTUFBTSxPQUFnQixVQUFVO0lBQy9COzs7T0FHRztJQUNJLFNBQVMsS0FBZ0MsT0FBTyxDQUFDLENBQUM7SUFFekQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLENBQW9CO1FBQ3JDLElBQUksQ0FBQyxDQUFDLEtBQUs7WUFBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQzs7dUdBYm9CLFVBQVU7MkdBQVYsVUFBVTsyRkFBVixVQUFVO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIGdyaWRzdGFjay1pdGVtLmNvbXBvbmVudC50cyAxMC4zLjBcclxuICogQ29weXJpZ2h0IChjKSAyMDIyIEFsYWluIER1bWVzbnkgLSBzZWUgR3JpZFN0YWNrIHJvb3QgbGljZW5zZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBCYXNlIGludGVyZmFjZSB0aGF0IGFsbCB3aWRnZXRzIG5lZWQgdG8gaW1wbGVtZW50IGluIG9yZGVyIGZvciBHcmlkc3RhY2tJdGVtQ29tcG9uZW50IHRvIGNvcnJlY3RseSBzYXZlL2xvYWQvZGVsZXRlLy4uXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ0NvbXBJbnB1dHMsIE5nR3JpZFN0YWNrV2lkZ2V0IH0gZnJvbSAnLi9ncmlkc3RhY2suY29tcG9uZW50JztcclxuXHJcbiBASW5qZWN0YWJsZSgpXHJcbiBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVdpZGdldCB7XHJcbiAgLyoqXHJcbiAgICogUkVERUZJTkUgdG8gcmV0dXJuIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGRhdGEgbmVlZGVkIHRvIHJlLWNyZWF0ZSB5b3Vyc2VsZiwgb3RoZXIgdGhhbiBgc2VsZWN0b3JgIGFscmVhZHkgaGFuZGxlZC5cclxuICAgKiBUaGlzIHNob3VsZCBtYXAgZGlyZWN0bHkgdG8gdGhlIEBJbnB1dCgpIGZpZWxkcyBvZiB0aGlzIG9iamVjdHMgb24gY3JlYXRlLCBzbyBhIHNpbXBsZSBhcHBseSBjYW4gYmUgdXNlZCBvbiByZWFkXHJcbiAgICovXHJcbiAgcHVibGljIHNlcmlhbGl6ZSgpOiBOZ0NvbXBJbnB1dHMgfCB1bmRlZmluZWQgIHsgcmV0dXJuOyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJFREVGSU5FIHRoaXMgaWYgeW91ciB3aWRnZXQgbmVlZHMgdG8gcmVhZCBmcm9tIHNhdmVkIGRhdGEgYW5kIHRyYW5zZm9ybSBpdCB0byBjcmVhdGUgaXRzZWxmIC0geW91IGRvIHRoaXMgZm9yXHJcbiAgICogdGhpbmdzIHRoYXQgYXJlIG5vdCBtYXBwZWQgZGlyZWN0bHkgaW50byBASW5wdXQoKSBmaWVsZHMgZm9yIGV4YW1wbGUuXHJcbiAgICovXHJcbiAgcHVibGljIGRlc2VyaWFsaXplKHc6IE5nR3JpZFN0YWNrV2lkZ2V0KSAge1xyXG4gICAgaWYgKHcuaW5wdXQpICBPYmplY3QuYXNzaWduKHRoaXMsIHcuaW5wdXQpO1xyXG4gIH1cclxuIH1cclxuIl19
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* gridstack-item.component.ts 10.3.0
|
|
3
|
-
* Copyright (c) 2022 Alain Dumesny - see GridStack root license
|
|
4
|
-
*/
|
|
5
|
-
import { Component, Input, ViewChild, ViewContainerRef } from '@angular/core';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
/**
|
|
8
|
-
* HTML Component Wrapper for gridstack items, in combination with GridstackComponent for parent grid
|
|
9
|
-
*/
|
|
10
|
-
export class GridstackItemComponent {
|
|
11
|
-
constructor(elementRef) {
|
|
12
|
-
this.elementRef = elementRef;
|
|
13
|
-
this.el._gridItemComp = this;
|
|
14
|
-
}
|
|
15
|
-
/** list of options for creating/updating this item */
|
|
16
|
-
set options(val) {
|
|
17
|
-
if (this.el.gridstackNode?.grid) {
|
|
18
|
-
// already built, do an update...
|
|
19
|
-
this.el.gridstackNode.grid.update(this.el, val);
|
|
20
|
-
}
|
|
21
|
-
else {
|
|
22
|
-
// store our custom element in options so we can update it and not re-create a generic div!
|
|
23
|
-
this._options = { ...val, el: this.el };
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
/** return the latest grid options (from GS once built, otherwise initial values) */
|
|
27
|
-
get options() {
|
|
28
|
-
return this.el.gridstackNode || this._options || { el: this.el };
|
|
29
|
-
}
|
|
30
|
-
/** return the native element that contains grid specific fields as well */
|
|
31
|
-
get el() { return this.elementRef.nativeElement; }
|
|
32
|
-
/** clears the initial options now that we've built */
|
|
33
|
-
clearOptions() {
|
|
34
|
-
delete this._options;
|
|
35
|
-
}
|
|
36
|
-
ngOnDestroy() {
|
|
37
|
-
delete this.ref;
|
|
38
|
-
delete this.el._gridItemComp;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
GridstackItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GridstackItemComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
42
|
-
GridstackItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: GridstackItemComponent, selector: "gridstack-item", inputs: { options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: `
|
|
43
|
-
<div class="grid-stack-item-content">
|
|
44
|
-
<!-- where dynamic items go based on component types, or sub-grids, etc...) -->
|
|
45
|
-
<ng-template #container></ng-template>
|
|
46
|
-
<!-- any static (defined in dom) content goes here -->
|
|
47
|
-
<ng-content></ng-content>
|
|
48
|
-
<!-- fallback HTML content from GridStackWidget content field if used instead -->
|
|
49
|
-
{{options.content}}
|
|
50
|
-
</div>`, isInline: true, styles: [":host{display:block}\n"] });
|
|
51
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: GridstackItemComponent, decorators: [{
|
|
52
|
-
type: Component,
|
|
53
|
-
args: [{ selector: 'gridstack-item', template: `
|
|
54
|
-
<div class="grid-stack-item-content">
|
|
55
|
-
<!-- where dynamic items go based on component types, or sub-grids, etc...) -->
|
|
56
|
-
<ng-template #container></ng-template>
|
|
57
|
-
<!-- any static (defined in dom) content goes here -->
|
|
58
|
-
<ng-content></ng-content>
|
|
59
|
-
<!-- fallback HTML content from GridStackWidget content field if used instead -->
|
|
60
|
-
{{options.content}}
|
|
61
|
-
</div>`, styles: [":host{display:block}\n"] }]
|
|
62
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { container: [{
|
|
63
|
-
type: ViewChild,
|
|
64
|
-
args: ['container', { read: ViewContainerRef, static: true }]
|
|
65
|
-
}], options: [{
|
|
66
|
-
type: Input
|
|
67
|
-
}] } });
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0YWNrLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYW5ndWxhci9wcm9qZWN0cy9saWIvc3JjL2xpYi9ncmlkc3RhY2staXRlbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUEyQixNQUFNLGVBQWUsQ0FBQzs7QUFTbkg7O0dBRUc7QUFpQkgsTUFBTSxPQUFPLHNCQUFzQjtJQW9DakMsWUFBNkIsVUFBMkM7UUFBM0MsZUFBVSxHQUFWLFVBQVUsQ0FBaUM7UUFDdEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUEzQkQsc0RBQXNEO0lBQ3RELElBQW9CLE9BQU8sQ0FBQyxHQUFrQjtRQUM1QyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRTtZQUMvQixpQ0FBaUM7WUFDakMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ2pEO2FBQU07WUFDTCwyRkFBMkY7WUFDM0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBQ0Qsb0ZBQW9GO0lBQ3BGLElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksRUFBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBQyxDQUFDO0lBQ2pFLENBQUM7SUFJRCwyRUFBMkU7SUFDM0UsSUFBVyxFQUFFLEtBQThCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBRWxGLHNEQUFzRDtJQUMvQyxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBTU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDaEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztJQUMvQixDQUFDOzttSEEzQ1Usc0JBQXNCO3VHQUF0QixzQkFBc0IseUtBR0QsZ0JBQWdCLDJDQWpCdEM7Ozs7Ozs7O1dBUUQ7MkZBTUUsc0JBQXNCO2tCQWhCbEMsU0FBUzsrQkFDRSxnQkFBZ0IsWUFDaEI7Ozs7Ozs7O1dBUUQ7aUdBUytELFNBQVM7c0JBQWhGLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBUzNDLE9BQU87c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGdyaWRzdGFjay1pdGVtLmNvbXBvbmVudC50cyAxMC4zLjBcbiAqIENvcHlyaWdodCAoYykgMjAyMiBBbGFpbiBEdW1lc255IC0gc2VlIEdyaWRTdGFjayByb290IGxpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIE9uRGVzdHJveSwgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkSXRlbUhUTUxFbGVtZW50LCBHcmlkU3RhY2tOb2RlIH0gZnJvbSAnZ3JpZHN0YWNrJztcbmltcG9ydCB7IEJhc2VXaWRnZXQgfSBmcm9tICcuL2Jhc2Utd2lkZ2V0JztcblxuLyoqIHN0b3JlIGVsZW1lbnQgdG8gTmcgQ2xhc3MgcG9pbnRlciBiYWNrICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRJdGVtQ29tcEhUTUxFbGVtZW50IGV4dGVuZHMgR3JpZEl0ZW1IVE1MRWxlbWVudCB7XG4gIF9ncmlkSXRlbUNvbXA/OiBHcmlkc3RhY2tJdGVtQ29tcG9uZW50O1xufVxuXG4vKipcbiAqIEhUTUwgQ29tcG9uZW50IFdyYXBwZXIgZm9yIGdyaWRzdGFjayBpdGVtcywgaW4gY29tYmluYXRpb24gd2l0aCBHcmlkc3RhY2tDb21wb25lbnQgZm9yIHBhcmVudCBncmlkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dyaWRzdGFjay1pdGVtJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1zdGFjay1pdGVtLWNvbnRlbnRcIj5cbiAgICAgIDwhLS0gd2hlcmUgZHluYW1pYyBpdGVtcyBnbyBiYXNlZCBvbiBjb21wb25lbnQgdHlwZXMsIG9yIHN1Yi1ncmlkcywgZXRjLi4uKSAtLT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGFpbmVyPjwvbmctdGVtcGxhdGU+XG4gICAgICA8IS0tIGFueSBzdGF0aWMgKGRlZmluZWQgaW4gZG9tKSBjb250ZW50IGdvZXMgaGVyZSAtLT5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwhLS0gZmFsbGJhY2sgSFRNTCBjb250ZW50IGZyb20gR3JpZFN0YWNrV2lkZ2V0IGNvbnRlbnQgZmllbGQgaWYgdXNlZCBpbnN0ZWFkIC0tPlxuICAgICAge3tvcHRpb25zLmNvbnRlbnR9fVxuICAgIDwvZGl2PmAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9XG4gIGBdLFxuICAvLyBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCwgLy8gSUZGIHlvdSB3YW50IHRvIG9wdGltaXplIGFuZCBjb250cm9sIHdoZW4gQ2hhbmdlRGV0ZWN0aW9uIG5lZWRzIHRvIGhhcHBlbi4uLlxufSlcbmV4cG9ydCBjbGFzcyBHcmlkc3RhY2tJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAvKiogY29udGFpbmVyIHRvIGFwcGVuZCBpdGVtcyBkeW5hbWljYWxseSAqL1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogdHJ1ZX0pIHB1YmxpYyBjb250YWluZXI/OiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIC8qKiBDb21wb25lbnRSZWYgb2Ygb3Vyc2VsZiAtIHVzZWQgYnkgZHluYW1pYyBvYmplY3QgdG8gY29ycmVjdGx5IGdldCByZW1vdmVkICovXG4gIHB1YmxpYyByZWY6IENvbXBvbmVudFJlZjxHcmlkc3RhY2tJdGVtQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcblxuICAvKiogY2hpbGQgY29tcG9uZW50IHNvIHdlIGNhbiBzYXZlL3Jlc3RvcmUgYWRkaXRpb25hbCBkYXRhIHRvIGJlIHNhdmVkIGFsb25nICovXG4gIHB1YmxpYyBjaGlsZFdpZGdldDogQmFzZVdpZGdldCB8IHVuZGVmaW5lZDtcblxuICAvKiogbGlzdCBvZiBvcHRpb25zIGZvciBjcmVhdGluZy91cGRhdGluZyB0aGlzIGl0ZW0gKi9cbiAgQElucHV0KCkgcHVibGljIHNldCBvcHRpb25zKHZhbDogR3JpZFN0YWNrTm9kZSkge1xuICAgIGlmICh0aGlzLmVsLmdyaWRzdGFja05vZGU/LmdyaWQpIHtcbiAgICAgIC8vIGFscmVhZHkgYnVpbHQsIGRvIGFuIHVwZGF0ZS4uLlxuICAgICAgdGhpcy5lbC5ncmlkc3RhY2tOb2RlLmdyaWQudXBkYXRlKHRoaXMuZWwsIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0b3JlIG91ciBjdXN0b20gZWxlbWVudCBpbiBvcHRpb25zIHNvIHdlIGNhbiB1cGRhdGUgaXQgYW5kIG5vdCByZS1jcmVhdGUgYSBnZW5lcmljIGRpdiFcbiAgICAgIHRoaXMuX29wdGlvbnMgPSB7Li4udmFsLCBlbDogdGhpcy5lbH07XG4gICAgfVxuICB9XG4gIC8qKiByZXR1cm4gdGhlIGxhdGVzdCBncmlkIG9wdGlvbnMgKGZyb20gR1Mgb25jZSBidWlsdCwgb3RoZXJ3aXNlIGluaXRpYWwgdmFsdWVzKSAqL1xuICBwdWJsaWMgZ2V0IG9wdGlvbnMoKTogR3JpZFN0YWNrTm9kZSB7XG4gICAgcmV0dXJuIHRoaXMuZWwuZ3JpZHN0YWNrTm9kZSB8fCB0aGlzLl9vcHRpb25zIHx8IHtlbDogdGhpcy5lbH07XG4gIH1cblxuICBwcml2YXRlIF9vcHRpb25zPzogR3JpZFN0YWNrTm9kZTtcblxuICAvKiogcmV0dXJuIHRoZSBuYXRpdmUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIGdyaWQgc3BlY2lmaWMgZmllbGRzIGFzIHdlbGwgKi9cbiAgcHVibGljIGdldCBlbCgpOiBHcmlkSXRlbUNvbXBIVE1MRWxlbWVudCB7IHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDsgfVxuXG4gIC8qKiBjbGVhcnMgdGhlIGluaXRpYWwgb3B0aW9ucyBub3cgdGhhdCB3ZSd2ZSBidWlsdCAqL1xuICBwdWJsaWMgY2xlYXJPcHRpb25zKCkge1xuICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEdyaWRJdGVtSFRNTEVsZW1lbnQ+KSB7XG4gICAgdGhpcy5lbC5fZ3JpZEl0ZW1Db21wID0gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBkZWxldGUgdGhpcy5yZWY7XG4gICAgZGVsZXRlIHRoaXMuZWwuX2dyaWRJdGVtQ29tcDtcbiAgfVxufVxuIl19
|