@ngbase/adk 0.1.19 → 0.1.21

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 (70) hide show
  1. package/fesm2022/ngbase-adk-a11y.mjs +15 -15
  2. package/fesm2022/ngbase-adk-accordion.mjs +12 -12
  3. package/fesm2022/ngbase-adk-autocomplete.mjs +6 -6
  4. package/fesm2022/ngbase-adk-avatar.mjs +6 -6
  5. package/fesm2022/ngbase-adk-bidi.mjs +3 -3
  6. package/fesm2022/ngbase-adk-breadcrumb.mjs +12 -12
  7. package/fesm2022/ngbase-adk-cache.mjs +3 -3
  8. package/fesm2022/ngbase-adk-carousel.mjs +15 -15
  9. package/fesm2022/ngbase-adk-checkbox.mjs +6 -6
  10. package/fesm2022/ngbase-adk-chip.mjs +9 -9
  11. package/fesm2022/ngbase-adk-clipboard.mjs +3 -3
  12. package/fesm2022/ngbase-adk-color-picker.mjs +30 -30
  13. package/fesm2022/ngbase-adk-cookies.mjs +3 -3
  14. package/fesm2022/ngbase-adk-datepicker.mjs +36 -36
  15. package/fesm2022/ngbase-adk-dialog.mjs +12 -12
  16. package/fesm2022/ngbase-adk-drag.mjs +12 -12
  17. package/fesm2022/ngbase-adk-form-field.mjs +20 -20
  18. package/fesm2022/ngbase-adk-form-field.mjs.map +1 -1
  19. package/fesm2022/ngbase-adk-hover-card.mjs +3 -3
  20. package/fesm2022/ngbase-adk-icon.mjs +6 -6
  21. package/fesm2022/ngbase-adk-inline-edit.mjs +9 -9
  22. package/fesm2022/ngbase-adk-jwt.mjs +6 -6
  23. package/fesm2022/ngbase-adk-keys.mjs +6 -6
  24. package/fesm2022/ngbase-adk-list.mjs +6 -6
  25. package/fesm2022/ngbase-adk-mask.mjs +6 -6
  26. package/fesm2022/ngbase-adk-menu.mjs +24 -24
  27. package/fesm2022/ngbase-adk-network.mjs +3 -3
  28. package/fesm2022/ngbase-adk-otp.mjs +9 -9
  29. package/fesm2022/ngbase-adk-pagination.mjs +6 -6
  30. package/fesm2022/ngbase-adk-popover.mjs +21 -21
  31. package/fesm2022/ngbase-adk-portal.mjs +12 -12
  32. package/fesm2022/ngbase-adk-portal.mjs.map +1 -1
  33. package/fesm2022/ngbase-adk-progress.mjs +6 -6
  34. package/fesm2022/ngbase-adk-radio.mjs +9 -9
  35. package/fesm2022/ngbase-adk-resizable.mjs +39 -131
  36. package/fesm2022/ngbase-adk-resizable.mjs.map +1 -1
  37. package/fesm2022/ngbase-adk-scroll-area.mjs +6 -6
  38. package/fesm2022/ngbase-adk-select.mjs +245 -102
  39. package/fesm2022/ngbase-adk-select.mjs.map +1 -1
  40. package/fesm2022/ngbase-adk-selectable.mjs +6 -6
  41. package/fesm2022/ngbase-adk-sheet.mjs +3 -3
  42. package/fesm2022/ngbase-adk-sidenav.mjs +18 -18
  43. package/fesm2022/ngbase-adk-slider.mjs +12 -12
  44. package/fesm2022/ngbase-adk-sonner.mjs +9 -9
  45. package/fesm2022/ngbase-adk-stepper.mjs +12 -12
  46. package/fesm2022/ngbase-adk-switch.mjs +12 -12
  47. package/fesm2022/ngbase-adk-table.mjs +39 -39
  48. package/fesm2022/ngbase-adk-tabs.mjs +21 -21
  49. package/fesm2022/ngbase-adk-toggle-group.mjs +6 -6
  50. package/fesm2022/ngbase-adk-toggle.mjs +3 -3
  51. package/fesm2022/ngbase-adk-tooltip.mjs +9 -9
  52. package/fesm2022/ngbase-adk-tour.mjs +12 -12
  53. package/fesm2022/ngbase-adk-translate.mjs +6 -6
  54. package/fesm2022/ngbase-adk-tree.mjs +15 -15
  55. package/fesm2022/ngbase-adk-utils.mjs +14 -10
  56. package/fesm2022/ngbase-adk-utils.mjs.map +1 -1
  57. package/fesm2022/ngbase-adk-virtualizer.mjs +11 -8
  58. package/fesm2022/ngbase-adk-virtualizer.mjs.map +1 -1
  59. package/package.json +1 -1
  60. package/schematics/components/files/pagination/pagination.ts.template +2 -2
  61. package/schematics/components/files/select/select.ts.template +92 -15
  62. package/schematics/components/files/sidenav/sidenav.ts.template +16 -8
  63. package/schematics/components/files/switch/switch.ts.template +1 -1
  64. package/types/ngbase-adk-color-picker.d.ts +1 -1
  65. package/types/ngbase-adk-form-field.d.ts +1 -1
  66. package/types/ngbase-adk-portal.d.ts +2 -3
  67. package/types/ngbase-adk-resizable.d.ts +3 -3
  68. package/types/ngbase-adk-scroll-area.d.ts +1 -1
  69. package/types/ngbase-adk-select.d.ts +27 -6
  70. package/types/ngbase-adk-virtualizer.d.ts +3 -2
@@ -79,10 +79,10 @@ class NgbResizableGroup {
79
79
  panel.onEnd();
80
80
  });
81
81
  }
82
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbResizableGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
83
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: NgbResizableGroup, isStandalone: true, selector: "[ngbResizableGroup]", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id" } }, queries: [{ propertyName: "panels", predicate: i0.forwardRef(() => NgbResizable), isSignal: true }], exportAs: ["ngbResizableGroup"], ngImport: i0 }); }
82
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbResizableGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
83
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.2", type: NgbResizableGroup, isStandalone: true, selector: "[ngbResizableGroup]", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.id": "id" } }, queries: [{ propertyName: "panels", predicate: i0.forwardRef(() => NgbResizable), isSignal: true }], exportAs: ["ngbResizableGroup"], ngImport: i0 }); }
84
84
  }
85
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbResizableGroup, decorators: [{
85
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbResizableGroup, decorators: [{
86
86
  type: Directive,
87
87
  args: [{
88
88
  selector: '[ngbResizableGroup]',
@@ -103,10 +103,10 @@ class NgbGutter {
103
103
  this.drag._lockAxis = linkedSignal(this.resizable.lockAxis, ...(ngDevMode ? [{ debugName: "_lockAxis" }] : []));
104
104
  this.drag._dragBoundary = linkedSignal(() => `#${this.resizable.id}`, ...(ngDevMode ? [{ debugName: "_dragBoundary" }] : []));
105
105
  }
106
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbGutter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
107
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.0", type: NgbGutter, isStandalone: true, selector: "[ngbGutter]", host: { attributes: { "role": "separator" }, properties: { "attr.aria-valuemin": "resizable.min()", "attr.aria-valuemax": "resizable.max()" } }, exportAs: ["ngbGutter"], hostDirectives: [{ directive: i1.Drag }], ngImport: i0 }); }
106
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbGutter, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
107
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.2", type: NgbGutter, isStandalone: true, selector: "[ngbGutter]", host: { attributes: { "role": "separator" }, properties: { "attr.aria-valuemin": "resizable.min()", "attr.aria-valuemax": "resizable.max()" } }, exportAs: ["ngbGutter"], hostDirectives: [{ directive: i1.Drag }], ngImport: i0 }); }
108
108
  }
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbGutter, decorators: [{
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbGutter, decorators: [{
110
110
  type: Directive,
111
111
  args: [{
112
112
  selector: '[ngbGutter]',
@@ -140,16 +140,14 @@ class NgbResizable {
140
140
  this.reducedSize = 0;
141
141
  this.localMinSize = Infinity;
142
142
  this.localMaxSize = -Infinity;
143
- this.initialReducedSize = 0;
143
+ this.lastReducedSize = 0;
144
144
  this.index = 0;
145
145
  this.str = '';
146
146
  effect(() => {
147
147
  const size = this.size();
148
148
  untracked(() => {
149
- if (size !== 'auto') {
150
- this.reducedSize = 0;
149
+ if (size !== 'auto')
151
150
  this.handleDrag();
152
- }
153
151
  this.resizable.setAuto();
154
152
  });
155
153
  });
@@ -191,24 +189,22 @@ class NgbResizable {
191
189
  : this.el.nativeElement.offsetHeight;
192
190
  }
193
191
  onStart() {
194
- this.initialReducedSize = this.reducedSize;
195
192
  const cSize = this.cSize();
196
193
  const minSize = this.getSize(this.min());
197
- this.localMinSize = Math.max(this.reducedSize + (cSize - minSize), this.reducedSize);
194
+ this.localMinSize = cSize + this.reducedSize - minSize;
198
195
  if (this.max()) {
199
196
  const maxSize = this.getSize(this.max());
200
- this.localMaxSize = Math.min(this.reducedSize - (maxSize - cSize), this.reducedSize);
201
- }
202
- else {
203
- this.localMaxSize = -Infinity;
197
+ this.localMaxSize = cSize + this.reducedSize - maxSize;
204
198
  }
199
+ // console.log(`onStart ${this.index}`, this.min(), this.localMinSize, this.localMaxSize);
205
200
  }
206
201
  onEnd() {
207
202
  this.localMinSize = Infinity;
208
203
  this.localMaxSize = -Infinity;
204
+ this.lastReducedSize = this.reducedSize;
209
205
  }
210
206
  getSize(size) {
211
- if (size === undefined || size === null || size === '')
207
+ if (!size)
212
208
  return 0;
213
209
  const minValue = size;
214
210
  if (typeof minValue === 'number') {
@@ -241,148 +237,60 @@ class NgbResizable {
241
237
  this.handleDrag(data);
242
238
  }
243
239
  }
244
- handleDrag(event) {
245
- if (!event) {
246
- this.updateFlex();
247
- return;
248
- }
240
+ handleDrag(event = { x: 0, y: 0 }) {
249
241
  const isHorizontal = this.resizable.direction() === 'horizontal';
250
242
  let delta = isHorizontal ? event.x : event.y;
243
+ delta -= this.lastReducedSize;
251
244
  const panels = this.resizable.panels();
252
- // Check how much we can move left (shrink panels before and including current)
253
245
  let remaining = -delta;
254
246
  for (let i = this.index; i >= 0; i--) {
255
247
  const panel = panels[i];
256
- remaining = panel.getUpdatedSize(panel.initialReducedSize + remaining).remaining;
257
- if (remaining === 0)
248
+ remaining = panel.getUpdatedSize(remaining).remaining;
249
+ if (remaining === 0) {
258
250
  break;
251
+ }
259
252
  }
260
253
  delta = delta + remaining;
261
- // Check how much we can move right (shrink panels after current)
262
254
  remaining = delta;
263
255
  for (let i = this.index + 1; i < panels.length; i++) {
264
256
  const panel = panels[i];
265
- remaining = panel.getUpdatedSize(panel.initialReducedSize + remaining).remaining;
266
- if (remaining === 0)
257
+ remaining = panel.getUpdatedSize(remaining).remaining;
258
+ if (remaining === 0) {
267
259
  break;
260
+ }
268
261
  }
269
262
  delta = delta - remaining;
270
- // Apply the validated delta
271
263
  const current = panels[this.index];
272
- const next = panels[this.index + 1];
273
- // Auto-Auto
274
- if (current.size() === 'auto' && next?.size() === 'auto') {
275
- this.updateSize(delta, 'prev', true);
276
- panels[this.index + 1]?.updateSize(-delta, 'next', true);
277
- this.resizable.setAuto();
278
- return;
279
- }
280
- const autos = panels.filter(p => p.size() === 'auto');
281
- const N = autos.length;
282
- if (N > 0) {
283
- // Fixed-Auto
284
- if (current.size() !== 'auto' && next?.size() === 'auto') {
285
- this.updateSize(delta, 'prev');
286
- const input = -delta;
287
- console.log('auto 1');
288
- autos.forEach(auto => {
289
- const factor = auto === next ? (N - 1) / N : -1 / N;
290
- auto.updateSize(input * factor, 'next', true);
291
- });
292
- this.resizable.setAuto();
293
- return;
294
- }
295
- // Auto-Fixed
296
- if (current.size() === 'auto' && next?.size() !== 'auto') {
297
- next?.updateSize(-delta, 'next');
298
- const input = delta;
299
- console.log('auto 2');
300
- autos.forEach(auto => {
301
- const factor = auto === current ? (N - 1) / N : -1 / N;
302
- auto.updateSize(input * factor, 'prev', true);
303
- });
304
- this.resizable.setAuto();
305
- return;
306
- }
307
- }
308
- // Fixed-Fixed
309
- this.updateSize(delta, 'prev');
310
- panels[this.index + 1]?.updateSize(-delta, 'next');
311
- this.resizable.setAuto();
264
+ current.updateSize(delta, 'both');
312
265
  }
313
266
  getUpdatedSize(px) {
314
267
  const v = Math.max(Math.min(px, this.localMinSize), this.localMaxSize);
315
268
  return { remaining: px - v, value: v };
316
269
  }
317
- updateSize(delta, direct, force = false) {
318
- if (this.size() === 'auto' && !force) {
319
- this.reducedSize = 0;
320
- this.updateFlex();
321
- return;
322
- }
323
- const requestedReducedSize = this.initialReducedSize - delta;
324
- const { remaining, value } = this.getUpdatedSize(requestedReducedSize);
270
+ updateSize(px, direct) {
271
+ const prevSize = -px;
272
+ const { remaining, value } = this.getUpdatedSize(prevSize);
325
273
  this.reducedSize = value;
326
274
  this.updateFlex();
327
- const actualDelta = this.initialReducedSize - this.reducedSize;
328
- const unabsorbed = delta - actualDelta;
329
- console.log('unabsorbed', this.index, actualDelta, unabsorbed);
330
- if (unabsorbed !== 0) {
331
- const nextIndex = direct === 'next' ? this.index + 1 : this.index - 1;
332
- const neighbor = this.resizable.panels()[nextIndex];
333
- if (neighbor && neighbor.size() === 'auto') {
334
- const autos = this.resizable.panels().filter(p => p.size() === 'auto');
335
- const N = autos.length;
336
- if (N > 0) {
337
- const baseShift = unabsorbed / N;
338
- const targets = new Map();
339
- autos.forEach(a => targets.set(a, 0));
340
- let remaining = unabsorbed;
341
- const neighborIdx = autos.findIndex(a => a.index === neighbor.index);
342
- // safe guard
343
- if (neighborIdx === -1)
344
- return;
345
- const relevantAutos = direct === 'next'
346
- ? autos.slice(neighborIdx)
347
- : autos.slice(0, neighborIdx + 1).reverse();
348
- for (const panel of relevantAutos) {
349
- const maxShrink = panel['localMinSize'] - panel.initialReducedSize;
350
- const maxGrow = panel.initialReducedSize - panel['localMaxSize'];
351
- const allowedShrink = -maxShrink;
352
- const allowedGrow = maxGrow;
353
- const consumed = Math.max(allowedShrink, Math.min(allowedGrow, remaining));
354
- targets.set(panel, consumed);
355
- remaining -= consumed;
356
- if (Math.abs(remaining) < 0.1)
357
- break;
358
- }
359
- // const tracks: number[] = [];
360
- autos.forEach(auto => {
361
- const t = targets.get(auto) || 0;
362
- const d = t - baseShift;
363
- // tracks.push(d);
364
- auto.updateSize(d, direct, true);
365
- });
366
- // console.log('auto 3 ', tracks, baseShift);
367
- }
368
- }
369
- else {
370
- neighbor?.updateSize(unabsorbed, direct);
371
- }
275
+ const isSame = prevSize !== this.reducedSize;
276
+ const v = direct === 'both' ? px : remaining;
277
+ if ((isSame && direct === 'next') || direct === 'both') {
278
+ // console.log(`updateSize ${this.index}`, this.reducedSize, px, value, v);
279
+ const next = this.resizable.panels()[this.index + 1];
280
+ next?.updateSize(-v, 'next');
281
+ }
282
+ if (isSame && (direct === 'prev' || direct === 'both')) {
283
+ const prev = this.resizable.panels()[this.index - 1];
284
+ prev?.updateSize(v, 'prev');
372
285
  }
373
286
  }
374
287
  calculateSize() {
375
288
  const size = this.lSize();
376
- if (this.size() === 'auto' && this.reducedSize === 0) {
377
- return size;
378
- }
379
289
  const baseSize = typeof size === 'number' ? `${size}%` : size;
380
290
  if (this.reducedSize === 0) {
381
291
  return baseSize;
382
292
  }
383
- const sign = this.reducedSize > 0 ? '-' : '+';
384
- const absSize = Math.abs(this.reducedSize);
385
- return `calc(${baseSize} ${sign} ${absSize}px)`;
293
+ return `calc(${baseSize} - ${this.reducedSize}px)`;
386
294
  }
387
295
  updateFlex() {
388
296
  const size = this.calculateSize();
@@ -397,10 +305,10 @@ class NgbResizable {
397
305
  this.el.nativeElement.style.height = this.str;
398
306
  }
399
307
  }
400
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbResizable, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
401
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.0", type: NgbResizable, isStandalone: true, selector: "[ngbResizable]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "dragElement", first: true, predicate: ["dragElement"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "drag", first: true, predicate: Drag, descendants: true, isSignal: true }], exportAs: ["ngbResizable"], ngImport: i0 }); }
308
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbResizable, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
309
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.1.2", type: NgbResizable, isStandalone: true, selector: "[ngbResizable]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "dragElement", first: true, predicate: ["dragElement"], descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "drag", first: true, predicate: Drag, descendants: true, isSignal: true }], exportAs: ["ngbResizable"], ngImport: i0 }); }
402
310
  }
403
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbResizable, decorators: [{
311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbResizable, decorators: [{
404
312
  type: Directive,
405
313
  args: [{
406
314
  selector: '[ngbResizable]',
@@ -1 +1 @@
1
- {"version":3,"file":"ngbase-adk-resizable.mjs","sources":["../../../projects/adk/resizable/resizable-group.ts","../../../projects/adk/resizable/resizable.ts","../../../projects/adk/resizable/public-api.ts","../../../projects/adk/resizable/ngbase-adk-resizable.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n contentChildren,\n effect,\n forwardRef,\n inject,\n input,\n untracked,\n DOCUMENT,\n} from '@angular/core';\nimport { uniqueId } from '@ngbase/adk/utils';\nimport { NgbResizable } from './resizable';\n\n@Directive({\n selector: '[ngbResizableGroup]',\n exportAs: 'ngbResizableGroup',\n host: {\n '[attr.id]': 'id',\n },\n})\nexport class NgbResizableGroup {\n readonly document = inject(DOCUMENT);\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly panels = contentChildren<NgbResizable>(forwardRef(() => NgbResizable));\n\n readonly direction = input<'horizontal' | 'vertical'>('horizontal');\n\n readonly id = uniqueId();\n\n private overlayDiv?: HTMLDivElement;\n\n constructor() {\n effect(() => {\n const panels = this.panels();\n\n untracked(() => {\n // set the index of each panel first before initializing the drag\n panels.forEach((panel, index) => {\n panel.index = index;\n });\n panels.forEach((panel, index) => {\n // hide the last panel's drag handle\n panel.draggable.set(index !== panels.length - 1);\n if (panel.size() !== 'auto') {\n panel.handleDrag();\n }\n });\n // we need to called setAuto after all panels have been initialized\n // because the number of panels could have changed\n this.setAuto();\n });\n });\n }\n\n get w() {\n return this.el.nativeElement.clientWidth;\n }\n\n get h() {\n return this.el.nativeElement.clientHeight;\n }\n\n setAuto() {\n const panels = this.panels();\n let str = 'calc(100%';\n const autos = [];\n for (const panel of panels) {\n if (panel.size() !== 'auto') {\n str += panel.str ? ` - ${panel.str}` : '';\n } else {\n autos.push(panel);\n }\n }\n str += ')';\n if (autos.length > 1) {\n str = `calc(${str} / ${autos.length})`;\n }\n for (const auto of autos) {\n auto.lSize.set(str);\n auto.handleDrag();\n }\n }\n\n start() {\n const div = this.document.createElement('div');\n div.style.position = 'absolute';\n div.style.top = '0';\n div.style.left = '0';\n div.style.width = '100%';\n div.style.height = '100%';\n div.style.zIndex = '9999';\n div.style.cursor = 'ew-resize';\n this.document.body.appendChild(div);\n this.overlayDiv = div;\n\n this.panels().forEach(panel => {\n panel.onStart();\n });\n }\n\n end() {\n this.overlayDiv?.remove();\n this.panels().forEach(panel => {\n panel.onEnd();\n });\n }\n}\n\nexport function aliasResizableGroup(resizableGroup: typeof NgbResizableGroup) {\n return { provide: NgbResizableGroup, useExisting: resizableGroup };\n}\n","import {\n Directive,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n linkedSignal,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { Drag, DragData } from '@ngbase/adk/drag';\nimport { NgbResizableGroup } from './resizable-group';\n\n@Directive({\n selector: '[ngbGutter]',\n exportAs: 'ngbGutter',\n hostDirectives: [Drag],\n host: {\n role: 'separator',\n '[attr.aria-valuemin]': 'resizable.min()',\n '[attr.aria-valuemax]': 'resizable.max()',\n },\n})\nexport class NgbGutter {\n readonly resizable = inject(NgbResizable);\n readonly drag = inject(Drag);\n\n constructor() {\n this.drag._lockAxis = linkedSignal(this.resizable.lockAxis);\n this.drag._dragBoundary = linkedSignal(() => `#${this.resizable.id}`);\n }\n}\n\n@Directive({\n selector: '[ngbResizable]',\n exportAs: 'ngbResizable',\n})\nexport class NgbResizable {\n // Dependencies\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly resizable = inject(NgbResizableGroup);\n readonly containerRef = inject(ViewContainerRef);\n readonly dragElement = viewChild('dragElement', { read: TemplateRef });\n readonly drag = viewChild(Drag);\n readonly id = this.resizable.id;\n readonly lockAxis = computed(() => (this.resizable.direction() === 'horizontal' ? 'x' : 'y'));\n\n // inputs\n readonly size = input<number | string>('auto');\n readonly min = input<number | string>(0);\n readonly max = input<number | string>();\n\n // State\n readonly lSize = linkedSignal({\n source: this.size,\n computation: size => (size !== 'auto' ? size : ''),\n });\n readonly draggable = signal(false);\n reducedSize = 0;\n private localMinSize = Infinity;\n private localMaxSize = -Infinity;\n private initialReducedSize = 0;\n index = 0;\n str = '';\n\n constructor() {\n effect(() => {\n const size = this.size();\n untracked(() => {\n if (size !== 'auto') {\n this.reducedSize = 0;\n this.handleDrag();\n }\n\n this.resizable.setAuto();\n });\n });\n\n // This effect is responsible for creating the gutter element\n effect(() => {\n const cf = this.containerRef;\n if (this.draggable() && this.size()) {\n if (cf.length === 0) {\n untracked(() => cf.createEmbeddedView(this.dragElement()!));\n }\n } else {\n cf.clear();\n }\n });\n\n // This effect is responsible for handling the drag events\n effect(cleanup => {\n const drag = this.drag();\n\n if (!drag) return;\n\n untracked(() => {\n const sub = drag.events.subscribe((data: DragData) => {\n data.event?.preventDefault();\n\n requestAnimationFrame(() => this.onDrag(data));\n });\n cleanup(() => sub.unsubscribe());\n });\n });\n }\n\n // get w() {\n // return this.el.nativeElement.clientWidth;\n // }\n\n // get h() {\n // return this.el.nativeElement.clientHeight;\n // }\n\n cSize() {\n return this.resizable.direction() === 'horizontal'\n ? this.el.nativeElement.offsetWidth\n : this.el.nativeElement.offsetHeight;\n }\n\n onStart() {\n this.initialReducedSize = this.reducedSize;\n const cSize = this.cSize();\n const minSize = this.getSize(this.min());\n this.localMinSize = Math.max(this.reducedSize + (cSize - minSize), this.reducedSize);\n if (this.max()) {\n const maxSize = this.getSize(this.max());\n this.localMaxSize = Math.min(this.reducedSize - (maxSize - cSize), this.reducedSize);\n } else {\n this.localMaxSize = -Infinity;\n }\n }\n\n onEnd() {\n this.localMinSize = Infinity;\n this.localMaxSize = -Infinity;\n }\n\n private getSize(size?: number | string): number {\n if (size === undefined || size === null || size === '') return 0;\n\n const minValue = size;\n if (typeof minValue === 'number') {\n // If number, treat as percentage\n return (\n (this.resizable.direction() === 'horizontal' ? this.resizable.w : this.resizable.h) *\n (minValue / 100)\n );\n }\n\n // Handle pixel values\n const pixelMatch = minValue?.toString().match(/(\\d+)px/);\n if (pixelMatch) {\n return parseInt(pixelMatch[1], 10);\n }\n\n // Handle percentage values provided as string\n const percentMatch = minValue?.toString().match(/(\\d+)%/);\n if (percentMatch) {\n return (\n (this.resizable.direction() === 'horizontal' ? this.resizable.w : this.resizable.h) *\n (parseInt(percentMatch[1], 10) / 100)\n );\n }\n\n return 0;\n }\n\n onDrag(data: DragData): void {\n if (data.type === 'start') {\n this.resizable.start();\n }\n\n // We have to call end method without calling handleDrag to avoid layout thrashing\n if (data.type === 'end') {\n this.resizable.end();\n } else {\n this.handleDrag(data);\n }\n }\n\n handleDrag(event?: DragData) {\n if (!event) {\n this.updateFlex();\n return;\n }\n\n const isHorizontal = this.resizable.direction() === 'horizontal';\n let delta = isHorizontal ? event.x : event.y;\n\n const panels = this.resizable.panels();\n\n // Check how much we can move left (shrink panels before and including current)\n let remaining = -delta;\n for (let i = this.index; i >= 0; i--) {\n const panel = panels[i];\n remaining = panel.getUpdatedSize(panel.initialReducedSize + remaining).remaining;\n if (remaining === 0) break;\n }\n delta = delta + remaining;\n\n // Check how much we can move right (shrink panels after current)\n remaining = delta;\n for (let i = this.index + 1; i < panels.length; i++) {\n const panel = panels[i];\n remaining = panel.getUpdatedSize(panel.initialReducedSize + remaining).remaining;\n if (remaining === 0) break;\n }\n delta = delta - remaining;\n\n // Apply the validated delta\n const current = panels[this.index];\n const next = panels[this.index + 1];\n\n // Auto-Auto\n if (current.size() === 'auto' && next?.size() === 'auto') {\n this.updateSize(delta, 'prev', true);\n panels[this.index + 1]?.updateSize(-delta, 'next', true);\n this.resizable.setAuto();\n return;\n }\n\n const autos = panels.filter(p => p.size() === 'auto');\n const N = autos.length;\n\n if (N > 0) {\n // Fixed-Auto\n if (current.size() !== 'auto' && next?.size() === 'auto') {\n this.updateSize(delta, 'prev');\n const input = -delta;\n console.log('auto 1');\n autos.forEach(auto => {\n const factor = auto === next ? (N - 1) / N : -1 / N;\n auto.updateSize(input * factor, 'next', true);\n });\n this.resizable.setAuto();\n return;\n }\n\n // Auto-Fixed\n if (current.size() === 'auto' && next?.size() !== 'auto') {\n next?.updateSize(-delta, 'next');\n const input = delta;\n\n console.log('auto 2');\n autos.forEach(auto => {\n const factor = auto === current ? (N - 1) / N : -1 / N;\n auto.updateSize(input * factor, 'prev', true);\n });\n this.resizable.setAuto();\n return;\n }\n }\n\n // Fixed-Fixed\n this.updateSize(delta, 'prev');\n panels[this.index + 1]?.updateSize(-delta, 'next');\n\n this.resizable.setAuto();\n }\n\n private getUpdatedSize(px: number): { remaining: number; value: number } {\n const v = Math.max(Math.min(px, this.localMinSize), this.localMaxSize);\n return { remaining: px - v, value: v };\n }\n\n updateSize(delta: number, direct: 'prev' | 'next', force = false) {\n if (this.size() === 'auto' && !force) {\n this.reducedSize = 0;\n this.updateFlex();\n return;\n }\n\n const requestedReducedSize = this.initialReducedSize - delta;\n const { remaining, value } = this.getUpdatedSize(requestedReducedSize);\n this.reducedSize = value;\n\n this.updateFlex();\n\n const actualDelta = this.initialReducedSize - this.reducedSize;\n const unabsorbed = delta - actualDelta;\n\n console.log('unabsorbed', this.index, actualDelta, unabsorbed);\n if (unabsorbed !== 0) {\n const nextIndex = direct === 'next' ? this.index + 1 : this.index - 1;\n const neighbor = this.resizable.panels()[nextIndex];\n\n if (neighbor && neighbor.size() === 'auto') {\n const autos = this.resizable.panels().filter(p => p.size() === 'auto');\n const N = autos.length;\n if (N > 0) {\n const baseShift = unabsorbed / N;\n const targets = new Map<NgbResizable, number>();\n autos.forEach(a => targets.set(a, 0));\n\n let remaining = unabsorbed;\n const neighborIdx = autos.findIndex(a => a.index === neighbor.index);\n\n // safe guard\n if (neighborIdx === -1) return;\n\n const relevantAutos =\n direct === 'next'\n ? autos.slice(neighborIdx)\n : autos.slice(0, neighborIdx + 1).reverse();\n\n for (const panel of relevantAutos) {\n const maxShrink = panel['localMinSize'] - panel.initialReducedSize;\n const maxGrow = panel.initialReducedSize - panel['localMaxSize'];\n\n const allowedShrink = -maxShrink;\n const allowedGrow = maxGrow;\n\n const consumed = Math.max(allowedShrink, Math.min(allowedGrow, remaining));\n\n targets.set(panel, consumed);\n remaining -= consumed;\n\n if (Math.abs(remaining) < 0.1) break;\n }\n\n // const tracks: number[] = [];\n autos.forEach(auto => {\n const t = targets.get(auto) || 0;\n const d = t - baseShift;\n // tracks.push(d);\n auto.updateSize(d, direct, true);\n });\n // console.log('auto 3 ', tracks, baseShift);\n }\n } else {\n neighbor?.updateSize(unabsorbed, direct);\n }\n }\n }\n\n private calculateSize(): string {\n const size = this.lSize();\n\n if (this.size() === 'auto' && this.reducedSize === 0) {\n return size as any;\n }\n\n const baseSize = typeof size === 'number' ? `${size}%` : size;\n\n if (this.reducedSize === 0) {\n return baseSize;\n }\n\n const sign = this.reducedSize > 0 ? '-' : '+';\n const absSize = Math.abs(this.reducedSize);\n return `calc(${baseSize} ${sign} ${absSize}px)`;\n }\n\n private updateFlex() {\n const size = this.calculateSize();\n this.updateElementSize(size || '0px');\n }\n\n updateElementSize(str: string) {\n this.str = str;\n if (this.resizable.direction() === 'horizontal') {\n this.el.nativeElement.style.width = this.str;\n } else {\n this.el.nativeElement.style.height = this.str;\n }\n }\n}\n\nexport function aliasResizable(resizable: typeof NgbResizable) {\n return { provide: NgbResizable, useExisting: resizable };\n}\n","/*\n * Public API Surface of resizable\n */\n\nexport * from './resizable';\nexport * from './resizable-group';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngbase-adk-resizable.mjs","sources":["../../../projects/adk/resizable/resizable-group.ts","../../../projects/adk/resizable/resizable.ts","../../../projects/adk/resizable/public-api.ts","../../../projects/adk/resizable/ngbase-adk-resizable.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n contentChildren,\n effect,\n forwardRef,\n inject,\n input,\n untracked,\n DOCUMENT,\n} from '@angular/core';\nimport { uniqueId } from '@ngbase/adk/utils';\nimport { NgbResizable } from './resizable';\n\n@Directive({\n selector: '[ngbResizableGroup]',\n exportAs: 'ngbResizableGroup',\n host: {\n '[attr.id]': 'id',\n },\n})\nexport class NgbResizableGroup {\n readonly document = inject(DOCUMENT);\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly panels = contentChildren<NgbResizable>(forwardRef(() => NgbResizable));\n\n readonly direction = input<'horizontal' | 'vertical'>('horizontal');\n\n readonly id = uniqueId();\n\n private overlayDiv?: HTMLDivElement;\n\n constructor() {\n effect(() => {\n const panels = this.panels();\n\n untracked(() => {\n // set the index of each panel first before initializing the drag\n panels.forEach((panel, index) => {\n panel.index = index;\n });\n panels.forEach((panel, index) => {\n // hide the last panel's drag handle\n panel.draggable.set(index !== panels.length - 1);\n if (panel.size() !== 'auto') {\n panel.handleDrag();\n }\n });\n // we need to called setAuto after all panels have been initialized\n // because the number of panels could have changed\n this.setAuto();\n });\n });\n }\n\n get w() {\n return this.el.nativeElement.clientWidth;\n }\n\n get h() {\n return this.el.nativeElement.clientHeight;\n }\n\n setAuto() {\n const panels = this.panels();\n let str = 'calc(100%';\n const autos = [];\n for (const panel of panels) {\n if (panel.size() !== 'auto') {\n str += panel.str ? ` - ${panel.str}` : '';\n } else {\n autos.push(panel);\n }\n }\n str += ')';\n if (autos.length > 1) {\n str = `calc(${str} / ${autos.length})`;\n }\n for (const auto of autos) {\n auto.lSize.set(str);\n auto.handleDrag();\n }\n }\n\n start() {\n const div = this.document.createElement('div');\n div.style.position = 'absolute';\n div.style.top = '0';\n div.style.left = '0';\n div.style.width = '100%';\n div.style.height = '100%';\n div.style.zIndex = '9999';\n div.style.cursor = 'ew-resize';\n this.document.body.appendChild(div);\n this.overlayDiv = div;\n\n this.panels().forEach(panel => {\n panel.onStart();\n });\n }\n\n end() {\n this.overlayDiv?.remove();\n this.panels().forEach(panel => {\n panel.onEnd();\n });\n }\n}\n\nexport function aliasResizableGroup(resizableGroup: typeof NgbResizableGroup) {\n return { provide: NgbResizableGroup, useExisting: resizableGroup };\n}\n","import {\n Directive,\n ElementRef,\n TemplateRef,\n ViewContainerRef,\n computed,\n effect,\n inject,\n input,\n linkedSignal,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { Drag, DragData } from '@ngbase/adk/drag';\nimport { NgbResizableGroup } from './resizable-group';\n\n@Directive({\n selector: '[ngbGutter]',\n exportAs: 'ngbGutter',\n hostDirectives: [Drag],\n host: {\n role: 'separator',\n '[attr.aria-valuemin]': 'resizable.min()',\n '[attr.aria-valuemax]': 'resizable.max()',\n },\n})\nexport class NgbGutter {\n readonly resizable = inject(NgbResizable);\n readonly drag = inject(Drag);\n\n constructor() {\n this.drag._lockAxis = linkedSignal(this.resizable.lockAxis);\n this.drag._dragBoundary = linkedSignal(() => `#${this.resizable.id}`);\n }\n}\n\n@Directive({\n selector: '[ngbResizable]',\n exportAs: 'ngbResizable',\n})\nexport class NgbResizable {\n // Dependencies\n readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly resizable = inject(NgbResizableGroup);\n readonly containerRef = inject(ViewContainerRef);\n readonly dragElement = viewChild('dragElement', { read: TemplateRef });\n readonly drag = viewChild(Drag);\n readonly id = this.resizable.id;\n readonly lockAxis = computed(() => (this.resizable.direction() === 'horizontal' ? 'x' : 'y'));\n\n // inputs\n readonly size = input<number | string>('auto');\n readonly min = input<number | string>(0);\n readonly max = input<number | string>();\n\n // State\n readonly lSize = linkedSignal({\n source: this.size,\n computation: size => (size !== 'auto' ? size : ''),\n });\n readonly draggable = signal(false);\n private reducedSize = 0;\n private localMinSize = Infinity;\n private localMaxSize = -Infinity;\n private lastReducedSize = 0;\n index = 0;\n str = '';\n\n constructor() {\n effect(() => {\n const size = this.size();\n untracked(() => {\n if (size !== 'auto') this.handleDrag();\n\n this.resizable.setAuto();\n });\n });\n\n // This effect is responsible for creating the gutter element\n effect(() => {\n const cf = this.containerRef;\n if (this.draggable() && this.size()) {\n if (cf.length === 0) {\n untracked(() => cf.createEmbeddedView(this.dragElement()!));\n }\n } else {\n cf.clear();\n }\n });\n\n // This effect is responsible for handling the drag events\n effect(cleanup => {\n const drag = this.drag();\n\n if (!drag) return;\n\n untracked(() => {\n const sub = drag.events.subscribe((data: DragData) => {\n data.event?.preventDefault();\n\n requestAnimationFrame(() => this.onDrag(data));\n });\n cleanup(() => sub.unsubscribe());\n });\n });\n }\n\n // get w() {\n // return this.el.nativeElement.clientWidth;\n // }\n\n // get h() {\n // return this.el.nativeElement.clientHeight;\n // }\n\n cSize() {\n return this.resizable.direction() === 'horizontal'\n ? this.el.nativeElement.offsetWidth\n : this.el.nativeElement.offsetHeight;\n }\n\n onStart() {\n const cSize = this.cSize();\n const minSize = this.getSize(this.min());\n this.localMinSize = cSize + this.reducedSize - minSize;\n if (this.max()) {\n const maxSize = this.getSize(this.max());\n this.localMaxSize = cSize + this.reducedSize - maxSize;\n }\n // console.log(`onStart ${this.index}`, this.min(), this.localMinSize, this.localMaxSize);\n }\n\n onEnd() {\n this.localMinSize = Infinity;\n this.localMaxSize = -Infinity;\n this.lastReducedSize = this.reducedSize;\n }\n\n private getSize(size?: number | string): number {\n if (!size) return 0;\n\n const minValue = size;\n if (typeof minValue === 'number') {\n // If number, treat as percentage\n return (\n (this.resizable.direction() === 'horizontal' ? this.resizable.w : this.resizable.h) *\n (minValue / 100)\n );\n }\n\n // Handle pixel values\n const pixelMatch = minValue?.toString().match(/(\\d+)px/);\n if (pixelMatch) {\n return parseInt(pixelMatch[1], 10);\n }\n\n // Handle percentage values provided as string\n const percentMatch = minValue?.toString().match(/(\\d+)%/);\n if (percentMatch) {\n return (\n (this.resizable.direction() === 'horizontal' ? this.resizable.w : this.resizable.h) *\n (parseInt(percentMatch[1], 10) / 100)\n );\n }\n\n return 0;\n }\n\n onDrag(data: DragData): void {\n if (data.type === 'start') {\n this.resizable.start();\n }\n\n // We have to call end method without calling handleDrag to avoid layout thrashing\n if (data.type === 'end') {\n this.resizable.end();\n } else {\n this.handleDrag(data);\n }\n }\n\n handleDrag(event = { x: 0, y: 0 } as DragData) {\n const isHorizontal = this.resizable.direction() === 'horizontal';\n\n let delta = isHorizontal ? event.x : event.y;\n delta -= this.lastReducedSize;\n\n const panels = this.resizable.panels();\n\n let remaining = -delta;\n for (let i = this.index; i >= 0; i--) {\n const panel = panels[i];\n remaining = panel.getUpdatedSize(remaining).remaining;\n if (remaining === 0) {\n break;\n }\n }\n delta = delta + remaining;\n remaining = delta;\n for (let i = this.index + 1; i < panels.length; i++) {\n const panel = panels[i];\n remaining = panel.getUpdatedSize(remaining).remaining;\n if (remaining === 0) {\n break;\n }\n }\n delta = delta - remaining;\n\n const current = panels[this.index];\n current.updateSize(delta, 'both');\n }\n\n private getUpdatedSize(px: number): { remaining: number; value: number } {\n const v = Math.max(Math.min(px, this.localMinSize), this.localMaxSize);\n return { remaining: px - v, value: v };\n }\n\n updateSize(px: number, direct: 'both' | 'prev' | 'next') {\n const prevSize = -px;\n const { remaining, value } = this.getUpdatedSize(prevSize);\n this.reducedSize = value;\n\n this.updateFlex();\n const isSame = prevSize !== this.reducedSize;\n\n const v = direct === 'both' ? px : remaining;\n\n if ((isSame && direct === 'next') || direct === 'both') {\n // console.log(`updateSize ${this.index}`, this.reducedSize, px, value, v);\n const next = this.resizable.panels()[this.index + 1];\n next?.updateSize(-v, 'next');\n }\n if (isSame && (direct === 'prev' || direct === 'both')) {\n const prev = this.resizable.panels()[this.index - 1];\n prev?.updateSize(v, 'prev');\n }\n }\n\n private calculateSize(): string {\n const size = this.lSize();\n\n const baseSize = typeof size === 'number' ? `${size}%` : size;\n\n if (this.reducedSize === 0) {\n return baseSize;\n }\n\n return `calc(${baseSize} - ${this.reducedSize}px)`;\n }\n\n private updateFlex() {\n const size = this.calculateSize();\n this.updateElementSize(size || '0px');\n }\n\n updateElementSize(str: string) {\n this.str = str;\n if (this.resizable.direction() === 'horizontal') {\n this.el.nativeElement.style.width = this.str;\n } else {\n this.el.nativeElement.style.height = this.str;\n }\n }\n}\n\nexport function aliasResizable(resizable: typeof NgbResizable) {\n return { provide: NgbResizable, useExisting: resizable };\n}\n","/*\n * Public API Surface of resizable\n */\n\nexport * from './resizable';\nexport * from './resizable-group';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAqBa,iBAAiB,CAAA;AAW5B,IAAA,WAAA,GAAA;AAVS,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;QAChD,IAAA,CAAA,MAAM,GAAG,eAAe,CAAe,UAAU,CAAC,MAAM,YAAY,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEtE,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAA4B,YAAY,qDAAC;QAE1D,IAAA,CAAA,EAAE,GAAG,QAAQ,EAAE;QAKtB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAE5B,SAAS,CAAC,MAAK;;gBAEb,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC9B,oBAAA,KAAK,CAAC,KAAK,GAAG,KAAK;AACrB,gBAAA,CAAC,CAAC;gBACF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;;AAE9B,oBAAA,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAChD,oBAAA,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;wBAC3B,KAAK,CAAC,UAAU,EAAE;oBACpB;AACF,gBAAA,CAAC,CAAC;;;gBAGF,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,CAAC,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,WAAW;IAC1C;AAEA,IAAA,IAAI,CAAC,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY;IAC3C;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,GAAG,GAAG,WAAW;QACrB,MAAM,KAAK,GAAG,EAAE;AAChB,QAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,YAAA,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE;AAC3B,gBAAA,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAA,GAAA,EAAM,KAAK,CAAC,GAAG,CAAA,CAAE,GAAG,EAAE;YAC3C;iBAAO;AACL,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;YACnB;QACF;QACA,GAAG,IAAI,GAAG;AACV,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,GAAG,GAAG,QAAQ,GAAG,CAAA,GAAA,EAAM,KAAK,CAAC,MAAM,GAAG;QACxC;AACA,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YACnB,IAAI,CAAC,UAAU,EAAE;QACnB;IACF;IAEA,KAAK,GAAA;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9C,QAAA,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AAC/B,QAAA,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG;AACnB,QAAA,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG;AACpB,QAAA,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM;AACxB,QAAA,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AACzB,QAAA,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM;AACzB,QAAA,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,WAAW;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG;QAErB,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,IAAG;YAC5B,KAAK,CAAC,OAAO,EAAE;AACjB,QAAA,CAAC,CAAC;IACJ;IAEA,GAAG,GAAA;AACD,QAAA,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,KAAK,IAAG;YAC5B,KAAK,CAAC,KAAK,EAAE;AACf,QAAA,CAAC,CAAC;IACJ;8GArFW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,qTAGqC,YAAY,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAHlE,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAP7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,qBAAqB;AAC/B,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,WAAW,EAAE,IAAI;AAClB,qBAAA;AACF,iBAAA;AAIiD,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,UAAU,CAAC,MAAM,YAAY,CAAC,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AAqF1E,SAAU,mBAAmB,CAAC,cAAwC,EAAA;IAC1E,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,cAAc,EAAE;AACpE;;MCpFa,SAAS,CAAA;AAIpB,IAAA,WAAA,GAAA;AAHS,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;AAChC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;AAG1B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,qDAAC;AAC3D,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC,MAAM,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,EAAE,CAAA,CAAE,yDAAC;IACvE;8GAPW,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,WAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,cAAA,EAAA,CAAA,EAAA,SAAA,EAAA,EAAA,CAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAVrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;oBACrB,cAAc,EAAE,CAAC,IAAI,CAAC;AACtB,oBAAA,IAAI,EAAE;AACJ,wBAAA,IAAI,EAAE,WAAW;AACjB,wBAAA,sBAAsB,EAAE,iBAAiB;AACzC,wBAAA,sBAAsB,EAAE,iBAAiB;AAC1C,qBAAA;AACF,iBAAA;;MAeY,YAAY,CAAA;AA4BvB,IAAA,WAAA,GAAA;;AA1BS,QAAA,IAAA,CAAA,EAAE,GAAG,MAAM,CAA0B,UAAU,CAAC;AAChD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACvC,IAAA,CAAA,WAAW,GAAG,SAAS,CAAC,aAAa,wDAAI,IAAI,EAAE,WAAW,EAAA,CAAG;AAC7D,QAAA,IAAA,CAAA,IAAI,GAAG,SAAS,CAAC,IAAI,gDAAC;AACtB,QAAA,IAAA,CAAA,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE;QACtB,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGpF,QAAA,IAAA,CAAA,IAAI,GAAG,KAAK,CAAkB,MAAM,gDAAC;AACrC,QAAA,IAAA,CAAA,GAAG,GAAG,KAAK,CAAkB,CAAC,+CAAC;QAC/B,IAAA,CAAA,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAmB;;AAG9B,QAAA,IAAA,CAAA,KAAK,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,OAAA,EAAA,GAAA,EAAA,CAAA,EAC3B,MAAM,EAAE,IAAI,CAAC,IAAI;AACjB,YAAA,WAAW,EAAE,IAAI,KAAK,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC,GAClD;AACO,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,KAAK,qDAAC;QAC1B,IAAA,CAAA,WAAW,GAAG,CAAC;QACf,IAAA,CAAA,YAAY,GAAG,QAAQ;QACvB,IAAA,CAAA,YAAY,GAAG,CAAC,QAAQ;QACxB,IAAA,CAAA,eAAe,GAAG,CAAC;QAC3B,IAAA,CAAA,KAAK,GAAG,CAAC;QACT,IAAA,CAAA,GAAG,GAAG,EAAE;QAGN,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,SAAS,CAAC,MAAK;gBACb,IAAI,IAAI,KAAK,MAAM;oBAAE,IAAI,CAAC,UAAU,EAAE;AAEtC,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;AAC1B,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY;YAC5B,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AACnC,gBAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,oBAAA,SAAS,CAAC,MAAM,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAG,CAAC,CAAC;gBAC7D;YACF;iBAAO;gBACL,EAAE,CAAC,KAAK,EAAE;YACZ;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,OAAO,IAAG;AACf,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAExB,YAAA,IAAI,CAAC,IAAI;gBAAE;YAEX,SAAS,CAAC,MAAK;gBACb,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAc,KAAI;AACnD,oBAAA,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE;oBAE5B,qBAAqB,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAChD,gBAAA,CAAC,CAAC;gBACF,OAAO,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;AAClC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;;;;;;IAUA,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK;AACpC,cAAE,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC;cACtB,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,YAAY;IACxC;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,OAAO;AACtD,QAAA,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACxC,IAAI,CAAC,YAAY,GAAG,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,OAAO;QACxD;;IAEF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,YAAY,GAAG,QAAQ;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,QAAQ;AAC7B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW;IACzC;AAEQ,IAAA,OAAO,CAAC,IAAsB,EAAA;AACpC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,CAAC;QAEnB,MAAM,QAAQ,GAAG,IAAI;AACrB,QAAA,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;;YAEhC,QACE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAClF,iBAAC,QAAQ,GAAG,GAAG,CAAC;QAEpB;;QAGA,MAAM,UAAU,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;QACxD,IAAI,UAAU,EAAE;YACd,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpC;;QAGA,MAAM,YAAY,GAAG,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;QACzD,IAAI,YAAY,EAAE;YAChB,QACE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAClF,iBAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;QAEzC;AAEA,QAAA,OAAO,CAAC;IACV;AAEA,IAAA,MAAM,CAAC,IAAc,EAAA;AACnB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AACzB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QACxB;;AAGA,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE;AACvB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;QACtB;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QACvB;IACF;IAEA,UAAU,CAAC,KAAA,GAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAc,EAAA;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,YAAY;AAEhE,QAAA,IAAI,KAAK,GAAG,YAAY,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAC5C,QAAA,KAAK,IAAI,IAAI,CAAC,eAAe;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AAEtC,QAAA,IAAI,SAAS,GAAG,CAAC,KAAK;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;YACvB,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS;AACrD,YAAA,IAAI,SAAS,KAAK,CAAC,EAAE;gBACnB;YACF;QACF;AACA,QAAA,KAAK,GAAG,KAAK,GAAG,SAAS;QACzB,SAAS,GAAG,KAAK;AACjB,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnD,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;YACvB,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS;AACrD,YAAA,IAAI,SAAS,KAAK,CAAC,EAAE;gBACnB;YACF;QACF;AACA,QAAA,KAAK,GAAG,KAAK,GAAG,SAAS;QAEzB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,QAAA,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;IACnC;AAEQ,IAAA,cAAc,CAAC,EAAU,EAAA;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;QACtE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;IACxC;IAEA,UAAU,CAAC,EAAU,EAAE,MAAgC,EAAA;AACrD,QAAA,MAAM,QAAQ,GAAG,CAAC,EAAE;AACpB,QAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC1D,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;QAExB,IAAI,CAAC,UAAU,EAAE;AACjB,QAAA,MAAM,MAAM,GAAG,QAAQ,KAAK,IAAI,CAAC,WAAW;AAE5C,QAAA,MAAM,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,EAAE,GAAG,SAAS;AAE5C,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE;;AAEtD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACpD,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAC9B;AACA,QAAA,IAAI,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,EAAE;AACtD,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACpD,YAAA,IAAI,EAAE,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC;QAC7B;IACF;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;AAEzB,QAAA,MAAM,QAAQ,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG,GAAG,IAAI;AAE7D,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;AAC1B,YAAA,OAAO,QAAQ;QACjB;AAEA,QAAA,OAAO,QAAQ,QAAQ,CAAA,GAAA,EAAM,IAAI,CAAC,WAAW,KAAK;IACpD;IAEQ,UAAU,GAAA;AAChB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,KAAK,CAAC;IACvC;AAEA,IAAA,iBAAiB,CAAC,GAAW,EAAA;AAC3B,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;QACd,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,YAAY,EAAE;AAC/C,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG;QAC9C;aAAO;AACL,YAAA,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG;QAC/C;IACF;8GA9NW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAKiC,WAAW,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACzC,IAAI,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FANnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,cAAc;AACzB,iBAAA;AAMkC,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,aAAa,OAAE,EAAE,IAAI,EAAE,WAAW,EAAE,gFAC3C,IAAI,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AA2N1B,SAAU,cAAc,CAAC,SAA8B,EAAA;IAC3D,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE;AAC1D;;AC5QA;;AAEG;;ACFH;;AAEG;;;;"}
@@ -39,10 +39,10 @@ class NgbScrollBar {
39
39
  }
40
40
  });
41
41
  }
42
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbScrollBar, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
43
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.0", type: NgbScrollBar, isStandalone: true, selector: "[ngbScrollBar]", inputs: { ngbScrollBar: { classPropertyName: "ngbScrollBar", publicName: "ngbScrollBar", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "style": "size()", "attr.data-visible": "visible()", "attr.data-active": "scrollArea.isDragging()", "hidden": "!show()" }, styleAttribute: "position: absolute; cursor: pointer; z-index: 100;" }, hostDirectives: [{ directive: i1.Drag }], ngImport: i0 }); }
42
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbScrollBar, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
43
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.2", type: NgbScrollBar, isStandalone: true, selector: "[ngbScrollBar]", inputs: { ngbScrollBar: { classPropertyName: "ngbScrollBar", publicName: "ngbScrollBar", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "style": "size()", "attr.data-visible": "visible()", "attr.data-active": "scrollArea.isDragging()", "hidden": "!show()" }, styleAttribute: "position: absolute; cursor: pointer; z-index: 100;" }, hostDirectives: [{ directive: i1.Drag }], ngImport: i0 }); }
44
44
  }
45
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbScrollBar, decorators: [{
45
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbScrollBar, decorators: [{
46
46
  type: Directive,
47
47
  args: [{
48
48
  selector: '[ngbScrollBar]',
@@ -198,8 +198,8 @@ class NgbScrollArea {
198
198
  const value = Math.max(0, Math.min(newScrollLeft, balance));
199
199
  this.scrollAreaViewport().nativeElement.scrollLeft = value;
200
200
  }
201
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbScrollArea, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
202
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.0", type: NgbScrollArea, isStandalone: true, selector: "[ngbScrollArea]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "hideDelay", isSignal: true, isRequired: false, transformFunction: null }, alwaysShow: { classPropertyName: "alwaysShow", publicName: "alwaysShow", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "scrollbars", predicate: NgbScrollBar, isSignal: true }], viewQueries: [{ propertyName: "scrollAreaViewport", first: true, predicate: ["scrollAreaViewport"], descendants: true, isSignal: true }], ngImport: i0, template: `
201
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbScrollArea, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
202
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.2", type: NgbScrollArea, isStandalone: true, selector: "[ngbScrollArea]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "hideDelay", isSignal: true, isRequired: false, transformFunction: null }, alwaysShow: { classPropertyName: "alwaysShow", publicName: "alwaysShow", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "scrollbars", predicate: NgbScrollBar, isSignal: true }], viewQueries: [{ propertyName: "scrollAreaViewport", first: true, predicate: ["scrollAreaViewport"], descendants: true, isSignal: true }], ngImport: i0, template: `
203
203
  <div class="scroll-area-viewport hide-scrollbar" #scrollAreaViewport>
204
204
  <div class="scroll-area-content" style="height: 100%;">
205
205
  <ng-content></ng-content>
@@ -214,7 +214,7 @@ class NgbScrollArea {
214
214
  }
215
215
  `, isInline: true, styles: [":host{position:relative;width:100%;height:100%;overflow:hidden;display:flex;flex-direction:column;min-height:0}.scroll-area-viewport{width:100%;height:100%;overflow:auto;flex:1;min-height:0}.scroll-area-viewport.hide-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.scroll-area-viewport.hide-scrollbar::-webkit-scrollbar{display:none}.scroll-area-content{min-height:0;min-width:fit-content}.scroll-area-corner{position:absolute;right:0;bottom:0;width:8px;height:8px;background:#0000004d;border-radius:4px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
216
216
  }
217
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.0", ngImport: i0, type: NgbScrollArea, decorators: [{
217
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.2", ngImport: i0, type: NgbScrollArea, decorators: [{
218
218
  type: Component,
219
219
  args: [{ selector: '[ngbScrollArea]', changeDetection: ChangeDetectionStrategy.OnPush, template: `
220
220
  <div class="scroll-area-viewport hide-scrollbar" #scrollAreaViewport>