gridstack 12.4.0 → 12.4.2

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 (96) hide show
  1. package/dist/angular/esm2020/lib/base-widget.mjs +2 -2
  2. package/dist/angular/esm2020/lib/gridstack-item.component.mjs +2 -2
  3. package/dist/angular/esm2020/lib/gridstack.component.mjs +2 -2
  4. package/dist/angular/esm2020/lib/gridstack.module.mjs +2 -2
  5. package/dist/angular/esm2020/lib/types.mjs +2 -2
  6. package/dist/angular/fesm2015/gridstack-angular.mjs +4 -4
  7. package/dist/angular/fesm2015/gridstack-angular.mjs.map +1 -1
  8. package/dist/angular/fesm2020/gridstack-angular.mjs +5 -5
  9. package/dist/angular/fesm2020/gridstack-angular.mjs.map +1 -1
  10. package/dist/angular/lib/gridstack-item.component.d.ts +1 -1
  11. package/dist/angular/lib/gridstack.component.d.ts +1 -1
  12. package/dist/angular/lib/types.d.ts +1 -1
  13. package/dist/angular/package.json +1 -1
  14. package/dist/angular/src/base-widget.ts +1 -1
  15. package/dist/angular/src/gridstack-item.component.ts +1 -1
  16. package/dist/angular/src/gridstack.component.ts +1 -1
  17. package/dist/angular/src/gridstack.module.ts +1 -1
  18. package/dist/angular/src/types.ts +1 -1
  19. package/dist/{src/dd-base-impl.d.ts → dd-base-impl.d.ts} +1 -1
  20. package/dist/{src/dd-base-impl.js → dd-base-impl.js} +1 -1
  21. package/dist/dd-base-impl.js.map +1 -0
  22. package/dist/{src/dd-draggable.d.ts → dd-draggable.d.ts} +1 -1
  23. package/dist/{src/dd-draggable.js → dd-draggable.js} +5 -2
  24. package/dist/dd-draggable.js.map +1 -0
  25. package/dist/{src/dd-droppable.d.ts → dd-droppable.d.ts} +1 -1
  26. package/dist/{src/dd-droppable.js → dd-droppable.js} +4 -6
  27. package/dist/dd-droppable.js.map +1 -0
  28. package/dist/{src/dd-element.d.ts → dd-element.d.ts} +1 -1
  29. package/dist/{src/dd-element.js → dd-element.js} +1 -1
  30. package/dist/dd-element.js.map +1 -0
  31. package/dist/{src/dd-gridstack.d.ts → dd-gridstack.d.ts} +1 -1
  32. package/dist/{src/dd-gridstack.js → dd-gridstack.js} +1 -1
  33. package/dist/dd-gridstack.js.map +1 -0
  34. package/dist/{src/dd-manager.d.ts → dd-manager.d.ts} +1 -1
  35. package/dist/{src/dd-manager.js → dd-manager.js} +1 -1
  36. package/dist/dd-manager.js.map +1 -0
  37. package/dist/{src/dd-resizable-handle.d.ts → dd-resizable-handle.d.ts} +1 -1
  38. package/dist/{src/dd-resizable-handle.js → dd-resizable-handle.js} +1 -1
  39. package/dist/dd-resizable-handle.js.map +1 -0
  40. package/dist/{src/dd-resizable.d.ts → dd-resizable.d.ts} +1 -1
  41. package/dist/{src/dd-resizable.js → dd-resizable.js} +1 -1
  42. package/dist/dd-resizable.js.map +1 -0
  43. package/dist/{src/dd-touch.d.ts → dd-touch.d.ts} +6 -1
  44. package/dist/{src/dd-touch.js → dd-touch.js} +2 -2
  45. package/dist/dd-touch.js.map +1 -0
  46. package/dist/gridstack-all.js +1 -1
  47. package/dist/gridstack-all.js.LICENSE.txt +1 -1
  48. package/dist/gridstack-all.js.map +1 -1
  49. package/dist/{src/gridstack-engine.d.ts → gridstack-engine.d.ts} +1 -1
  50. package/dist/{src/gridstack-engine.js → gridstack-engine.js} +1 -1
  51. package/dist/gridstack-engine.js.map +1 -0
  52. package/dist/gridstack.css +1 -1
  53. package/dist/{src/gridstack.d.ts → gridstack.d.ts} +1 -1
  54. package/dist/{src/gridstack.js → gridstack.js} +2 -2
  55. package/dist/gridstack.js.map +1 -0
  56. package/dist/{src/types.d.ts → types.d.ts} +1 -1
  57. package/dist/{src/types.js → types.js} +1 -1
  58. package/dist/types.js.map +1 -0
  59. package/dist/utils.d.ts +283 -0
  60. package/dist/{src/utils.js → utils.js} +39 -39
  61. package/dist/utils.js.map +1 -0
  62. package/doc/API.md +2 -2
  63. package/package.json +2 -2
  64. package/dist/angular/projects/lib/src/index.d.ts +0 -5
  65. package/dist/angular/projects/lib/src/index.js +0 -9
  66. package/dist/angular/projects/lib/src/index.js.map +0 -1
  67. package/dist/angular/projects/lib/src/lib/base-widget.d.ts +0 -56
  68. package/dist/angular/projects/lib/src/lib/base-widget.js +0 -94
  69. package/dist/angular/projects/lib/src/lib/base-widget.js.map +0 -1
  70. package/dist/angular/projects/lib/src/lib/gridstack-item.component.d.ts +0 -76
  71. package/dist/angular/projects/lib/src/lib/gridstack-item.component.js +0 -112
  72. package/dist/angular/projects/lib/src/lib/gridstack-item.component.js.map +0 -1
  73. package/dist/angular/projects/lib/src/lib/gridstack.component.d.ts +0 -233
  74. package/dist/angular/projects/lib/src/lib/gridstack.component.js +0 -457
  75. package/dist/angular/projects/lib/src/lib/gridstack.component.js.map +0 -1
  76. package/dist/angular/projects/lib/src/lib/gridstack.module.d.ts +0 -29
  77. package/dist/angular/projects/lib/src/lib/gridstack.module.js +0 -52
  78. package/dist/angular/projects/lib/src/lib/gridstack.module.js.map +0 -1
  79. package/dist/angular/projects/lib/src/lib/types.d.ts +0 -51
  80. package/dist/angular/projects/lib/src/lib/types.js +0 -6
  81. package/dist/angular/projects/lib/src/lib/types.js.map +0 -1
  82. package/dist/src/dd-base-impl.js.map +0 -1
  83. package/dist/src/dd-draggable.js.map +0 -1
  84. package/dist/src/dd-droppable.js.map +0 -1
  85. package/dist/src/dd-element.js.map +0 -1
  86. package/dist/src/dd-gridstack.js.map +0 -1
  87. package/dist/src/dd-manager.js.map +0 -1
  88. package/dist/src/dd-resizable-handle.js.map +0 -1
  89. package/dist/src/dd-resizable.js.map +0 -1
  90. package/dist/src/dd-touch.js.map +0 -1
  91. package/dist/src/gridstack-engine.js.map +0 -1
  92. package/dist/src/gridstack.js.map +0 -1
  93. package/dist/src/gridstack.scss +0 -157
  94. package/dist/src/types.js.map +0 -1
  95. package/dist/src/utils.d.ts +0 -14
  96. package/dist/src/utils.js.map +0 -1
@@ -1,457 +0,0 @@
1
- /**
2
- * gridstack.component.ts 12.4.0
3
- * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license
4
- */
5
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
6
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
9
- return c > 3 && r && Object.defineProperty(target, key, r), r;
10
- };
11
- var __metadata = (this && this.__metadata) || function (k, v) {
12
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
13
- };
14
- var GridstackComponent_1;
15
- import { Component, ContentChildren, ElementRef, EventEmitter, Input, Output, QueryList, ViewChild, ViewContainerRef, reflectComponentType } from '@angular/core';
16
- import { NgIf } from '@angular/common';
17
- import { GridStack } from 'gridstack';
18
- import { GridstackItemComponent } from './gridstack-item.component';
19
- /**
20
- * Angular component wrapper for GridStack.
21
- *
22
- * This component provides Angular integration for GridStack grids, handling:
23
- * - Grid initialization and lifecycle
24
- * - Dynamic component creation and management
25
- * - Event binding and emission
26
- * - Integration with Angular change detection
27
- *
28
- * Use in combination with GridstackItemComponent for individual grid items.
29
- *
30
- * @example
31
- * ```html
32
- * <gridstack [options]="gridOptions" (change)="onGridChange($event)">
33
- * <div empty-content>Drag widgets here</div>
34
- * </gridstack>
35
- * ```
36
- */
37
- let GridstackComponent = GridstackComponent_1 = class GridstackComponent {
38
- /**
39
- * Grid configuration options.
40
- * Can be set before grid initialization or updated after grid is created.
41
- *
42
- * @example
43
- * ```typescript
44
- * gridOptions: GridStackOptions = {
45
- * column: 12,
46
- * cellHeight: 'auto',
47
- * animate: true
48
- * };
49
- * ```
50
- */
51
- set options(o) {
52
- if (this._grid) {
53
- this._grid.updateOptions(o);
54
- }
55
- else {
56
- this._options = o;
57
- }
58
- }
59
- /** Get the current running grid options */
60
- get options() { return this._grid?.opts || this._options || {}; }
61
- /**
62
- * Get the native DOM element that contains grid-specific fields.
63
- * This element has GridStack properties attached to it.
64
- */
65
- get el() { return this.elementRef.nativeElement; }
66
- /**
67
- * Get the underlying GridStack instance.
68
- * Use this to access GridStack API methods directly.
69
- *
70
- * @example
71
- * ```typescript
72
- * this.gridComponent.grid.addWidget({x: 0, y: 0, w: 2, h: 1});
73
- * ```
74
- */
75
- get grid() { return this._grid; }
76
- /**
77
- * Register a list of Angular components for dynamic creation.
78
- *
79
- * @param typeList Array of component types to register
80
- *
81
- * @example
82
- * ```typescript
83
- * GridstackComponent.addComponentToSelectorType([
84
- * MyWidgetComponent,
85
- * AnotherWidgetComponent
86
- * ]);
87
- * ```
88
- */
89
- static addComponentToSelectorType(typeList) {
90
- typeList.forEach(type => GridstackComponent_1.selectorToType[GridstackComponent_1.getSelector(type)] = type);
91
- }
92
- /**
93
- * Extract the selector string from an Angular component type.
94
- *
95
- * @param type The component type to get selector from
96
- * @returns The component's selector string
97
- */
98
- static getSelector(type) {
99
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
100
- return reflectComponentType(type).selector;
101
- }
102
- constructor(elementRef) {
103
- this.elementRef = elementRef;
104
- /**
105
- * GridStack event emitters for Angular integration.
106
- *
107
- * These provide Angular-style event handling for GridStack events.
108
- * Alternatively, use `this.grid.on('event1 event2', callback)` for multiple events.
109
- *
110
- * Note: 'CB' suffix prevents conflicts with native DOM events.
111
- *
112
- * @example
113
- * ```html
114
- * <gridstack (changeCB)="onGridChange($event)" (droppedCB)="onItemDropped($event)">
115
- * </gridstack>
116
- * ```
117
- */
118
- /** Emitted when widgets are added to the grid */
119
- this.addedCB = new EventEmitter();
120
- /** Emitted when grid layout changes */
121
- this.changeCB = new EventEmitter();
122
- /** Emitted when grid is disabled */
123
- this.disableCB = new EventEmitter();
124
- /** Emitted during widget drag operations */
125
- this.dragCB = new EventEmitter();
126
- /** Emitted when widget drag starts */
127
- this.dragStartCB = new EventEmitter();
128
- /** Emitted when widget drag stops */
129
- this.dragStopCB = new EventEmitter();
130
- /** Emitted when widget is dropped */
131
- this.droppedCB = new EventEmitter();
132
- /** Emitted when grid is enabled */
133
- this.enableCB = new EventEmitter();
134
- /** Emitted when widgets are removed from the grid */
135
- this.removedCB = new EventEmitter();
136
- /** Emitted during widget resize operations */
137
- this.resizeCB = new EventEmitter();
138
- /** Emitted when widget resize starts */
139
- this.resizeStartCB = new EventEmitter();
140
- /** Emitted when widget resize stops */
141
- this.resizeStopCB = new EventEmitter();
142
- // set globally our method to create the right widget type
143
- if (!GridStack.addRemoveCB) {
144
- GridStack.addRemoveCB = gsCreateNgComponents;
145
- }
146
- if (!GridStack.saveCB) {
147
- GridStack.saveCB = gsSaveAdditionalNgInfo;
148
- }
149
- if (!GridStack.updateCB) {
150
- GridStack.updateCB = gsUpdateNgComponents;
151
- }
152
- this.el._gridComp = this;
153
- }
154
- ngOnInit() {
155
- // init ourself before any template children are created since we track them below anyway - no need to double create+update widgets
156
- this.loaded = !!this.options?.children?.length;
157
- this._grid = GridStack.init(this._options, this.el);
158
- delete this._options; // GS has it now
159
- this.checkEmpty();
160
- }
161
- /** wait until after all DOM is ready to init gridstack children (after angular ngFor and sub-components run first) */
162
- ngAfterContentInit() {
163
- // track whenever the children list changes and update the layout...
164
- this._sub = this.gridstackItems?.changes.subscribe(() => this.updateAll());
165
- // ...and do this once at least unless we loaded children already
166
- if (!this.loaded)
167
- this.updateAll();
168
- this.hookEvents(this.grid);
169
- }
170
- ngOnDestroy() {
171
- this.unhookEvents(this._grid);
172
- this._sub?.unsubscribe();
173
- this._grid?.destroy();
174
- delete this._grid;
175
- delete this.el._gridComp;
176
- delete this.container;
177
- delete this.ref;
178
- }
179
- /**
180
- * called when the TEMPLATE (not recommended) list of items changes - get a list of nodes and
181
- * update the layout accordingly (which will take care of adding/removing items changed by Angular)
182
- */
183
- updateAll() {
184
- if (!this.grid)
185
- return;
186
- const layout = [];
187
- this.gridstackItems?.forEach(item => {
188
- layout.push(item.options);
189
- item.clearOptions();
190
- });
191
- this.grid.load(layout); // efficient that does diffs only
192
- }
193
- /** check if the grid is empty, if so show alternative content */
194
- checkEmpty() {
195
- if (!this.grid)
196
- return;
197
- this.isEmpty = !this.grid.engine.nodes.length;
198
- }
199
- /** get all known events as easy to use Outputs for convenience */
200
- hookEvents(grid) {
201
- if (!grid)
202
- return;
203
- // nested grids don't have events in v12.1+ so skip
204
- if (grid.parentGridNode)
205
- return;
206
- grid
207
- .on('added', (event, nodes) => {
208
- const gridComp = (nodes[0].grid?.el)._gridComp || this;
209
- gridComp.checkEmpty();
210
- this.addedCB.emit({ event, nodes });
211
- })
212
- .on('change', (event, nodes) => this.changeCB.emit({ event, nodes }))
213
- .on('disable', (event) => this.disableCB.emit({ event }))
214
- .on('drag', (event, el) => this.dragCB.emit({ event, el }))
215
- .on('dragstart', (event, el) => this.dragStartCB.emit({ event, el }))
216
- .on('dragstop', (event, el) => this.dragStopCB.emit({ event, el }))
217
- .on('dropped', (event, previousNode, newNode) => this.droppedCB.emit({ event, previousNode, newNode }))
218
- .on('enable', (event) => this.enableCB.emit({ event }))
219
- .on('removed', (event, nodes) => {
220
- const gridComp = (nodes[0].grid?.el)._gridComp || this;
221
- gridComp.checkEmpty();
222
- this.removedCB.emit({ event, nodes });
223
- })
224
- .on('resize', (event, el) => this.resizeCB.emit({ event, el }))
225
- .on('resizestart', (event, el) => this.resizeStartCB.emit({ event, el }))
226
- .on('resizestop', (event, el) => this.resizeStopCB.emit({ event, el }));
227
- }
228
- unhookEvents(grid) {
229
- if (!grid)
230
- return;
231
- // nested grids don't have events in v12.1+ so skip
232
- if (grid.parentGridNode)
233
- return;
234
- grid.off('added change disable drag dragstart dragstop dropped enable removed resize resizestart resizestop');
235
- }
236
- };
237
- /**
238
- * Mapping of component selectors to their types for dynamic creation.
239
- *
240
- * This enables dynamic component instantiation from string selectors.
241
- * Angular doesn't provide public access to this mapping, so we maintain our own.
242
- *
243
- * @example
244
- * ```typescript
245
- * GridstackComponent.addComponentToSelectorType([MyWidgetComponent]);
246
- * ```
247
- */
248
- GridstackComponent.selectorToType = {};
249
- __decorate([
250
- ContentChildren(GridstackItemComponent),
251
- __metadata("design:type", QueryList)
252
- ], GridstackComponent.prototype, "gridstackItems", void 0);
253
- __decorate([
254
- ViewChild('container', { read: ViewContainerRef, static: true }),
255
- __metadata("design:type", ViewContainerRef)
256
- ], GridstackComponent.prototype, "container", void 0);
257
- __decorate([
258
- Input(),
259
- __metadata("design:type", Object),
260
- __metadata("design:paramtypes", [Object])
261
- ], GridstackComponent.prototype, "options", null);
262
- __decorate([
263
- Input(),
264
- __metadata("design:type", Boolean)
265
- ], GridstackComponent.prototype, "isEmpty", void 0);
266
- __decorate([
267
- Output(),
268
- __metadata("design:type", Object)
269
- ], GridstackComponent.prototype, "addedCB", void 0);
270
- __decorate([
271
- Output(),
272
- __metadata("design:type", Object)
273
- ], GridstackComponent.prototype, "changeCB", void 0);
274
- __decorate([
275
- Output(),
276
- __metadata("design:type", Object)
277
- ], GridstackComponent.prototype, "disableCB", void 0);
278
- __decorate([
279
- Output(),
280
- __metadata("design:type", Object)
281
- ], GridstackComponent.prototype, "dragCB", void 0);
282
- __decorate([
283
- Output(),
284
- __metadata("design:type", Object)
285
- ], GridstackComponent.prototype, "dragStartCB", void 0);
286
- __decorate([
287
- Output(),
288
- __metadata("design:type", Object)
289
- ], GridstackComponent.prototype, "dragStopCB", void 0);
290
- __decorate([
291
- Output(),
292
- __metadata("design:type", Object)
293
- ], GridstackComponent.prototype, "droppedCB", void 0);
294
- __decorate([
295
- Output(),
296
- __metadata("design:type", Object)
297
- ], GridstackComponent.prototype, "enableCB", void 0);
298
- __decorate([
299
- Output(),
300
- __metadata("design:type", Object)
301
- ], GridstackComponent.prototype, "removedCB", void 0);
302
- __decorate([
303
- Output(),
304
- __metadata("design:type", Object)
305
- ], GridstackComponent.prototype, "resizeCB", void 0);
306
- __decorate([
307
- Output(),
308
- __metadata("design:type", Object)
309
- ], GridstackComponent.prototype, "resizeStartCB", void 0);
310
- __decorate([
311
- Output(),
312
- __metadata("design:type", Object)
313
- ], GridstackComponent.prototype, "resizeStopCB", void 0);
314
- GridstackComponent = GridstackComponent_1 = __decorate([
315
- Component({
316
- selector: 'gridstack',
317
- template: `
318
- <!-- content to show when when grid is empty, like instructions on how to add widgets -->
319
- <ng-content select="[empty-content]" *ngIf="isEmpty"></ng-content>
320
- <!-- where dynamic items go -->
321
- <ng-template #container></ng-template>
322
- <!-- where template items go -->
323
- <ng-content></ng-content>
324
- `,
325
- styles: [`
326
- :host { display: block; }
327
- `],
328
- standalone: true,
329
- imports: [NgIf]
330
- // changeDetection: ChangeDetectionStrategy.OnPush, // IFF you want to optimize and control when ChangeDetection needs to happen...
331
- }),
332
- __metadata("design:paramtypes", [ElementRef])
333
- ], GridstackComponent);
334
- export { GridstackComponent };
335
- /**
336
- * can be used when a new item needs to be created, which we do as a Angular component, or deleted (skip)
337
- **/
338
- export function gsCreateNgComponents(host, n, add, isGrid) {
339
- if (add) {
340
- //
341
- // create the component dynamically - see https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html
342
- //
343
- if (!host)
344
- return;
345
- if (isGrid) {
346
- // TODO: figure out how to create ng component inside regular Div. need to access app injectors...
347
- // if (!container) {
348
- // const hostElement: Element = host;
349
- // const environmentInjector: EnvironmentInjector;
350
- // grid = createComponent(GridstackComponent, {environmentInjector, hostElement})?.instance;
351
- // }
352
- const gridItemComp = host.parentElement?._gridItemComp;
353
- if (!gridItemComp)
354
- return;
355
- // check if gridItem has a child component with 'container' exposed to create under..
356
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
357
- const container = gridItemComp.childWidget?.container || gridItemComp.container;
358
- const gridRef = container?.createComponent(GridstackComponent);
359
- const grid = gridRef?.instance;
360
- if (!grid)
361
- return;
362
- grid.ref = gridRef;
363
- grid.options = n;
364
- return grid.el;
365
- }
366
- else {
367
- const gridComp = host._gridComp;
368
- const gridItemRef = gridComp?.container?.createComponent(GridstackItemComponent);
369
- const gridItem = gridItemRef?.instance;
370
- if (!gridItem)
371
- return;
372
- gridItem.ref = gridItemRef;
373
- // define what type of component to create as child, OR you can do it GridstackItemComponent template, but this is more generic
374
- const selector = n.selector;
375
- const type = selector ? GridstackComponent.selectorToType[selector] : undefined;
376
- if (type) {
377
- // shared code to create our selector component
378
- const createComp = () => {
379
- const childWidget = gridItem.container?.createComponent(type)?.instance;
380
- // if proper BaseWidget subclass, save it and load additional data
381
- if (childWidget && typeof childWidget.serialize === 'function' && typeof childWidget.deserialize === 'function') {
382
- gridItem.childWidget = childWidget;
383
- childWidget.deserialize(n);
384
- }
385
- };
386
- const lazyLoad = n.lazyLoad || n.grid?.opts?.lazyLoad && n.lazyLoad !== false;
387
- if (lazyLoad) {
388
- if (!n.visibleObservable) {
389
- n.visibleObservable = new IntersectionObserver(([entry]) => {
390
- if (entry.isIntersecting) {
391
- n.visibleObservable?.disconnect();
392
- delete n.visibleObservable;
393
- createComp();
394
- }
395
- });
396
- window.setTimeout(() => n.visibleObservable?.observe(gridItem.el)); // wait until callee sets position attributes
397
- }
398
- }
399
- else
400
- createComp();
401
- }
402
- return gridItem.el;
403
- }
404
- }
405
- else {
406
- //
407
- // REMOVE - have to call ComponentRef:destroy() for dynamic objects to correctly remove themselves
408
- // Note: this will destroy all children dynamic components as well: gridItem -> childWidget
409
- //
410
- if (isGrid) {
411
- const grid = n.el?._gridComp;
412
- if (grid?.ref)
413
- grid.ref.destroy();
414
- else
415
- grid?.ngOnDestroy();
416
- }
417
- else {
418
- const gridItem = n.el?._gridItemComp;
419
- if (gridItem?.ref)
420
- gridItem.ref.destroy();
421
- else
422
- gridItem?.ngOnDestroy();
423
- }
424
- }
425
- return;
426
- }
427
- /**
428
- * called for each item in the grid - check if additional information needs to be saved.
429
- * Note: since this is options minus gridstack protected members using Utils.removeInternalForSave(),
430
- * this typically doesn't need to do anything. However your custom Component @Input() are now supported
431
- * using BaseWidget.serialize()
432
- */
433
- export function gsSaveAdditionalNgInfo(n, w) {
434
- const gridItem = n.el?._gridItemComp;
435
- if (gridItem) {
436
- const input = gridItem.childWidget?.serialize();
437
- if (input) {
438
- w.input = input;
439
- }
440
- return;
441
- }
442
- // else check if Grid
443
- const grid = n.el?._gridComp;
444
- if (grid) {
445
- //.... save any custom data
446
- }
447
- }
448
- /**
449
- * track when widgeta re updated (rather than created) to make sure we de-serialize them as well
450
- */
451
- export function gsUpdateNgComponents(n) {
452
- const w = n;
453
- const gridItem = n.el?._gridItemComp;
454
- if (gridItem?.childWidget && w.input)
455
- gridItem.childWidget.deserialize(w);
456
- }
457
- //# sourceMappingURL=gridstack.component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gridstack.component.js","sourceRoot":"","sources":["../../../../../../angular/projects/lib/src/lib/gridstack.component.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * gridstack.component.ts 12.4.0\n * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license\n */\n\nimport {\n AfterContentInit, Component, ContentChildren, ElementRef, EventEmitter, Input,\n OnDestroy, OnInit, Output, QueryList, Type, ViewChild, ViewContainerRef, reflectComponentType, ComponentRef\n} from '@angular/core';\nimport { NgIf } from '@angular/common';\nimport { Subscription } from 'rxjs';\nimport { GridHTMLElement, GridItemHTMLElement, GridStack, GridStackNode, GridStackOptions, GridStackWidget } from 'gridstack';\n\nimport { NgGridStackNode, NgGridStackWidget } from './types';\nimport { BaseWidget } from './base-widget';\nimport { GridItemCompHTMLElement, GridstackItemComponent } from './gridstack-item.component';\n\n/**\n * Event handler callback signatures for different GridStack events.\n * These types define the structure of data passed to Angular event emitters.\n */\n\n/** Callback for general events (enable, disable, etc.) */\nexport type eventCB = {event: Event};\n\n/** Callback for element-specific events (resize, drag, etc.) */\nexport type elementCB = {event: Event, el: GridItemHTMLElement};\n\n/** Callback for events affecting multiple nodes (change, etc.) */\nexport type nodesCB = {event: Event, nodes: GridStackNode[]};\n\n/** Callback for drop events with before/after node state */\nexport type droppedCB = {event: Event, previousNode: GridStackNode, newNode: GridStackNode};\n\n/**\n * Extended HTMLElement interface for the grid container.\n * Stores a back-reference to the Angular component for integration purposes.\n */\nexport interface GridCompHTMLElement extends GridHTMLElement {\n /** Back-reference to the Angular GridStack component */\n _gridComp?: GridstackComponent;\n}\n\n/**\n * Mapping of selector strings to Angular component types.\n * Used for dynamic component creation based on widget selectors.\n */\nexport type SelectorToType = {[key: string]: Type<object>};\n\n/**\n * Angular component wrapper for GridStack.\n *\n * This component provides Angular integration for GridStack grids, handling:\n * - Grid initialization and lifecycle\n * - Dynamic component creation and management\n * - Event binding and emission\n * - Integration with Angular change detection\n *\n * Use in combination with GridstackItemComponent for individual grid items.\n *\n * @example\n * ```html\n * <gridstack [options]=\"gridOptions\" (change)=\"onGridChange($event)\">\n * <div empty-content>Drag widgets here</div>\n * </gridstack>\n * ```\n */\n@Component({\n selector: 'gridstack',\n template: `\n <!-- content to show when when grid is empty, like instructions on how to add widgets -->\n <ng-content select=\"[empty-content]\" *ngIf=\"isEmpty\"></ng-content>\n <!-- where dynamic items go -->\n <ng-template #container></ng-template>\n <!-- where template items go -->\n <ng-content></ng-content>\n `,\n styles: [`\n :host { display: block; }\n `],\n standalone: true,\n imports: [NgIf]\n // changeDetection: ChangeDetectionStrategy.OnPush, // IFF you want to optimize and control when ChangeDetection needs to happen...\n})\nexport class GridstackComponent implements OnInit, AfterContentInit, OnDestroy {\n\n /**\n * List of template-based grid items (not recommended approach).\n * Used to sync between DOM and GridStack internals when items are defined in templates.\n * Prefer dynamic component creation instead.\n */\n @ContentChildren(GridstackItemComponent) public gridstackItems?: QueryList<GridstackItemComponent>;\n /**\n * Container for dynamic component creation (recommended approach).\n * Used to append grid items programmatically at runtime.\n */\n @ViewChild('container', { read: ViewContainerRef, static: true}) public container?: ViewContainerRef;\n\n /**\n * Grid configuration options.\n * Can be set before grid initialization or updated after grid is created.\n *\n * @example\n * ```typescript\n * gridOptions: GridStackOptions = {\n * column: 12,\n * cellHeight: 'auto',\n * animate: true\n * };\n * ```\n */\n @Input() public set options(o: GridStackOptions) {\n if (this._grid) {\n this._grid.updateOptions(o);\n } else {\n this._options = o;\n }\n }\n /** Get the current running grid options */\n public get options(): GridStackOptions { return this._grid?.opts || this._options || {}; }\n\n /**\n * Controls whether empty content should be displayed.\n * Set to true to show ng-content with 'empty-content' selector when grid has no items.\n *\n * @example\n * ```html\n * <gridstack [isEmpty]=\"gridItems.length === 0\">\n * <div empty-content>Drag widgets here to get started</div>\n * </gridstack>\n * ```\n */\n @Input() public isEmpty?: boolean;\n\n /**\n * GridStack event emitters for Angular integration.\n *\n * These provide Angular-style event handling for GridStack events.\n * Alternatively, use `this.grid.on('event1 event2', callback)` for multiple events.\n *\n * Note: 'CB' suffix prevents conflicts with native DOM events.\n *\n * @example\n * ```html\n * <gridstack (changeCB)=\"onGridChange($event)\" (droppedCB)=\"onItemDropped($event)\">\n * </gridstack>\n * ```\n */\n\n /** Emitted when widgets are added to the grid */\n @Output() public addedCB = new EventEmitter<nodesCB>();\n\n /** Emitted when grid layout changes */\n @Output() public changeCB = new EventEmitter<nodesCB>();\n\n /** Emitted when grid is disabled */\n @Output() public disableCB = new EventEmitter<eventCB>();\n\n /** Emitted during widget drag operations */\n @Output() public dragCB = new EventEmitter<elementCB>();\n\n /** Emitted when widget drag starts */\n @Output() public dragStartCB = new EventEmitter<elementCB>();\n\n /** Emitted when widget drag stops */\n @Output() public dragStopCB = new EventEmitter<elementCB>();\n\n /** Emitted when widget is dropped */\n @Output() public droppedCB = new EventEmitter<droppedCB>();\n\n /** Emitted when grid is enabled */\n @Output() public enableCB = new EventEmitter<eventCB>();\n\n /** Emitted when widgets are removed from the grid */\n @Output() public removedCB = new EventEmitter<nodesCB>();\n\n /** Emitted during widget resize operations */\n @Output() public resizeCB = new EventEmitter<elementCB>();\n\n /** Emitted when widget resize starts */\n @Output() public resizeStartCB = new EventEmitter<elementCB>();\n\n /** Emitted when widget resize stops */\n @Output() public resizeStopCB = new EventEmitter<elementCB>();\n\n /**\n * Get the native DOM element that contains grid-specific fields.\n * This element has GridStack properties attached to it.\n */\n public get el(): GridCompHTMLElement { return this.elementRef.nativeElement; }\n\n /**\n * Get the underlying GridStack instance.\n * Use this to access GridStack API methods directly.\n *\n * @example\n * ```typescript\n * this.gridComponent.grid.addWidget({x: 0, y: 0, w: 2, h: 1});\n * ```\n */\n public get grid(): GridStack | undefined { return this._grid; }\n\n /**\n * Component reference for dynamic component removal.\n * Used internally when this component is created dynamically.\n */\n public ref: ComponentRef<GridstackComponent> | undefined;\n\n /**\n * Mapping of component selectors to their types for dynamic creation.\n *\n * This enables dynamic component instantiation from string selectors.\n * Angular doesn't provide public access to this mapping, so we maintain our own.\n *\n * @example\n * ```typescript\n * GridstackComponent.addComponentToSelectorType([MyWidgetComponent]);\n * ```\n */\n public static selectorToType: SelectorToType = {};\n /**\n * Register a list of Angular components for dynamic creation.\n *\n * @param typeList Array of component types to register\n *\n * @example\n * ```typescript\n * GridstackComponent.addComponentToSelectorType([\n * MyWidgetComponent,\n * AnotherWidgetComponent\n * ]);\n * ```\n */\n public static addComponentToSelectorType(typeList: Array<Type<object>>) {\n typeList.forEach(type => GridstackComponent.selectorToType[ GridstackComponent.getSelector(type) ] = type);\n }\n /**\n * Extract the selector string from an Angular component type.\n *\n * @param type The component type to get selector from\n * @returns The component's selector string\n */\n public static getSelector(type: Type<object>): string {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return reflectComponentType(type)!.selector;\n }\n\n protected _options?: GridStackOptions;\n protected _grid?: GridStack;\n protected _sub: Subscription | undefined;\n protected loaded?: boolean;\n\n constructor(protected readonly elementRef: ElementRef<GridCompHTMLElement>) {\n // set globally our method to create the right widget type\n if (!GridStack.addRemoveCB) {\n GridStack.addRemoveCB = gsCreateNgComponents;\n }\n if (!GridStack.saveCB) {\n GridStack.saveCB = gsSaveAdditionalNgInfo;\n }\n if (!GridStack.updateCB) {\n GridStack.updateCB = gsUpdateNgComponents;\n }\n this.el._gridComp = this;\n }\n\n public ngOnInit(): void {\n // init ourself before any template children are created since we track them below anyway - no need to double create+update widgets\n this.loaded = !!this.options?.children?.length;\n this._grid = GridStack.init(this._options, this.el);\n delete this._options; // GS has it now\n\n this.checkEmpty();\n }\n\n /** wait until after all DOM is ready to init gridstack children (after angular ngFor and sub-components run first) */\n public ngAfterContentInit(): void {\n // track whenever the children list changes and update the layout...\n this._sub = this.gridstackItems?.changes.subscribe(() => this.updateAll());\n // ...and do this once at least unless we loaded children already\n if (!this.loaded) this.updateAll();\n this.hookEvents(this.grid);\n }\n\n public ngOnDestroy(): void {\n this.unhookEvents(this._grid);\n this._sub?.unsubscribe();\n this._grid?.destroy();\n delete this._grid;\n delete this.el._gridComp;\n delete this.container;\n delete this.ref;\n }\n\n /**\n * called when the TEMPLATE (not recommended) list of items changes - get a list of nodes and\n * update the layout accordingly (which will take care of adding/removing items changed by Angular)\n */\n public updateAll() {\n if (!this.grid) return;\n const layout: GridStackWidget[] = [];\n this.gridstackItems?.forEach(item => {\n layout.push(item.options);\n item.clearOptions();\n });\n this.grid.load(layout); // efficient that does diffs only\n }\n\n /** check if the grid is empty, if so show alternative content */\n public checkEmpty() {\n if (!this.grid) return;\n this.isEmpty = !this.grid.engine.nodes.length;\n }\n\n /** get all known events as easy to use Outputs for convenience */\n protected hookEvents(grid?: GridStack) {\n if (!grid) return;\n // nested grids don't have events in v12.1+ so skip\n if (grid.parentGridNode) return;\n grid\n .on('added', (event: Event, nodes: GridStackNode[]) => {\n const gridComp = (nodes[0].grid?.el as GridCompHTMLElement)._gridComp || this;\n gridComp.checkEmpty();\n this.addedCB.emit({event, nodes});\n })\n .on('change', (event: Event, nodes: GridStackNode[]) => this.changeCB.emit({event, nodes}))\n .on('disable', (event: Event) => this.disableCB.emit({event}))\n .on('drag', (event: Event, el: GridItemHTMLElement) => this.dragCB.emit({event, el}))\n .on('dragstart', (event: Event, el: GridItemHTMLElement) => this.dragStartCB.emit({event, el}))\n .on('dragstop', (event: Event, el: GridItemHTMLElement) => this.dragStopCB.emit({event, el}))\n .on('dropped', (event: Event, previousNode: GridStackNode, newNode: GridStackNode) => this.droppedCB.emit({event, previousNode, newNode}))\n .on('enable', (event: Event) => this.enableCB.emit({event}))\n .on('removed', (event: Event, nodes: GridStackNode[]) => {\n const gridComp = (nodes[0].grid?.el as GridCompHTMLElement)._gridComp || this;\n gridComp.checkEmpty();\n this.removedCB.emit({event, nodes});\n })\n .on('resize', (event: Event, el: GridItemHTMLElement) => this.resizeCB.emit({event, el}))\n .on('resizestart', (event: Event, el: GridItemHTMLElement) => this.resizeStartCB.emit({event, el}))\n .on('resizestop', (event: Event, el: GridItemHTMLElement) => this.resizeStopCB.emit({event, el}))\n }\n\n protected unhookEvents(grid?: GridStack) {\n if (!grid) return;\n // nested grids don't have events in v12.1+ so skip\n if (grid.parentGridNode) return;\n grid.off('added change disable drag dragstart dragstop dropped enable removed resize resizestart resizestop');\n }\n}\n\n/**\n * can be used when a new item needs to be created, which we do as a Angular component, or deleted (skip)\n **/\nexport function gsCreateNgComponents(host: GridCompHTMLElement | HTMLElement, n: NgGridStackNode, add: boolean, isGrid: boolean): HTMLElement | undefined {\n if (add) {\n //\n // create the component dynamically - see https://angular.io/docs/ts/latest/cookbook/dynamic-component-loader.html\n //\n if (!host) return;\n if (isGrid) {\n // TODO: figure out how to create ng component inside regular Div. need to access app injectors...\n // if (!container) {\n // const hostElement: Element = host;\n // const environmentInjector: EnvironmentInjector;\n // grid = createComponent(GridstackComponent, {environmentInjector, hostElement})?.instance;\n // }\n\n const gridItemComp = (host.parentElement as GridItemCompHTMLElement)?._gridItemComp;\n if (!gridItemComp) return;\n // check if gridItem has a child component with 'container' exposed to create under..\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const container = (gridItemComp.childWidget as any)?.container || gridItemComp.container;\n const gridRef = container?.createComponent(GridstackComponent);\n const grid = gridRef?.instance;\n if (!grid) return;\n grid.ref = gridRef;\n grid.options = n;\n return grid.el;\n } else {\n const gridComp = (host as GridCompHTMLElement)._gridComp;\n const gridItemRef = gridComp?.container?.createComponent(GridstackItemComponent);\n const gridItem = gridItemRef?.instance;\n if (!gridItem) return;\n gridItem.ref = gridItemRef\n\n // define what type of component to create as child, OR you can do it GridstackItemComponent template, but this is more generic\n const selector = n.selector;\n const type = selector ? GridstackComponent.selectorToType[selector] : undefined;\n if (type) {\n // shared code to create our selector component\n const createComp = () => {\n const childWidget = gridItem.container?.createComponent(type)?.instance as BaseWidget;\n // if proper BaseWidget subclass, save it and load additional data\n if (childWidget && typeof childWidget.serialize === 'function' && typeof childWidget.deserialize === 'function') {\n gridItem.childWidget = childWidget;\n childWidget.deserialize(n);\n }\n }\n\n const lazyLoad = n.lazyLoad || n.grid?.opts?.lazyLoad && n.lazyLoad !== false;\n if (lazyLoad) {\n if (!n.visibleObservable) {\n n.visibleObservable = new IntersectionObserver(([entry]) => { if (entry.isIntersecting) {\n n.visibleObservable?.disconnect();\n delete n.visibleObservable;\n createComp();\n }});\n window.setTimeout(() => n.visibleObservable?.observe(gridItem.el)); // wait until callee sets position attributes\n }\n } else createComp();\n }\n\n return gridItem.el;\n }\n } else {\n //\n // REMOVE - have to call ComponentRef:destroy() for dynamic objects to correctly remove themselves\n // Note: this will destroy all children dynamic components as well: gridItem -> childWidget\n //\n if (isGrid) {\n const grid = (n.el as GridCompHTMLElement)?._gridComp;\n if (grid?.ref) grid.ref.destroy();\n else grid?.ngOnDestroy();\n } else {\n const gridItem = (n.el as GridItemCompHTMLElement)?._gridItemComp;\n if (gridItem?.ref) gridItem.ref.destroy();\n else gridItem?.ngOnDestroy();\n }\n }\n return;\n}\n\n/**\n * called for each item in the grid - check if additional information needs to be saved.\n * Note: since this is options minus gridstack protected members using Utils.removeInternalForSave(),\n * this typically doesn't need to do anything. However your custom Component @Input() are now supported\n * using BaseWidget.serialize()\n */\nexport function gsSaveAdditionalNgInfo(n: NgGridStackNode, w: NgGridStackWidget) {\n const gridItem = (n.el as GridItemCompHTMLElement)?._gridItemComp;\n if (gridItem) {\n const input = gridItem.childWidget?.serialize();\n if (input) {\n w.input = input;\n }\n return;\n }\n // else check if Grid\n const grid = (n.el as GridCompHTMLElement)?._gridComp;\n if (grid) {\n //.... save any custom data\n }\n}\n\n/**\n * track when widgeta re updated (rather than created) to make sure we de-serialize them as well\n */\nexport function gsUpdateNgComponents(n: NgGridStackNode) {\n const w: NgGridStackWidget = n;\n const gridItem = (n.el as GridItemCompHTMLElement)?._gridItemComp;\n if (gridItem?.childWidget && w.input) gridItem.childWidget.deserialize(w);\n}"]}
@@ -1,29 +0,0 @@
1
- /**
2
- * gridstack.component.ts 12.4.0
3
- * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license
4
- */
5
- /**
6
- * @deprecated Use GridstackComponent and GridstackItemComponent as standalone components instead.
7
- *
8
- * This NgModule is provided for backward compatibility but is no longer the recommended approach.
9
- * Import components directly in your standalone components or use the new Angular module structure.
10
- *
11
- * @example
12
- * ```typescript
13
- * // Preferred approach - standalone components
14
- * @Component({
15
- * selector: 'my-app',
16
- * imports: [GridstackComponent, GridstackItemComponent],
17
- * template: '<gridstack></gridstack>'
18
- * })
19
- * export class AppComponent {}
20
- *
21
- * // Legacy approach (deprecated)
22
- * @NgModule({
23
- * imports: [GridstackModule]
24
- * })
25
- * export class AppModule {}
26
- * ```
27
- */
28
- export declare class GridstackModule {
29
- }
@@ -1,52 +0,0 @@
1
- /**
2
- * gridstack.component.ts 12.4.0
3
- * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license
4
- */
5
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
6
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
9
- return c > 3 && r && Object.defineProperty(target, key, r), r;
10
- };
11
- import { NgModule } from "@angular/core";
12
- import { GridstackItemComponent } from "./gridstack-item.component";
13
- import { GridstackComponent } from "./gridstack.component";
14
- /**
15
- * @deprecated Use GridstackComponent and GridstackItemComponent as standalone components instead.
16
- *
17
- * This NgModule is provided for backward compatibility but is no longer the recommended approach.
18
- * Import components directly in your standalone components or use the new Angular module structure.
19
- *
20
- * @example
21
- * ```typescript
22
- * // Preferred approach - standalone components
23
- * @Component({
24
- * selector: 'my-app',
25
- * imports: [GridstackComponent, GridstackItemComponent],
26
- * template: '<gridstack></gridstack>'
27
- * })
28
- * export class AppComponent {}
29
- *
30
- * // Legacy approach (deprecated)
31
- * @NgModule({
32
- * imports: [GridstackModule]
33
- * })
34
- * export class AppModule {}
35
- * ```
36
- */
37
- let GridstackModule = class GridstackModule {
38
- };
39
- GridstackModule = __decorate([
40
- NgModule({
41
- imports: [
42
- GridstackItemComponent,
43
- GridstackComponent,
44
- ],
45
- exports: [
46
- GridstackItemComponent,
47
- GridstackComponent,
48
- ],
49
- })
50
- ], GridstackModule);
51
- export { GridstackModule };
52
- //# sourceMappingURL=gridstack.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gridstack.module.js","sourceRoot":"","sources":["../../../../../../angular/projects/lib/src/lib/gridstack.module.ts"],"names":[],"mappings":"AAAA;;;GAGG;;;;;;;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAWH,IAAa,eAAe,GAA5B,MAAa,eAAe;CAAG,CAAA;AAAlB,eAAe;IAV3B,QAAQ,CAAC;QACR,OAAO,EAAE;YACP,sBAAsB;YACtB,kBAAkB;SACnB;QACD,OAAO,EAAE;YACP,sBAAsB;YACtB,kBAAkB;SACnB;KACF,CAAC;GACW,eAAe,CAAG;SAAlB,eAAe","sourcesContent":["/**\r\n * gridstack.component.ts 12.4.0\r\n * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license\r\n */\r\n\r\nimport { NgModule } from \"@angular/core\";\r\n\r\nimport { GridstackItemComponent } from \"./gridstack-item.component\";\r\nimport { GridstackComponent } from \"./gridstack.component\";\r\n\r\n/**\r\n * @deprecated Use GridstackComponent and GridstackItemComponent as standalone components instead.\r\n *\r\n * This NgModule is provided for backward compatibility but is no longer the recommended approach.\r\n * Import components directly in your standalone components or use the new Angular module structure.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Preferred approach - standalone components\r\n * @Component({\r\n * selector: 'my-app',\r\n * imports: [GridstackComponent, GridstackItemComponent],\r\n * template: '<gridstack></gridstack>'\r\n * })\r\n * export class AppComponent {}\r\n *\r\n * // Legacy approach (deprecated)\r\n * @NgModule({\r\n * imports: [GridstackModule]\r\n * })\r\n * export class AppModule {}\r\n * ```\r\n */\r\n@NgModule({\r\n imports: [\r\n GridstackItemComponent,\r\n GridstackComponent,\r\n ],\r\n exports: [\r\n GridstackItemComponent,\r\n GridstackComponent,\r\n ],\r\n})\r\nexport class GridstackModule {}\r\n"]}
@@ -1,51 +0,0 @@
1
- /**
2
- * gridstack-item.component.ts 12.4.0
3
- * Copyright (c) 2025 Alain Dumesny - see GridStack root license
4
- */
5
- import { GridStackNode, GridStackOptions, GridStackWidget } from "gridstack";
6
- /**
7
- * Extended GridStackWidget interface for Angular integration.
8
- * Adds Angular-specific properties for dynamic component creation.
9
- */
10
- export interface NgGridStackWidget extends GridStackWidget {
11
- /** Angular component selector for dynamic creation (e.g., 'my-widget') */
12
- selector?: string;
13
- /** Serialized data for component @Input() properties */
14
- input?: NgCompInputs;
15
- /** Configuration for nested sub-grids */
16
- subGridOpts?: NgGridStackOptions;
17
- }
18
- /**
19
- * Extended GridStackNode interface for Angular integration.
20
- * Adds component selector for dynamic content creation.
21
- */
22
- export interface NgGridStackNode extends GridStackNode {
23
- /** Angular component selector for this node's content */
24
- selector?: string;
25
- }
26
- /**
27
- * Extended GridStackOptions interface for Angular integration.
28
- * Supports Angular-specific widget definitions and nested grids.
29
- */
30
- export interface NgGridStackOptions extends GridStackOptions {
31
- /** Array of Angular widget definitions for initial grid setup */
32
- children?: NgGridStackWidget[];
33
- /** Configuration for nested sub-grids (Angular-aware) */
34
- subGridOpts?: NgGridStackOptions;
35
- }
36
- /**
37
- * Type for component input data serialization.
38
- * Maps @Input() property names to their values for widget persistence.
39
- *
40
- * @example
41
- * ```typescript
42
- * const inputs: NgCompInputs = {
43
- * title: 'My Widget',
44
- * value: 42,
45
- * config: { enabled: true }
46
- * };
47
- * ```
48
- */
49
- export type NgCompInputs = {
50
- [key: string]: any;
51
- };
@@ -1,6 +0,0 @@
1
- /**
2
- * gridstack-item.component.ts 12.4.0
3
- * Copyright (c) 2025 Alain Dumesny - see GridStack root license
4
- */
5
- export {};
6
- //# sourceMappingURL=types.js.map