@mintplayer/ng-bootstrap 21.12.12 → 21.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"mintplayer-ng-bootstrap-resizable.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/resizable/src/providers/resizable.provider.ts","../../../../libs/mintplayer-ng-bootstrap/resizable/src/resize-glyph/resize-glyph.directive.ts","../../../../libs/mintplayer-ng-bootstrap/resizable/src/resizable/resizable.component.ts","../../../../libs/mintplayer-ng-bootstrap/resizable/src/resizable/resizable.component.html","../../../../libs/mintplayer-ng-bootstrap/resizable/mintplayer-ng-bootstrap-resizable.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport type { BsResizableComponent } from \"../resizable/resizable.component\";\n\nexport const RESIZABLE = new InjectionToken<BsResizableComponent>('Resizable');","import { Directive, effect, inject, input, signal, forwardRef } from '@angular/core';\nimport { Position } from '@mintplayer/ng-bootstrap';\nimport type { BsResizableComponent } from '../resizable/resizable.component';\nimport { ResizeAction } from '../interfaces/resize-action';\nimport { PointerData } from '../interfaces/pointer-data';\nimport { RESIZABLE } from '../providers/resizable.provider';\n\n@Directive({\n selector: '[bsResizeGlyph]',\n host: {\n '[class]': 'positions()',\n '[class.glyph]': 'true',\n '[class.active]': 'activeClass()',\n '(mousedown)': 'onMouseDown($event)',\n '(touchstart)': 'onTouchStart($event)',\n '(document:mousemove)': 'onMouseMove($event)',\n '(touchmove)': 'onTouchMove($event)',\n '(document:mouseup)': 'onMouseUp($event)',\n '(touchend)': 'onTouchEnd($event)',\n },\n})\nexport class BsResizeGlyphDirective {\n\n // Can't use typed DI because of the `import type`\n private readonly resizable: BsResizableComponent = inject(RESIZABLE);\n\n constructor() {\n effect(() => {\n const value = this.bsResizeGlyph();\n this.positions.set(value.join(' '));\n });\n }\n\n positions = signal('');\n activeClass = signal(false);\n\n readonly bsResizeGlyph = input<Position[]>([]);\n\n onMouseDown(ev: MouseEvent) {\n ev.preventDefault();\n this.onPointerDown()\n }\n\n onTouchStart(ev: TouchEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n this.onPointerDown();\n }\n\n onMouseMove(ev: MouseEvent) {\n this.onPointerMove({ clientX: ev.clientX, clientY: ev.clientY, preventDefault: () => ev.preventDefault() });\n }\n\n onTouchMove(ev: TouchEvent) {\n if (ev.touches.length === 1) {\n ev.preventDefault();\n ev.stopPropagation();\n this.onPointerMove({ clientX: ev.touches[0].clientX, clientY: ev.touches[0].clientY, preventDefault: () => ev.preventDefault() });\n }\n }\n\n onMouseUp(ev: Event) {\n this.onPointerUp();\n }\n\n onTouchEnd(ev: TouchEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n this.onPointerUp();\n }\n\n onPointerDown() {\n let action: ResizeAction = {\n positioning: this.resizable.positioning()\n };\n const rect = this.resizable.element.nativeElement.getBoundingClientRect();\n const styles = window.getComputedStyle(this.resizable.element.nativeElement);\n\n const marginLeft = (this.resizable.positioning() === 'absolute') ? undefined : parseFloat(styles.marginLeft.slice(0, -2));\n const marginRight = (this.resizable.positioning() === 'absolute') ? undefined : parseFloat(styles.marginRight.slice(0, -2));\n const marginTop = (this.resizable.positioning() === 'absolute') ? undefined : parseFloat(styles.marginTop.slice(0, -2));\n const marginBottom = (this.resizable.positioning() === 'absolute') ? undefined : parseFloat(styles.marginBottom.slice(0, -2));\n\n\n if (this.positions()?.includes('start')) {\n action = {\n ...action,\n end: {\n edge: rect.right,\n size: rect.width,\n margin: marginRight,\n dragMargin: marginLeft\n },\n };\n }\n if (this.positions()?.includes('end')) {\n action = {\n ...action,\n start: {\n edge: rect.left,\n size: rect.width,\n margin: marginLeft,\n dragMargin: marginRight\n },\n };\n }\n if (this.positions()?.includes('top')) {\n action = {\n ...action,\n bottom: {\n edge: rect.bottom,\n size: rect.height,\n margin: marginBottom,\n dragMargin: marginTop\n },\n };\n }\n if (this.positions()?.includes('bottom')) {\n action = {\n ...action,\n top: {\n edge: rect.top,\n size: rect.height,\n margin: marginTop,\n dragMargin: marginBottom\n },\n };\n }\n\n this.resizable.resizeAction = action;\n this.activeClass.set(true);\n }\n\n private isBusy = false;\n onPointerMove(ev: PointerData) {\n if (this.resizable.resizeAction && !this.isBusy) {\n ev.preventDefault();\n this.isBusy = true;\n const rct = this.resizable.element.nativeElement.getBoundingClientRect();\n if (this.resizable.resizeAction.start && this.positions()?.includes('end')) {\n // Right glyph\n const x = (ev.clientX < rct.left + 10) ? rct.left + 10 : ev.clientX;\n switch (this.resizable.positioning()) {\n case 'inline': {\n const initalMargin = this.resizable.marginRight() ?? 0;\n this.resizable.marginRight.set(initalMargin - (x - rct.right));\n } break;\n case 'absolute': {\n this.resizable.width.set(x - rct.left);\n } break;\n }\n } else if (this.resizable.resizeAction.end && this.positions()?.includes('start')) {\n // Left glyph\n const x = (ev.clientX > rct.right - 10) ? rct.right - 10 : ev.clientX;\n switch (this.resizable.positioning()) {\n case 'inline': {\n const initalMargin = this.resizable.marginLeft() ?? 0;\n this.resizable.marginLeft.set(initalMargin + x - rct.left);\n } break;\n case 'absolute': {\n this.resizable.left.set(x);\n this.resizable.width.set(this.resizable.resizeAction.end.edge - x);\n } break;\n }\n }\n\n if (this.resizable.resizeAction.top && this.positions()?.includes('bottom')) {\n // Bottom glyph\n const y = (ev.clientY < rct.top + 10) ? rct.top + 10 : ev.clientY;\n switch (this.resizable.positioning()) {\n case 'inline': {\n const initalMargin = this.resizable.marginBottom() ?? 0;\n this.resizable.height.set(y - rct.top);\n this.resizable.marginBottom.set(initalMargin - (y - rct.bottom));\n } break;\n case 'absolute': {\n this.resizable.height.set(y - rct.top);\n } break;\n }\n } else if (this.resizable.resizeAction.bottom && this.positions()?.includes('top')) {\n // Top glyph\n const y = (ev.clientY > rct.bottom - 10) ? rct.bottom - 10 : ev.clientY;\n switch (this.resizable.positioning()) {\n case 'inline': {\n const initalMargin = this.resizable.marginTop() ?? 0;\n this.resizable.height.set(rct.bottom - y);\n this.resizable.marginTop.set(initalMargin + y - rct.top);\n } break;\n case 'absolute': {\n this.resizable.top.set(y);\n this.resizable.height.set(this.resizable.resizeAction.bottom.edge - y);\n } break;\n }\n }\n this.isBusy = false;\n }\n }\n \n onPointerUp() {\n this.resizable.resizeAction = undefined;\n this.activeClass.set(false);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, forwardRef, signal } from '@angular/core';\nimport { ResizeAction } from '../interfaces/resize-action';\nimport { RESIZABLE } from '../providers/resizable.provider';\nimport { ResizablePositioning } from '../types/positioning';\nimport { PresetPosition } from '../interfaces/preset-position';\nimport { BsResizeGlyphDirective } from '../resize-glyph/resize-glyph.directive';\n\n@Component({\n selector: 'bs-resizable',\n templateUrl: './resizable.component.html',\n styleUrls: ['./resizable.component.scss'],\n imports: [BsResizeGlyphDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: RESIZABLE, useExisting: forwardRef(() => BsResizableComponent) }\n ],\n host: {\n '[style.margin-left.px]': 'marginLeft()',\n '[style.margin-right.px]': 'marginRight()',\n '[style.margin-top.px]': 'marginTop()',\n '[style.margin-bottom.px]': 'marginBottom()',\n '[style.width.px]': 'width()',\n '[style.height.px]': 'height()',\n '[style.left.px]': 'left()',\n '[style.top.px]': 'top()',\n '[class.d-block]': 'true',\n '[class.border]': 'true',\n '[class]': 'hostPosition()',\n },\n})\nexport class BsResizableComponent {\n element = inject(ElementRef<HTMLElement>);\n\n resizeAction?: ResizeAction;\n positioning = input<ResizablePositioning>('inline');\n\n hostPosition = computed(() => {\n const positioning = this.positioning();\n switch (positioning) {\n case 'absolute': return 'position-absolute';\n case 'inline': return 'position-relative';\n }\n });\n\n wrapperPosition = computed(() => {\n const positioning = this.positioning();\n switch (positioning) {\n case 'absolute': return ['position-relative', 'h-100'];\n case 'inline': return [];\n }\n });\n\n readonly presetPosition = input<PresetPosition | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const value = this.presetPosition();\n if (value) {\n if (this.positioning() === 'inline') {\n throw 'presetPosition currently only supported in absolute positioning';\n }\n this.width.set(value.width);\n this.height.set(value.height);\n this.left.set(value.left);\n this.top.set(value.top);\n this.marginTop.set(undefined);\n this.marginBottom.set(undefined);\n this.marginLeft.set(undefined);\n this.marginRight.set(undefined);\n }\n });\n }\n\n marginLeft = signal<number | undefined>(undefined);\n marginRight = signal<number | undefined>(undefined);\n marginTop = signal<number | undefined>(undefined);\n marginBottom = signal<number | undefined>(undefined);\n width = signal<number | undefined>(undefined);\n height = signal<number | undefined>(undefined);\n left = signal<number | undefined>(undefined);\n top = signal<number | undefined>(undefined);\n}\n","<div [class]=\"wrapperPosition()\" class=\"h-100\">\n <div class=\"cursor-nw-resize\" [bsResizeGlyph]=\"['top', 'start']\"></div>\n <div class=\"cursor-n-resize\" [bsResizeGlyph]=\"['top']\"></div>\n <div class=\"cursor-ne-resize\" [bsResizeGlyph]=\"['top', 'end']\"></div>\n <div class=\"cursor-e-resize\" [bsResizeGlyph]=\"['end']\"></div>\n <div class=\"cursor-se-resize\" [bsResizeGlyph]=\"['bottom', 'end']\"></div>\n <div class=\"cursor-s-resize\" [bsResizeGlyph]=\"['bottom']\"></div>\n <div class=\"cursor-sw-resize\" [bsResizeGlyph]=\"['bottom', 'start']\"></div>\n <div class=\"cursor-w-resize\" [bsResizeGlyph]=\"['start']\"></div>\n <ng-content></ng-content>\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mintplayer-ng-bootstrap-resizable.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/resizable/src/providers/resizable.provider.ts","../../../../libs/mintplayer-ng-bootstrap/resizable/src/resize-glyph/resize-glyph.directive.ts","../../../../libs/mintplayer-ng-bootstrap/resizable/src/resizable/resizable.component.ts","../../../../libs/mintplayer-ng-bootstrap/resizable/src/resizable/resizable.component.html","../../../../libs/mintplayer-ng-bootstrap/resizable/mintplayer-ng-bootstrap-resizable.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport type { BsResizableComponent } from \"../resizable/resizable.component\";\n\nexport const RESIZABLE = new InjectionToken<BsResizableComponent>('Resizable');","import { Directive, effect, inject, input, signal, forwardRef } from '@angular/core';\nimport { Position } from '@mintplayer/ng-bootstrap';\nimport type { BsResizableComponent } from '../resizable/resizable.component';\nimport { ResizeAction } from '../interfaces/resize-action';\nimport { PointerData } from '../interfaces/pointer-data';\nimport { RESIZABLE } from '../providers/resizable.provider';\n\n@Directive({\n selector: '[bsResizeGlyph]',\n host: {\n '[class]': 'positions()',\n '[class.glyph]': 'true',\n '[class.active]': 'activeClass()',\n '(mousedown)': 'onMouseDown($event)',\n '(touchstart)': 'onTouchStart($event)',\n '(document:mousemove)': 'onMouseMove($event)',\n '(touchmove)': 'onTouchMove($event)',\n '(document:mouseup)': 'onMouseUp($event)',\n '(touchend)': 'onTouchEnd($event)',\n },\n})\nexport class BsResizeGlyphDirective {\n\n // Can't use typed DI because of the `import type`\n private readonly resizable: BsResizableComponent = inject(RESIZABLE);\n\n constructor() {\n effect(() => {\n const value = this.bsResizeGlyph();\n this.positions.set(value.join(' '));\n });\n }\n\n positions = signal('');\n activeClass = signal(false);\n\n readonly bsResizeGlyph = input<Position[]>([]);\n\n onMouseDown(ev: MouseEvent) {\n ev.preventDefault();\n this.onPointerDown()\n }\n\n onTouchStart(ev: TouchEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n this.onPointerDown();\n }\n\n onMouseMove(ev: MouseEvent) {\n this.onPointerMove({ clientX: ev.clientX, clientY: ev.clientY, preventDefault: () => ev.preventDefault() });\n }\n\n onTouchMove(ev: TouchEvent) {\n if (ev.touches.length === 1) {\n ev.preventDefault();\n ev.stopPropagation();\n this.onPointerMove({ clientX: ev.touches[0].clientX, clientY: ev.touches[0].clientY, preventDefault: () => ev.preventDefault() });\n }\n }\n\n onMouseUp(ev: Event) {\n this.onPointerUp();\n }\n\n onTouchEnd(ev: TouchEvent) {\n ev.preventDefault();\n ev.stopPropagation();\n this.onPointerUp();\n }\n\n onPointerDown() {\n let action: ResizeAction = {\n positioning: this.resizable.positioning()\n };\n const rect = this.resizable.element.nativeElement.getBoundingClientRect();\n const styles = window.getComputedStyle(this.resizable.element.nativeElement);\n\n const marginLeft = (this.resizable.positioning() === 'absolute') ? undefined : parseFloat(styles.marginLeft.slice(0, -2));\n const marginRight = (this.resizable.positioning() === 'absolute') ? undefined : parseFloat(styles.marginRight.slice(0, -2));\n const marginTop = (this.resizable.positioning() === 'absolute') ? undefined : parseFloat(styles.marginTop.slice(0, -2));\n const marginBottom = (this.resizable.positioning() === 'absolute') ? undefined : parseFloat(styles.marginBottom.slice(0, -2));\n\n\n if (this.positions()?.includes('start')) {\n action = {\n ...action,\n end: {\n edge: rect.right,\n size: rect.width,\n margin: marginRight,\n dragMargin: marginLeft\n },\n };\n }\n if (this.positions()?.includes('end')) {\n action = {\n ...action,\n start: {\n edge: rect.left,\n size: rect.width,\n margin: marginLeft,\n dragMargin: marginRight\n },\n };\n }\n if (this.positions()?.includes('top')) {\n action = {\n ...action,\n bottom: {\n edge: rect.bottom,\n size: rect.height,\n margin: marginBottom,\n dragMargin: marginTop\n },\n };\n }\n if (this.positions()?.includes('bottom')) {\n action = {\n ...action,\n top: {\n edge: rect.top,\n size: rect.height,\n margin: marginTop,\n dragMargin: marginBottom\n },\n };\n }\n\n this.resizable.resizeAction = action;\n this.activeClass.set(true);\n }\n\n private isBusy = false;\n onPointerMove(ev: PointerData) {\n if (this.resizable.resizeAction && !this.isBusy) {\n ev.preventDefault();\n this.isBusy = true;\n const action = this.resizable.resizeAction;\n // Note: the live bounding rect must NOT be used in the size/margin math.\n // Reading it per-frame creates a feedback loop when content inside the\n // host changes layout during the drag (e.g. a child component that\n // shows/hides items in response to width). Use the captured `action`\n // values from pointer-down — they're stable for the duration of the drag.\n\n if (action.start && this.positions()?.includes('end')) {\n // Right glyph — fixed left edge\n const initialLeft = action.start.edge;\n const initialRight = action.start.edge + action.start.size;\n const x = (ev.clientX < initialLeft + 10) ? initialLeft + 10 : ev.clientX;\n switch (this.resizable.positioning()) {\n case 'inline': {\n const initialMargin = action.start.dragMargin ?? 0;\n this.resizable.marginRight.set(initialMargin + (initialRight - x));\n } break;\n case 'absolute': {\n this.resizable.width.set(x - initialLeft);\n } break;\n }\n } else if (action.end && this.positions()?.includes('start')) {\n // Left glyph — fixed right edge\n const initialRight = action.end.edge;\n const initialLeft = action.end.edge - action.end.size;\n const x = (ev.clientX > initialRight - 10) ? initialRight - 10 : ev.clientX;\n switch (this.resizable.positioning()) {\n case 'inline': {\n const initialMargin = action.end.dragMargin ?? 0;\n this.resizable.marginLeft.set(initialMargin + (x - initialLeft));\n } break;\n case 'absolute': {\n this.resizable.left.set(x);\n this.resizable.width.set(initialRight - x);\n } break;\n }\n }\n\n if (action.top && this.positions()?.includes('bottom')) {\n // Bottom glyph — fixed top edge. action.top.edge = captured rect.top\n const initialTop = action.top.edge;\n const initialBottom = action.top.edge + action.top.size;\n const y = (ev.clientY < initialTop + 10) ? initialTop + 10 : ev.clientY;\n switch (this.resizable.positioning()) {\n case 'inline': {\n const initialMargin = action.top.dragMargin ?? 0;\n this.resizable.height.set(y - initialTop);\n this.resizable.marginBottom.set(initialMargin + (initialBottom - y));\n } break;\n case 'absolute': {\n this.resizable.height.set(y - initialTop);\n } break;\n }\n } else if (action.bottom && this.positions()?.includes('top')) {\n // Top glyph — fixed bottom edge. action.bottom.edge = captured rect.bottom\n const initialBottom = action.bottom.edge;\n const initialTop = action.bottom.edge - action.bottom.size;\n const y = (ev.clientY > initialBottom - 10) ? initialBottom - 10 : ev.clientY;\n switch (this.resizable.positioning()) {\n case 'inline': {\n const initialMargin = action.bottom.dragMargin ?? 0;\n this.resizable.height.set(initialBottom - y);\n this.resizable.marginTop.set(initialMargin + (y - initialTop));\n } break;\n case 'absolute': {\n this.resizable.top.set(y);\n this.resizable.height.set(initialBottom - y);\n } break;\n }\n }\n this.isBusy = false;\n }\n }\n \n onPointerUp() {\n this.resizable.resizeAction = undefined;\n this.activeClass.set(false);\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, forwardRef, signal } from '@angular/core';\nimport { ResizeAction } from '../interfaces/resize-action';\nimport { RESIZABLE } from '../providers/resizable.provider';\nimport { ResizablePositioning } from '../types/positioning';\nimport { PresetPosition } from '../interfaces/preset-position';\nimport { BsResizeGlyphDirective } from '../resize-glyph/resize-glyph.directive';\n\n@Component({\n selector: 'bs-resizable',\n templateUrl: './resizable.component.html',\n styleUrls: ['./resizable.component.scss'],\n imports: [BsResizeGlyphDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: RESIZABLE, useExisting: forwardRef(() => BsResizableComponent) }\n ],\n host: {\n '[style.margin-left.px]': 'marginLeft()',\n '[style.margin-right.px]': 'marginRight()',\n '[style.margin-top.px]': 'marginTop()',\n '[style.margin-bottom.px]': 'marginBottom()',\n '[style.width.px]': 'width()',\n '[style.height.px]': 'height()',\n '[style.left.px]': 'left()',\n '[style.top.px]': 'top()',\n '[class.d-block]': 'true',\n '[class.border]': 'true',\n '[class]': 'hostPosition()',\n },\n})\nexport class BsResizableComponent {\n element = inject(ElementRef<HTMLElement>);\n\n resizeAction?: ResizeAction;\n positioning = input<ResizablePositioning>('inline');\n horizontal = input(true);\n vertical = input(true);\n corners = input(true);\n\n showCorners = computed(() => this.horizontal() && this.vertical() && this.corners());\n\n hostPosition = computed(() => {\n const positioning = this.positioning();\n switch (positioning) {\n case 'absolute': return 'position-absolute';\n case 'inline': return 'position-relative';\n }\n });\n\n wrapperPosition = computed(() => {\n const positioning = this.positioning();\n switch (positioning) {\n case 'absolute': return ['position-relative', 'h-100'];\n case 'inline': return [];\n }\n });\n\n readonly presetPosition = input<PresetPosition | undefined>(undefined);\n\n constructor() {\n effect(() => {\n const value = this.presetPosition();\n if (value) {\n if (this.positioning() === 'inline') {\n throw 'presetPosition currently only supported in absolute positioning';\n }\n this.width.set(value.width);\n this.height.set(value.height);\n this.left.set(value.left);\n this.top.set(value.top);\n this.marginTop.set(undefined);\n this.marginBottom.set(undefined);\n this.marginLeft.set(undefined);\n this.marginRight.set(undefined);\n }\n });\n }\n\n marginLeft = signal<number | undefined>(undefined);\n marginRight = signal<number | undefined>(undefined);\n marginTop = signal<number | undefined>(undefined);\n marginBottom = signal<number | undefined>(undefined);\n width = signal<number | undefined>(undefined);\n height = signal<number | undefined>(undefined);\n left = signal<number | undefined>(undefined);\n top = signal<number | undefined>(undefined);\n}\n","<div [class]=\"wrapperPosition()\" class=\"h-100\">\n @if (showCorners()) {\n <div class=\"cursor-nw-resize\" [bsResizeGlyph]=\"['top', 'start']\"></div>\n <div class=\"cursor-ne-resize\" [bsResizeGlyph]=\"['top', 'end']\"></div>\n <div class=\"cursor-se-resize\" [bsResizeGlyph]=\"['bottom', 'end']\"></div>\n <div class=\"cursor-sw-resize\" [bsResizeGlyph]=\"['bottom', 'start']\"></div>\n }\n @if (vertical()) {\n <div class=\"cursor-n-resize\" [bsResizeGlyph]=\"['top']\"></div>\n <div class=\"cursor-s-resize\" [bsResizeGlyph]=\"['bottom']\"></div>\n }\n @if (horizontal()) {\n <div class=\"cursor-e-resize\" [bsResizeGlyph]=\"['end']\"></div>\n <div class=\"cursor-w-resize\" [bsResizeGlyph]=\"['start']\"></div>\n }\n <ng-content></ng-content>\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ class BsTimepickerComponent {
20
20
  this.clock = signal(undefined, ...(ngDevMode ? [{ debugName: "clock" }] : []));
21
21
  this.colors = Color;
22
22
  this.isOpen = model(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
23
- this.presetTimestamps = [];
23
+ this.presetTimestamps = signal([], ...(ngDevMode ? [{ debugName: "presetTimestamps" }] : []));
24
24
  this.isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : []));
25
25
  this.selectedTime = model(new Date(), ...(ngDevMode ? [{ debugName: "selectedTime" }] : []));
26
26
  const today = new Date();
@@ -28,12 +28,12 @@ class BsTimepickerComponent {
28
28
  today.setMinutes(0);
29
29
  today.setSeconds(0);
30
30
  const interval = 900;
31
- this.presetTimestamps = Array.from(Array(24 * 60 * 60 / interval).keys())
31
+ this.presetTimestamps.set(Array.from(Array(24 * 60 * 60 / interval).keys())
32
32
  .map(i => {
33
33
  const clone = new Date(today);
34
34
  clone.setTime(clone.getTime() + i * interval * 1000);
35
35
  return clone;
36
- });
36
+ }));
37
37
  import('bootstrap-icons/icons/clock.svg').then((icon) => {
38
38
  this.clock.set(this.sanitizer.bypassSecurityTrustHtml(icon.default));
39
39
  });
@@ -89,11 +89,11 @@ class BsTimepickerComponent {
89
89
  return (time1.getHours() === time2.getHours()) && (time1.getMinutes() === time2.getMinutes());
90
90
  }
91
91
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: BsTimepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
92
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: BsTimepickerComponent, isStandalone: true, selector: "bs-timepicker", inputs: { isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, selectedTime: { classPropertyName: "selectedTime", publicName: "selectedTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange", selectedTime: "selectedTimeChange" }, ngImport: i0, template: "<!-- <bs-dropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\"></bs-dropdown> -->\n<div bsDropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\">\n <bs-form>\n <bs-input-group>\n <span class=\"form-control d-flex\" [class.focus]=\"isFocused()\">\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"23\" (input)=\"setNumber($event, 23, minuteBox)\" bsEnhancedPaste [ngModel]=\"hours | number: '2.0'\" (ngModelChange)=\"hours = $event\" (focus)=\"selectAll(hourBox)\" (blur)=\"isFocused.set(false)\" #hourBox class=\"w-100 border-0 bg-transparent text-end no-form-control\">\n </div>\n <span class=\"px-1\">:</span>\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"59\" (input)=\"setNumber($event, 59, null)\" bsEnhancedPaste [ngModel]=\"minutes | number: '2.0'\" (ngModelChange)=\"minutes = $event\" (focus)=\"selectAll(minuteBox)\" (blur)=\"isFocused.set(false)\" #minuteBox class=\"w-100 border-0 bg-transparent no-form-control\">\n </div>\n </span>\n <button [color]=\"colors.secondary\" (click)=\"isOpen.set(!isOpen())\">\n <span [innerHTML]=\"clock()\"></span>\n </button>\n </bs-input-group>\n </bs-form>\n <bs-has-overlay></bs-has-overlay>\n <bs-dropdown-menu class=\"overflow-auto\" *bsDropdownMenu>\n @for (timestamp of presetTimestamps; track timestamp) {\n <bs-dropdown-item [isSelected]=\"timesEqual(selectedTime(), timestamp)\" (click)=\"setTime(timestamp)\">\n {{ timestamp | date: 'HH:mm' }}\n </bs-dropdown-item>\n }\n </bs-dropdown-menu>\n</div>", styles: [":host{display:inline-block}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;outline:0px!important}.form-control{transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control.focus{color:#495057;background-color:#fff;border-color:#80bdff!important;outline:0;box-shadow:0 0 0 .2rem #007bff40}bs-dropdown-menu{max-height:250px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EnhancedPasteDirective, selector: "input[type=\"number\"][bsEnhancedPaste]", outputs: ["numberOverflow"] }, { kind: "component", type: BsFormComponent, selector: "bs-form", inputs: ["action", "method"], outputs: ["submitted"] }, { kind: "directive", type: BsDropdownDirective, selector: "[bsDropdown]", inputs: ["hasBackdrop", "sameWidth", "closeOnClickOutside", "sameDropdownWidth", "isOpen"], outputs: ["isOpenChange"] }, { kind: "directive", type: BsDropdownMenuDirective, selector: "[bsDropdownMenu]" }, { kind: "component", type: BsDropdownMenuComponent, selector: "bs-dropdown-menu", inputs: ["maxHeight"] }, { kind: "component", type: BsDropdownItemComponent, selector: "bs-dropdown-item", inputs: ["isSelected", "disabled"] }, { kind: "component", type: BsInputGroupComponent, selector: "bs-input-group" }, { kind: "directive", type: BsButtonTypeDirective, selector: "button[color],input[type=\"button\"][color],input[type=\"submit\"][color],a[color]", inputs: ["color"] }, { kind: "component", type: BsHasOverlayComponent, selector: "bs-has-overlay" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
92
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: BsTimepickerComponent, isStandalone: true, selector: "bs-timepicker", inputs: { isOpen: { classPropertyName: "isOpen", publicName: "isOpen", isSignal: true, isRequired: false, transformFunction: null }, selectedTime: { classPropertyName: "selectedTime", publicName: "selectedTime", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isOpen: "isOpenChange", selectedTime: "selectedTimeChange" }, ngImport: i0, template: "<!-- <bs-dropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\"></bs-dropdown> -->\n<div bsDropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\">\n <bs-form>\n <bs-input-group>\n <span class=\"form-control d-flex\" [class.focus]=\"isFocused()\">\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"23\" (input)=\"setNumber($event, 23, minuteBox)\" bsEnhancedPaste [ngModel]=\"hours | number: '2.0'\" (ngModelChange)=\"hours = $event\" (focus)=\"selectAll(hourBox)\" (blur)=\"isFocused.set(false)\" #hourBox class=\"w-100 border-0 bg-transparent text-end no-form-control\">\n </div>\n <span class=\"px-1\">:</span>\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"59\" (input)=\"setNumber($event, 59, null)\" bsEnhancedPaste [ngModel]=\"minutes | number: '2.0'\" (ngModelChange)=\"minutes = $event\" (focus)=\"selectAll(minuteBox)\" (blur)=\"isFocused.set(false)\" #minuteBox class=\"w-100 border-0 bg-transparent no-form-control\">\n </div>\n </span>\n <button [color]=\"colors.secondary\" (click)=\"isOpen.set(!isOpen())\">\n <span [innerHTML]=\"clock()\"></span>\n </button>\n </bs-input-group>\n </bs-form>\n <bs-has-overlay></bs-has-overlay>\n <bs-dropdown-menu class=\"overflow-auto\" *bsDropdownMenu>\n @for (timestamp of presetTimestamps(); track timestamp) {\n <bs-dropdown-item [isSelected]=\"timesEqual(selectedTime(), timestamp)\" (click)=\"setTime(timestamp)\">\n {{ timestamp | date: 'HH:mm' }}\n </bs-dropdown-item>\n }\n </bs-dropdown-menu>\n</div>", styles: [":host{display:inline-block}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;outline:0px!important}.form-control{transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control.focus{color:#495057;background-color:#fff;border-color:#80bdff!important;outline:0;box-shadow:0 0 0 .2rem #007bff40}bs-dropdown-menu{max-height:250px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: EnhancedPasteDirective, selector: "input[type=\"number\"][bsEnhancedPaste]", outputs: ["numberOverflow"] }, { kind: "component", type: BsFormComponent, selector: "bs-form", inputs: ["action", "method"], outputs: ["submitted"] }, { kind: "directive", type: BsDropdownDirective, selector: "[bsDropdown]", inputs: ["hasBackdrop", "sameWidth", "closeOnClickOutside", "sameDropdownWidth", "isOpen"], outputs: ["isOpenChange"] }, { kind: "directive", type: BsDropdownMenuDirective, selector: "[bsDropdownMenu]" }, { kind: "component", type: BsDropdownMenuComponent, selector: "bs-dropdown-menu", inputs: ["maxHeight"] }, { kind: "component", type: BsDropdownItemComponent, selector: "bs-dropdown-item", inputs: ["isSelected", "disabled"] }, { kind: "component", type: BsInputGroupComponent, selector: "bs-input-group" }, { kind: "directive", type: BsButtonTypeDirective, selector: "button[color],input[type=\"button\"][color],input[type=\"submit\"][color],a[color]", inputs: ["color"] }, { kind: "component", type: BsHasOverlayComponent, selector: "bs-has-overlay" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: DecimalPipe, name: "number" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
93
93
  }
94
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: BsTimepickerComponent, decorators: [{
95
95
  type: Component,
96
- args: [{ selector: 'bs-timepicker', imports: [DatePipe, DecimalPipe, FormsModule, EnhancedPasteDirective, BsFormComponent, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownMenuComponent, BsDropdownItemComponent, BsInputGroupComponent, BsButtonTypeDirective, BsHasOverlayComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- <bs-dropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\"></bs-dropdown> -->\n<div bsDropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\">\n <bs-form>\n <bs-input-group>\n <span class=\"form-control d-flex\" [class.focus]=\"isFocused()\">\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"23\" (input)=\"setNumber($event, 23, minuteBox)\" bsEnhancedPaste [ngModel]=\"hours | number: '2.0'\" (ngModelChange)=\"hours = $event\" (focus)=\"selectAll(hourBox)\" (blur)=\"isFocused.set(false)\" #hourBox class=\"w-100 border-0 bg-transparent text-end no-form-control\">\n </div>\n <span class=\"px-1\">:</span>\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"59\" (input)=\"setNumber($event, 59, null)\" bsEnhancedPaste [ngModel]=\"minutes | number: '2.0'\" (ngModelChange)=\"minutes = $event\" (focus)=\"selectAll(minuteBox)\" (blur)=\"isFocused.set(false)\" #minuteBox class=\"w-100 border-0 bg-transparent no-form-control\">\n </div>\n </span>\n <button [color]=\"colors.secondary\" (click)=\"isOpen.set(!isOpen())\">\n <span [innerHTML]=\"clock()\"></span>\n </button>\n </bs-input-group>\n </bs-form>\n <bs-has-overlay></bs-has-overlay>\n <bs-dropdown-menu class=\"overflow-auto\" *bsDropdownMenu>\n @for (timestamp of presetTimestamps; track timestamp) {\n <bs-dropdown-item [isSelected]=\"timesEqual(selectedTime(), timestamp)\" (click)=\"setTime(timestamp)\">\n {{ timestamp | date: 'HH:mm' }}\n </bs-dropdown-item>\n }\n </bs-dropdown-menu>\n</div>", styles: [":host{display:inline-block}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;outline:0px!important}.form-control{transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control.focus{color:#495057;background-color:#fff;border-color:#80bdff!important;outline:0;box-shadow:0 0 0 .2rem #007bff40}bs-dropdown-menu{max-height:250px}\n"] }]
96
+ args: [{ selector: 'bs-timepicker', imports: [DatePipe, DecimalPipe, FormsModule, EnhancedPasteDirective, BsFormComponent, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownMenuComponent, BsDropdownItemComponent, BsInputGroupComponent, BsButtonTypeDirective, BsHasOverlayComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- <bs-dropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\"></bs-dropdown> -->\n<div bsDropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\">\n <bs-form>\n <bs-input-group>\n <span class=\"form-control d-flex\" [class.focus]=\"isFocused()\">\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"23\" (input)=\"setNumber($event, 23, minuteBox)\" bsEnhancedPaste [ngModel]=\"hours | number: '2.0'\" (ngModelChange)=\"hours = $event\" (focus)=\"selectAll(hourBox)\" (blur)=\"isFocused.set(false)\" #hourBox class=\"w-100 border-0 bg-transparent text-end no-form-control\">\n </div>\n <span class=\"px-1\">:</span>\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"59\" (input)=\"setNumber($event, 59, null)\" bsEnhancedPaste [ngModel]=\"minutes | number: '2.0'\" (ngModelChange)=\"minutes = $event\" (focus)=\"selectAll(minuteBox)\" (blur)=\"isFocused.set(false)\" #minuteBox class=\"w-100 border-0 bg-transparent no-form-control\">\n </div>\n </span>\n <button [color]=\"colors.secondary\" (click)=\"isOpen.set(!isOpen())\">\n <span [innerHTML]=\"clock()\"></span>\n </button>\n </bs-input-group>\n </bs-form>\n <bs-has-overlay></bs-has-overlay>\n <bs-dropdown-menu class=\"overflow-auto\" *bsDropdownMenu>\n @for (timestamp of presetTimestamps(); track timestamp) {\n <bs-dropdown-item [isSelected]=\"timesEqual(selectedTime(), timestamp)\" (click)=\"setTime(timestamp)\">\n {{ timestamp | date: 'HH:mm' }}\n </bs-dropdown-item>\n }\n </bs-dropdown-menu>\n</div>", styles: [":host{display:inline-block}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield;outline:0px!important}.form-control{transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control.focus{color:#495057;background-color:#fff;border-color:#80bdff!important;outline:0;box-shadow:0 0 0 .2rem #007bff40}bs-dropdown-menu{max-height:250px}\n"] }]
97
97
  }], ctorParameters: () => [], propDecorators: { isOpen: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpen", required: false }] }, { type: i0.Output, args: ["isOpenChange"] }], selectedTime: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedTime", required: false }] }, { type: i0.Output, args: ["selectedTimeChange"] }] } });
98
98
 
99
99
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"mintplayer-ng-bootstrap-timepicker.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/timepicker/src/timepicker.component.ts","../../../../libs/mintplayer-ng-bootstrap/timepicker/src/timepicker.component.html","../../../../libs/mintplayer-ng-bootstrap/timepicker/mintplayer-ng-bootstrap-timepicker.ts"],"sourcesContent":["/// <reference types=\"./types\" />\n\nimport { DatePipe, DecimalPipe } from '@angular/common';\nimport { Component, inject, model, signal, ChangeDetectionStrategy} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Color } from '@mintplayer/ng-bootstrap';\nimport { BsButtonTypeDirective } from '@mintplayer/ng-bootstrap/button-type';\nimport { BsDropdownDirective, BsDropdownMenuDirective } from '@mintplayer/ng-bootstrap/dropdown';\nimport { BsDropdownMenuComponent, BsDropdownItemComponent } from '@mintplayer/ng-bootstrap/dropdown-menu';\nimport { EnhancedPasteDirective } from '@mintplayer/ng-bootstrap/enhanced-paste';\nimport { BsFormComponent } from '@mintplayer/ng-bootstrap/form';\nimport { BsHasOverlayComponent } from '@mintplayer/ng-bootstrap/has-overlay';\nimport { BsInputGroupComponent } from '@mintplayer/ng-bootstrap/input-group';\n\n@Component({\n selector: 'bs-timepicker',\n templateUrl: './timepicker.component.html',\n styleUrls: ['./timepicker.component.scss'],\n imports: [DatePipe, DecimalPipe, FormsModule, EnhancedPasteDirective, BsFormComponent, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownMenuComponent, BsDropdownItemComponent, BsInputGroupComponent, BsButtonTypeDirective, BsHasOverlayComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsTimepickerComponent {\n private sanitizer = inject(DomSanitizer);\n\n constructor() {\n const today = new Date();\n today.setHours(0); today.setMinutes(0); today.setSeconds(0);\n\n const interval = 900;\n this.presetTimestamps = Array.from(Array(24 * 60 * 60 / interval).keys())\n .map(i => {\n const clone = new Date(today);\n clone.setTime(clone.getTime() + i * interval * 1000);\n return clone;\n });\n\n\n import('bootstrap-icons/icons/clock.svg').then((icon) => {\n this.clock.set(this.sanitizer.bypassSecurityTrustHtml(icon.default));\n });\n }\n\n clock = signal<SafeHtml | undefined>(undefined);\n colors = Color;\n isOpen = model(false);\n presetTimestamps: Date[] = [];\n isFocused = signal(false);\n\n selectAll(box: HTMLInputElement) {\n box.select();\n // box.setSelectionRange(0, box.value.length);\n this.isFocused.set(true);\n }\n\n setNumber(event: Event, max: number, nextInput: HTMLInputElement | null) {\n event.preventDefault();\n const input = <HTMLInputElement>event.target;\n const val = parseInt(input.value);\n if (isNaN(val)) {\n input.value = '00';\n } else {\n const result = Math.min(max, Math.abs(val));\n input.value = result.toString().padStart(2, '0');\n\n if (nextInput) {\n // const maxAllowedNumberOfDigits = input.max.length;\n if (result * 10 > parseInt(input.max)) {\n nextInput.focus();\n }\n }\n }\n }\n\n setTime(time: Date) {\n this.selectedTime.set(time);\n this.isOpen.set(false);\n }\n\n selectedTime = model<Date>(new Date());\n\n //#region Hours\n get hours() {\n return this.selectedTime().getHours();\n }\n set hours(value: number) {\n const clone = new Date(this.selectedTime());\n clone.setHours(value);\n this.selectedTime.set(clone);\n }\n //#endregion\n\n //#region Minutes\n get minutes() {\n return this.selectedTime().getMinutes();\n }\n set minutes(value: number) {\n const clone = new Date(this.selectedTime());\n clone.setMinutes(value);\n this.selectedTime.set(clone);\n }\n //#endregion\n\n timesEqual(time1: Date, time2: Date) {\n return (time1.getHours() === time2.getHours()) && (time1.getMinutes() === time2.getMinutes());\n }\n\n}\n","<!-- <bs-dropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\"></bs-dropdown> -->\n<div bsDropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\">\n <bs-form>\n <bs-input-group>\n <span class=\"form-control d-flex\" [class.focus]=\"isFocused()\">\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"23\" (input)=\"setNumber($event, 23, minuteBox)\" bsEnhancedPaste [ngModel]=\"hours | number: '2.0'\" (ngModelChange)=\"hours = $event\" (focus)=\"selectAll(hourBox)\" (blur)=\"isFocused.set(false)\" #hourBox class=\"w-100 border-0 bg-transparent text-end no-form-control\">\n </div>\n <span class=\"px-1\">:</span>\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"59\" (input)=\"setNumber($event, 59, null)\" bsEnhancedPaste [ngModel]=\"minutes | number: '2.0'\" (ngModelChange)=\"minutes = $event\" (focus)=\"selectAll(minuteBox)\" (blur)=\"isFocused.set(false)\" #minuteBox class=\"w-100 border-0 bg-transparent no-form-control\">\n </div>\n </span>\n <button [color]=\"colors.secondary\" (click)=\"isOpen.set(!isOpen())\">\n <span [innerHTML]=\"clock()\"></span>\n </button>\n </bs-input-group>\n </bs-form>\n <bs-has-overlay></bs-has-overlay>\n <bs-dropdown-menu class=\"overflow-auto\" *bsDropdownMenu>\n @for (timestamp of presetTimestamps; track timestamp) {\n <bs-dropdown-item [isSelected]=\"timesEqual(selectedTime(), timestamp)\" (click)=\"setTime(timestamp)\">\n {{ timestamp | date: 'HH:mm' }}\n </bs-dropdown-item>\n }\n </bs-dropdown-menu>\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mintplayer-ng-bootstrap-timepicker.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/timepicker/src/timepicker.component.ts","../../../../libs/mintplayer-ng-bootstrap/timepicker/src/timepicker.component.html","../../../../libs/mintplayer-ng-bootstrap/timepicker/mintplayer-ng-bootstrap-timepicker.ts"],"sourcesContent":["/// <reference types=\"./types\" />\n\nimport { DatePipe, DecimalPipe } from '@angular/common';\nimport { Component, inject, model, signal, ChangeDetectionStrategy} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Color } from '@mintplayer/ng-bootstrap';\nimport { BsButtonTypeDirective } from '@mintplayer/ng-bootstrap/button-type';\nimport { BsDropdownDirective, BsDropdownMenuDirective } from '@mintplayer/ng-bootstrap/dropdown';\nimport { BsDropdownMenuComponent, BsDropdownItemComponent } from '@mintplayer/ng-bootstrap/dropdown-menu';\nimport { EnhancedPasteDirective } from '@mintplayer/ng-bootstrap/enhanced-paste';\nimport { BsFormComponent } from '@mintplayer/ng-bootstrap/form';\nimport { BsHasOverlayComponent } from '@mintplayer/ng-bootstrap/has-overlay';\nimport { BsInputGroupComponent } from '@mintplayer/ng-bootstrap/input-group';\n\n@Component({\n selector: 'bs-timepicker',\n templateUrl: './timepicker.component.html',\n styleUrls: ['./timepicker.component.scss'],\n imports: [DatePipe, DecimalPipe, FormsModule, EnhancedPasteDirective, BsFormComponent, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownMenuComponent, BsDropdownItemComponent, BsInputGroupComponent, BsButtonTypeDirective, BsHasOverlayComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsTimepickerComponent {\n private sanitizer = inject(DomSanitizer);\n\n constructor() {\n const today = new Date();\n today.setHours(0); today.setMinutes(0); today.setSeconds(0);\n\n const interval = 900;\n this.presetTimestamps.set(\n Array.from(Array(24 * 60 * 60 / interval).keys())\n .map(i => {\n const clone = new Date(today);\n clone.setTime(clone.getTime() + i * interval * 1000);\n return clone;\n })\n );\n\n\n import('bootstrap-icons/icons/clock.svg').then((icon) => {\n this.clock.set(this.sanitizer.bypassSecurityTrustHtml(icon.default));\n });\n }\n\n clock = signal<SafeHtml | undefined>(undefined);\n colors = Color;\n isOpen = model(false);\n readonly presetTimestamps = signal<Date[]>([]);\n isFocused = signal(false);\n\n selectAll(box: HTMLInputElement) {\n box.select();\n // box.setSelectionRange(0, box.value.length);\n this.isFocused.set(true);\n }\n\n setNumber(event: Event, max: number, nextInput: HTMLInputElement | null) {\n event.preventDefault();\n const input = <HTMLInputElement>event.target;\n const val = parseInt(input.value);\n if (isNaN(val)) {\n input.value = '00';\n } else {\n const result = Math.min(max, Math.abs(val));\n input.value = result.toString().padStart(2, '0');\n\n if (nextInput) {\n // const maxAllowedNumberOfDigits = input.max.length;\n if (result * 10 > parseInt(input.max)) {\n nextInput.focus();\n }\n }\n }\n }\n\n setTime(time: Date) {\n this.selectedTime.set(time);\n this.isOpen.set(false);\n }\n\n selectedTime = model<Date>(new Date());\n\n //#region Hours\n get hours() {\n return this.selectedTime().getHours();\n }\n set hours(value: number) {\n const clone = new Date(this.selectedTime());\n clone.setHours(value);\n this.selectedTime.set(clone);\n }\n //#endregion\n\n //#region Minutes\n get minutes() {\n return this.selectedTime().getMinutes();\n }\n set minutes(value: number) {\n const clone = new Date(this.selectedTime());\n clone.setMinutes(value);\n this.selectedTime.set(clone);\n }\n //#endregion\n\n timesEqual(time1: Date, time2: Date) {\n return (time1.getHours() === time2.getHours()) && (time1.getMinutes() === time2.getMinutes());\n }\n\n}\n","<!-- <bs-dropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\"></bs-dropdown> -->\n<div bsDropdown [(isOpen)]=\"isOpen\" [sameDropdownWidth]=\"true\">\n <bs-form>\n <bs-input-group>\n <span class=\"form-control d-flex\" [class.focus]=\"isFocused()\">\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"23\" (input)=\"setNumber($event, 23, minuteBox)\" bsEnhancedPaste [ngModel]=\"hours | number: '2.0'\" (ngModelChange)=\"hours = $event\" (focus)=\"selectAll(hourBox)\" (blur)=\"isFocused.set(false)\" #hourBox class=\"w-100 border-0 bg-transparent text-end no-form-control\">\n </div>\n <span class=\"px-1\">:</span>\n <div class=\"flex-grow-1\">\n <input type=\"number\" [min]=\"0\" [max]=\"59\" (input)=\"setNumber($event, 59, null)\" bsEnhancedPaste [ngModel]=\"minutes | number: '2.0'\" (ngModelChange)=\"minutes = $event\" (focus)=\"selectAll(minuteBox)\" (blur)=\"isFocused.set(false)\" #minuteBox class=\"w-100 border-0 bg-transparent no-form-control\">\n </div>\n </span>\n <button [color]=\"colors.secondary\" (click)=\"isOpen.set(!isOpen())\">\n <span [innerHTML]=\"clock()\"></span>\n </button>\n </bs-input-group>\n </bs-form>\n <bs-has-overlay></bs-has-overlay>\n <bs-dropdown-menu class=\"overflow-auto\" *bsDropdownMenu>\n @for (timestamp of presetTimestamps(); track timestamp) {\n <bs-dropdown-item [isSelected]=\"timesEqual(selectedTime(), timestamp)\" (click)=\"setTime(timestamp)\">\n {{ timestamp | date: 'HH:mm' }}\n </bs-dropdown-item>\n }\n </bs-dropdown-menu>\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, NgZone, input, ChangeDetectionStrategy, Component, TemplateRef, Directive } from '@angular/core';
2
+ import { inject, ElementRef, input, signal, ChangeDetectionStrategy, Component, TemplateRef, Directive } from '@angular/core';
3
3
  import { NgTemplateOutlet } from '@angular/common';
4
4
  import * as i1 from '@angular/cdk/scrolling';
5
5
  import { ScrollingModule } from '@angular/cdk/scrolling';
@@ -13,11 +13,11 @@ class BsVirtualDatatableComponent extends DatatableSortBase {
13
13
  constructor() {
14
14
  super(...arguments);
15
15
  this.elementRef = inject(ElementRef);
16
- this.ngZone = inject(NgZone);
17
16
  this.cleanup = [];
18
17
  this.dataSource = input.required(...(ngDevMode ? [{ debugName: "dataSource" }] : []));
19
18
  this.isResponsive = input(false, ...(ngDevMode ? [{ debugName: "isResponsive" }] : []));
20
19
  this.itemSize = input(48, ...(ngDevMode ? [{ debugName: "itemSize" }] : []));
20
+ this.rowTemplate = signal(undefined, ...(ngDevMode ? [{ debugName: "rowTemplate" }] : []));
21
21
  }
22
22
  ngAfterViewInit() {
23
23
  this.setupScrollSync();
@@ -47,10 +47,8 @@ class BsVirtualDatatableComponent extends DatatableSortBase {
47
47
  headerScrollContainer.scrollLeft = viewport.scrollLeft;
48
48
  syncing = false;
49
49
  };
50
- this.ngZone.runOutsideAngular(() => {
51
- headerScrollContainer.addEventListener('scroll', onHeaderScroll, { passive: true });
52
- viewport.addEventListener('scroll', onViewportScroll, { passive: true });
53
- });
50
+ headerScrollContainer.addEventListener('scroll', onHeaderScroll, { passive: true });
51
+ viewport.addEventListener('scroll', onViewportScroll, { passive: true });
54
52
  this.cleanup.push(() => {
55
53
  headerScrollContainer.removeEventListener('scroll', onHeaderScroll);
56
54
  viewport.removeEventListener('scroll', onViewportScroll);
@@ -140,24 +138,20 @@ class BsVirtualDatatableComponent extends DatatableSortBase {
140
138
  viewport.scrollLeft = savedViewportScroll;
141
139
  };
142
140
  // Sync after first render
143
- this.ngZone.runOutsideAngular(() => {
144
- requestAnimationFrame(() => syncWidths());
145
- });
141
+ requestAnimationFrame(() => syncWidths());
146
142
  // Re-sync when body rows change (virtual scroll swaps rows)
147
143
  const observer = new MutationObserver(() => {
148
144
  requestAnimationFrame(() => syncWidths());
149
145
  });
150
- this.ngZone.runOutsideAngular(() => {
151
- observer.observe(bodyTableBody, { childList: true, subtree: true });
152
- });
146
+ observer.observe(bodyTableBody, { childList: true, subtree: true });
153
147
  this.cleanup.push(() => observer.disconnect());
154
148
  }
155
149
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: BsVirtualDatatableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
156
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: BsVirtualDatatableComponent, isStandalone: true, selector: "bs-virtual-datatable", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, isResponsive: { classPropertyName: "isResponsive", publicName: "isResponsive", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable\"\n [class.sort-asc]=\"column.sortable && getSortDirection(column.name) === 'ascending'\"\n [class.sort-desc]=\"column.sortable && getSortDirection(column.name) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td>&nbsp;</td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n", styles: ["@charset \"UTF-8\";bs-table thead th.sort{position:relative;cursor:pointer;padding-right:2rem}bs-table thead th.sort:before,bs-table thead th.sort:after{position:absolute;display:block;opacity:.3;bottom:.5em}bs-table thead th.sort:before{content:\"\\2191\";right:1em}bs-table thead th.sort:after{content:\"\\2193\";right:.5em}bs-table thead th.sort.sort-asc:after{opacity:1}bs-table thead th.sort.sort-desc:before{opacity:1}bs-table thead th.sort .sort-priority{position:absolute;right:.1em;bottom:.3em;font-size:.65em;font-weight:700;opacity:.7}:host{display:block;height:100%}.virtual-datatable-container{display:flex;flex-direction:column;height:100%}.virtual-datatable-container bs-table{flex-shrink:0}bs-table ::ng-deep table,.virtual-scroll-viewport table{table-layout:auto;width:max-content}.virtual-scroll-viewport .nowrap td{white-space:nowrap}bs-table ::ng-deep .table-responsive{overflow-x:hidden;scrollbar-gutter:stable}.virtual-scroll-viewport{flex:1 1 auto;min-height:0;scrollbar-gutter:stable}.virtual-scroll-viewport table{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: BsTableComponent, selector: "bs-table", inputs: ["isResponsive", "striped", "hover", "border"] }, { kind: "component", type: BsTableStylesComponent, selector: "bs-table-styles" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: BsVirtualDatatableComponent, isStandalone: true, selector: "bs-virtual-datatable", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, isResponsive: { classPropertyName: "isResponsive", publicName: "isResponsive", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable()\"\n [class.sort-asc]=\"column.sortable() && getSortDirection(column.name()) === 'ascending'\"\n [class.sort-desc]=\"column.sortable() && getSortDirection(column.name()) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name()) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name()) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate()) {\n <ng-container *ngTemplateOutlet=\"rowTemplate()!; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td>&nbsp;</td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n", styles: ["@charset \"UTF-8\";bs-table thead th.sort{position:relative;cursor:pointer;padding-right:2rem}bs-table thead th.sort:before,bs-table thead th.sort:after{position:absolute;display:block;opacity:.3;bottom:.5em}bs-table thead th.sort:before{content:\"\\2191\";right:1em}bs-table thead th.sort:after{content:\"\\2193\";right:.5em}bs-table thead th.sort.sort-asc:after{opacity:1}bs-table thead th.sort.sort-desc:before{opacity:1}bs-table thead th.sort .sort-priority{position:absolute;right:.1em;bottom:.3em;font-size:.65em;font-weight:700;opacity:.7}:host{display:block;height:100%}.virtual-datatable-container{display:flex;flex-direction:column;height:100%}.virtual-datatable-container bs-table{flex-shrink:0}bs-table ::ng-deep table,.virtual-scroll-viewport table{table-layout:auto;width:max-content}.virtual-scroll-viewport .nowrap td{white-space:nowrap}bs-table ::ng-deep .table-responsive{overflow-x:hidden;scrollbar-gutter:stable}.virtual-scroll-viewport{flex:1 1 auto;min-height:0;scrollbar-gutter:stable}.virtual-scroll-viewport table{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: BsTableComponent, selector: "bs-table", inputs: ["isResponsive", "striped", "hover", "border"] }, { kind: "component", type: BsTableStylesComponent, selector: "bs-table-styles" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
157
151
  }
158
152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: BsVirtualDatatableComponent, decorators: [{
159
153
  type: Component,
160
- args: [{ selector: 'bs-virtual-datatable', imports: [NgTemplateOutlet, ScrollingModule, BsTableComponent, BsTableStylesComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable\"\n [class.sort-asc]=\"column.sortable && getSortDirection(column.name) === 'ascending'\"\n [class.sort-desc]=\"column.sortable && getSortDirection(column.name) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td>&nbsp;</td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n", styles: ["@charset \"UTF-8\";bs-table thead th.sort{position:relative;cursor:pointer;padding-right:2rem}bs-table thead th.sort:before,bs-table thead th.sort:after{position:absolute;display:block;opacity:.3;bottom:.5em}bs-table thead th.sort:before{content:\"\\2191\";right:1em}bs-table thead th.sort:after{content:\"\\2193\";right:.5em}bs-table thead th.sort.sort-asc:after{opacity:1}bs-table thead th.sort.sort-desc:before{opacity:1}bs-table thead th.sort .sort-priority{position:absolute;right:.1em;bottom:.3em;font-size:.65em;font-weight:700;opacity:.7}:host{display:block;height:100%}.virtual-datatable-container{display:flex;flex-direction:column;height:100%}.virtual-datatable-container bs-table{flex-shrink:0}bs-table ::ng-deep table,.virtual-scroll-viewport table{table-layout:auto;width:max-content}.virtual-scroll-viewport .nowrap td{white-space:nowrap}bs-table ::ng-deep .table-responsive{overflow-x:hidden;scrollbar-gutter:stable}.virtual-scroll-viewport{flex:1 1 auto;min-height:0;scrollbar-gutter:stable}.virtual-scroll-viewport table{margin-bottom:0}\n"] }]
154
+ args: [{ selector: 'bs-virtual-datatable', imports: [NgTemplateOutlet, ScrollingModule, BsTableComponent, BsTableStylesComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable()\"\n [class.sort-asc]=\"column.sortable() && getSortDirection(column.name()) === 'ascending'\"\n [class.sort-desc]=\"column.sortable() && getSortDirection(column.name()) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name()) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name()) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate()) {\n <ng-container *ngTemplateOutlet=\"rowTemplate()!; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td>&nbsp;</td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n", styles: ["@charset \"UTF-8\";bs-table thead th.sort{position:relative;cursor:pointer;padding-right:2rem}bs-table thead th.sort:before,bs-table thead th.sort:after{position:absolute;display:block;opacity:.3;bottom:.5em}bs-table thead th.sort:before{content:\"\\2191\";right:1em}bs-table thead th.sort:after{content:\"\\2193\";right:.5em}bs-table thead th.sort.sort-asc:after{opacity:1}bs-table thead th.sort.sort-desc:before{opacity:1}bs-table thead th.sort .sort-priority{position:absolute;right:.1em;bottom:.3em;font-size:.65em;font-weight:700;opacity:.7}:host{display:block;height:100%}.virtual-datatable-container{display:flex;flex-direction:column;height:100%}.virtual-datatable-container bs-table{flex-shrink:0}bs-table ::ng-deep table,.virtual-scroll-viewport table{table-layout:auto;width:max-content}.virtual-scroll-viewport .nowrap td{white-space:nowrap}bs-table ::ng-deep .table-responsive{overflow-x:hidden;scrollbar-gutter:stable}.virtual-scroll-viewport{flex:1 1 auto;min-height:0;scrollbar-gutter:stable}.virtual-scroll-viewport table{margin-bottom:0}\n"] }]
161
155
  }], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], isResponsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "isResponsive", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }] } });
162
156
 
163
157
  class VirtualDatatableDataSource extends DataSource {
@@ -238,7 +232,7 @@ class BsVirtualRowTemplateDirective {
238
232
  constructor() {
239
233
  this.datatableComponent = inject(BsVirtualDatatableComponent);
240
234
  this.templateRef = inject(TemplateRef);
241
- this.datatableComponent.rowTemplate = this.templateRef;
235
+ this.datatableComponent.rowTemplate.set(this.templateRef);
242
236
  }
243
237
  static ngTemplateContextGuard(dir, ctx) {
244
238
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"mintplayer-ng-bootstrap-virtual-datatable.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable/virtual-datatable.component.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable/virtual-datatable.component.html","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable-data-source.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-row-template/virtual-row-template.directive.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/mintplayer-ng-bootstrap-virtual-datatable.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, inject, input, NgZone, OnDestroy, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { BsTableComponent, BsTableStylesComponent } from '@mintplayer/ng-bootstrap/table';\nimport { DatatableSortBase } from '@mintplayer/ng-bootstrap/datatable';\nimport { VirtualDatatableDataSource } from '../virtual-datatable-data-source';\nimport { BsVirtualRowTemplateContext } from '../virtual-row-template/virtual-row-template.directive';\n\n@Component({\n selector: 'bs-virtual-datatable',\n templateUrl: './virtual-datatable.component.html',\n styleUrls: ['./virtual-datatable.component.scss'],\n imports: [NgTemplateOutlet, ScrollingModule, BsTableComponent, BsTableStylesComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsVirtualDatatableComponent<TData> extends DatatableSortBase implements AfterViewInit, OnDestroy {\n\n private readonly elementRef = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n private cleanup: (() => void)[] = [];\n\n dataSource = input.required<VirtualDatatableDataSource<TData>>();\n isResponsive = input(false);\n itemSize = input(48);\n\n rowTemplate?: TemplateRef<BsVirtualRowTemplateContext<TData>>;\n\n ngAfterViewInit() {\n this.setupScrollSync();\n this.setupColumnWidthSync();\n }\n\n ngOnDestroy() {\n this.cleanup.forEach(fn => fn());\n }\n\n private setupScrollSync() {\n const el = this.elementRef.nativeElement as HTMLElement;\n const headerScrollContainer = el.querySelector('.table-responsive') as HTMLElement;\n const viewport = el.querySelector('cdk-virtual-scroll-viewport') as HTMLElement;\n\n if (!headerScrollContainer || !viewport) return;\n\n let syncing = false;\n\n const onHeaderScroll = () => {\n if (syncing) return;\n syncing = true;\n viewport.scrollLeft = headerScrollContainer.scrollLeft;\n syncing = false;\n };\n\n const onViewportScroll = () => {\n if (syncing) return;\n syncing = true;\n headerScrollContainer.scrollLeft = viewport.scrollLeft;\n syncing = false;\n };\n\n this.ngZone.runOutsideAngular(() => {\n headerScrollContainer.addEventListener('scroll', onHeaderScroll, { passive: true });\n viewport.addEventListener('scroll', onViewportScroll, { passive: true });\n });\n\n this.cleanup.push(() => {\n headerScrollContainer.removeEventListener('scroll', onHeaderScroll);\n viewport.removeEventListener('scroll', onViewportScroll);\n });\n }\n\n private setupColumnWidthSync() {\n const el = this.elementRef.nativeElement as HTMLElement;\n const bodyTableBody = el.querySelector('cdk-virtual-scroll-viewport tbody') as HTMLElement;\n\n if (!bodyTableBody) return;\n\n // Track the max width seen for each column so columns only grow, never\n // shrink (prevents layout jumps as rows scroll in/out of view).\n const maxWidths: number[] = [];\n\n const syncWidths = () => {\n const headerCells = el.querySelectorAll<HTMLElement>('bs-table thead th');\n const allBodyRows = Array.from(bodyTableBody.querySelectorAll<HTMLTableRowElement>('tr'));\n const firstBodyRow = allBodyRows[0];\n const bodyCells = firstBodyRow?.cells;\n\n if (!headerCells.length || !bodyCells?.length) return;\n\n const columnCount = Math.min(headerCells.length, bodyCells.length);\n\n // Save scroll positions before measurement (clearing min-width can shrink\n // the table and cause the browser to clamp scrollLeft to 0).\n const headerScrollContainer = el.querySelector('.table-responsive') as HTMLElement;\n const viewport = el.querySelector('cdk-virtual-scroll-viewport') as HTMLElement;\n const savedHeaderScroll = headerScrollContainer?.scrollLeft ?? 0;\n const savedViewportScroll = viewport?.scrollLeft ?? 0;\n\n // Clear inline min-widths on ALL body rows. CDK virtual scroll recycles\n // <tr> DOM elements, so rows that were previously the \"first row\" retain\n // stale min-width styles. With table-layout: auto the column width is\n // determined by the widest cell across all visible rows, so stale\n // min-widths on any row prevent columns from ever shrinking.\n for (const row of allBodyRows) {\n const tds = row.cells;\n for (let i = 0; i < Math.min(tds.length, columnCount); i++) {\n tds[i].style.minWidth = '';\n }\n }\n for (let i = 0; i < columnCount; i++) {\n headerCells[i].style.minWidth = '';\n }\n\n // Temporarily force both tables to size to content only, overriding\n // Bootstrap's width:100% which causes table-layout:auto to redistribute\n // extra space across columns. Without this, measured widths include\n // redistributed space that varies with each data slice.\n const headerTable = el.querySelector<HTMLElement>('bs-table table');\n const bodyTable = el.querySelector<HTMLElement>('cdk-virtual-scroll-viewport table');\n headerTable?.style.setProperty('width', 'max-content', 'important');\n bodyTable?.style.setProperty('width', 'max-content', 'important');\n\n // Measure natural content widths across all visible rows\n for (let i = 0; i < columnCount; i++) {\n let colWidth = headerCells[i].offsetWidth;\n for (const row of allBodyRows) {\n const tds = row.cells;\n if (i < tds.length) {\n const w = tds[i].offsetWidth;\n if (w > colWidth) colWidth = w;\n }\n }\n // Update tracked maximum so columns only grow, never shrink\n if (!maxWidths[i] || colWidth > maxWidths[i]) {\n maxWidths[i] = colWidth;\n }\n }\n\n // Remove temporary width override so tables render normally\n headerTable?.style.removeProperty('width');\n bodyTable?.style.removeProperty('width');\n\n // Apply max widths to header and ALL body rows to keep them in sync.\n // Setting min-width on every row prevents table-layout:auto from\n // redistributing extra space differently across the two tables when\n // some rows contain placeholder content.\n for (let i = 0; i < columnCount; i++) {\n const w = `${maxWidths[i]}px`;\n headerCells[i].style.minWidth = w;\n for (const row of allBodyRows) {\n const tds = row.cells;\n if (i < tds.length) {\n tds[i].style.minWidth = w;\n }\n }\n }\n\n // Restore scroll positions after min-widths are re-applied\n if (headerScrollContainer) headerScrollContainer.scrollLeft = savedHeaderScroll;\n if (viewport) viewport.scrollLeft = savedViewportScroll;\n };\n\n // Sync after first render\n this.ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => syncWidths());\n });\n\n // Re-sync when body rows change (virtual scroll swaps rows)\n const observer = new MutationObserver(() => {\n requestAnimationFrame(() => syncWidths());\n });\n\n this.ngZone.runOutsideAngular(() => {\n observer.observe(bodyTableBody, { childList: true, subtree: true });\n });\n\n this.cleanup.push(() => observer.disconnect());\n }\n}\n","<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable\"\n [class.sort-asc]=\"column.sortable && getSortDirection(column.name) === 'ascending'\"\n [class.sort-desc]=\"column.sortable && getSortDirection(column.name) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td>&nbsp;</td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subject, Subscription, from, merge, of } from 'rxjs';\nimport { catchError, distinctUntilChanged, filter, map, startWith, switchMap } from 'rxjs/operators';\n\nexport class VirtualDatatableDataSource<T> extends DataSource<T> {\n private readonly fetchFn: (skip: number, take: number) => Promise<{ data: T[]; totalRecords: number }>;\n private readonly pageSize: number;\n private readonly cachedPages = new Map<number, T[]>();\n private totalRecords = 0;\n private dataStream = new BehaviorSubject<T[]>([]);\n private subscription?: Subscription;\n private resetSubject = new Subject<void>();\n private resetVersion = 0;\n\n constructor(\n fetchFn: (skip: number, take: number) => Promise<{ data: T[]; totalRecords: number }>,\n pageSize = 50\n ) {\n super();\n this.fetchFn = fetchFn;\n this.pageSize = pageSize;\n }\n\n connect(collectionViewer: CollectionViewer): Observable<T[]> {\n // Support reconnection after disconnect (which completes the previous dataStream)\n this.dataStream = new BehaviorSubject<T[]>([]);\n this.cachedPages.clear();\n this.totalRecords = 0;\n\n // Track the last viewport range so reset() can re-trigger a fetch.\n // resetVersion is incremented on reset() to bypass distinctUntilChanged.\n let lastRange = { start: 0, end: this.pageSize };\n this.subscription = merge(\n collectionViewer.viewChange.pipe(startWith(lastRange)),\n this.resetSubject.pipe(map(() => lastRange))\n ).pipe(\n filter(range => range.end > range.start),\n map(range => { lastRange = range; return { pages: this.getPageIndices(range), version: this.resetVersion }; }),\n distinctUntilChanged((a, b) => a.version === b.version && a.pages.join() === b.pages.join()),\n switchMap(({ pages }) => from(this.fetchPages(pages)).pipe(\n catchError(() => of(this.dataStream.value))\n ))\n ).subscribe(data => this.dataStream.next(data));\n\n return this.dataStream;\n }\n\n disconnect(): void {\n this.subscription?.unsubscribe();\n this.dataStream.complete();\n }\n\n get length(): number {\n return this.totalRecords;\n }\n\n reset(): void {\n this.cachedPages.clear();\n this.resetVersion++;\n this.resetSubject.next();\n }\n\n private getPageIndices(range: { start: number; end: number }): number[] {\n const startPage = Math.floor(range.start / this.pageSize);\n const endPage = Math.floor((range.end - 1) / this.pageSize);\n const pages: number[] = [];\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n return pages;\n }\n\n private async fetchPages(pageIndices: number[]): Promise<T[]> {\n const uncachedPages = pageIndices.filter(p => !this.cachedPages.has(p));\n\n const results = await Promise.all(\n uncachedPages.map(async pageIndex => {\n const skip = pageIndex * this.pageSize;\n const result = await this.fetchFn(skip, this.pageSize);\n return { pageIndex, result };\n })\n );\n\n for (const { pageIndex, result } of results) {\n this.cachedPages.set(pageIndex, result.data);\n }\n if (results.length > 0) {\n this.totalRecords = results[0].result.totalRecords;\n }\n\n // Build the full data array with placeholders for unloaded pages\n const totalPages = Math.ceil(this.totalRecords / this.pageSize);\n const data: T[] = [];\n for (let i = 0; i < totalPages; i++) {\n const page = this.cachedPages.get(i);\n if (page) {\n data.push(...page);\n } else {\n // Fill with empty slots to maintain correct virtual scroll positioning\n const remaining = Math.min(this.pageSize, this.totalRecords - i * this.pageSize);\n data.push(...new Array<T>(remaining));\n }\n }\n return data;\n }\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { BsVirtualDatatableComponent } from '../virtual-datatable/virtual-datatable.component';\n\n@Directive({\n selector: '[bsVirtualRowTemplate]',\n})\nexport class BsVirtualRowTemplateDirective<TData> {\n\n private datatableComponent = inject<BsVirtualDatatableComponent<TData>>(BsVirtualDatatableComponent);\n private templateRef = inject<TemplateRef<BsVirtualRowTemplateContext<TData>>>(TemplateRef);\n\n constructor() {\n this.datatableComponent.rowTemplate = this.templateRef;\n }\n\n public static ngTemplateContextGuard<TData>(\n dir: BsVirtualRowTemplateDirective<TData>,\n ctx: any\n ): ctx is BsVirtualRowTemplateContext<Exclude<TData, false | 0 | '' | null | undefined>> {\n return true;\n }\n}\n\nexport class BsVirtualRowTemplateContext<TData = unknown> {\n public $implicit: TData = null!;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mintplayer-ng-bootstrap-virtual-datatable.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable/virtual-datatable.component.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable/virtual-datatable.component.html","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable-data-source.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-row-template/virtual-row-template.directive.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/mintplayer-ng-bootstrap-virtual-datatable.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, inject, input, OnDestroy, signal, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { BsTableComponent, BsTableStylesComponent } from '@mintplayer/ng-bootstrap/table';\nimport { DatatableSortBase } from '@mintplayer/ng-bootstrap/datatable';\nimport { VirtualDatatableDataSource } from '../virtual-datatable-data-source';\nimport { BsVirtualRowTemplateContext } from '../virtual-row-template/virtual-row-template.directive';\n\n@Component({\n selector: 'bs-virtual-datatable',\n templateUrl: './virtual-datatable.component.html',\n styleUrls: ['./virtual-datatable.component.scss'],\n imports: [NgTemplateOutlet, ScrollingModule, BsTableComponent, BsTableStylesComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsVirtualDatatableComponent<TData> extends DatatableSortBase implements AfterViewInit, OnDestroy {\n\n private readonly elementRef = inject(ElementRef);\n private cleanup: (() => void)[] = [];\n\n dataSource = input.required<VirtualDatatableDataSource<TData>>();\n isResponsive = input(false);\n itemSize = input(48);\n\n readonly rowTemplate = signal<TemplateRef<BsVirtualRowTemplateContext<TData>> | undefined>(undefined);\n\n ngAfterViewInit() {\n this.setupScrollSync();\n this.setupColumnWidthSync();\n }\n\n ngOnDestroy() {\n this.cleanup.forEach(fn => fn());\n }\n\n private setupScrollSync() {\n const el = this.elementRef.nativeElement as HTMLElement;\n const headerScrollContainer = el.querySelector('.table-responsive') as HTMLElement;\n const viewport = el.querySelector('cdk-virtual-scroll-viewport') as HTMLElement;\n\n if (!headerScrollContainer || !viewport) return;\n\n let syncing = false;\n\n const onHeaderScroll = () => {\n if (syncing) return;\n syncing = true;\n viewport.scrollLeft = headerScrollContainer.scrollLeft;\n syncing = false;\n };\n\n const onViewportScroll = () => {\n if (syncing) return;\n syncing = true;\n headerScrollContainer.scrollLeft = viewport.scrollLeft;\n syncing = false;\n };\n\n headerScrollContainer.addEventListener('scroll', onHeaderScroll, { passive: true });\n viewport.addEventListener('scroll', onViewportScroll, { passive: true });\n\n this.cleanup.push(() => {\n headerScrollContainer.removeEventListener('scroll', onHeaderScroll);\n viewport.removeEventListener('scroll', onViewportScroll);\n });\n }\n\n private setupColumnWidthSync() {\n const el = this.elementRef.nativeElement as HTMLElement;\n const bodyTableBody = el.querySelector('cdk-virtual-scroll-viewport tbody') as HTMLElement;\n\n if (!bodyTableBody) return;\n\n // Track the max width seen for each column so columns only grow, never\n // shrink (prevents layout jumps as rows scroll in/out of view).\n const maxWidths: number[] = [];\n\n const syncWidths = () => {\n const headerCells = el.querySelectorAll<HTMLElement>('bs-table thead th');\n const allBodyRows = Array.from(bodyTableBody.querySelectorAll<HTMLTableRowElement>('tr'));\n const firstBodyRow = allBodyRows[0];\n const bodyCells = firstBodyRow?.cells;\n\n if (!headerCells.length || !bodyCells?.length) return;\n\n const columnCount = Math.min(headerCells.length, bodyCells.length);\n\n // Save scroll positions before measurement (clearing min-width can shrink\n // the table and cause the browser to clamp scrollLeft to 0).\n const headerScrollContainer = el.querySelector('.table-responsive') as HTMLElement;\n const viewport = el.querySelector('cdk-virtual-scroll-viewport') as HTMLElement;\n const savedHeaderScroll = headerScrollContainer?.scrollLeft ?? 0;\n const savedViewportScroll = viewport?.scrollLeft ?? 0;\n\n // Clear inline min-widths on ALL body rows. CDK virtual scroll recycles\n // <tr> DOM elements, so rows that were previously the \"first row\" retain\n // stale min-width styles. With table-layout: auto the column width is\n // determined by the widest cell across all visible rows, so stale\n // min-widths on any row prevent columns from ever shrinking.\n for (const row of allBodyRows) {\n const tds = row.cells;\n for (let i = 0; i < Math.min(tds.length, columnCount); i++) {\n tds[i].style.minWidth = '';\n }\n }\n for (let i = 0; i < columnCount; i++) {\n headerCells[i].style.minWidth = '';\n }\n\n // Temporarily force both tables to size to content only, overriding\n // Bootstrap's width:100% which causes table-layout:auto to redistribute\n // extra space across columns. Without this, measured widths include\n // redistributed space that varies with each data slice.\n const headerTable = el.querySelector<HTMLElement>('bs-table table');\n const bodyTable = el.querySelector<HTMLElement>('cdk-virtual-scroll-viewport table');\n headerTable?.style.setProperty('width', 'max-content', 'important');\n bodyTable?.style.setProperty('width', 'max-content', 'important');\n\n // Measure natural content widths across all visible rows\n for (let i = 0; i < columnCount; i++) {\n let colWidth = headerCells[i].offsetWidth;\n for (const row of allBodyRows) {\n const tds = row.cells;\n if (i < tds.length) {\n const w = tds[i].offsetWidth;\n if (w > colWidth) colWidth = w;\n }\n }\n // Update tracked maximum so columns only grow, never shrink\n if (!maxWidths[i] || colWidth > maxWidths[i]) {\n maxWidths[i] = colWidth;\n }\n }\n\n // Remove temporary width override so tables render normally\n headerTable?.style.removeProperty('width');\n bodyTable?.style.removeProperty('width');\n\n // Apply max widths to header and ALL body rows to keep them in sync.\n // Setting min-width on every row prevents table-layout:auto from\n // redistributing extra space differently across the two tables when\n // some rows contain placeholder content.\n for (let i = 0; i < columnCount; i++) {\n const w = `${maxWidths[i]}px`;\n headerCells[i].style.minWidth = w;\n for (const row of allBodyRows) {\n const tds = row.cells;\n if (i < tds.length) {\n tds[i].style.minWidth = w;\n }\n }\n }\n\n // Restore scroll positions after min-widths are re-applied\n if (headerScrollContainer) headerScrollContainer.scrollLeft = savedHeaderScroll;\n if (viewport) viewport.scrollLeft = savedViewportScroll;\n };\n\n // Sync after first render\n requestAnimationFrame(() => syncWidths());\n\n // Re-sync when body rows change (virtual scroll swaps rows)\n const observer = new MutationObserver(() => {\n requestAnimationFrame(() => syncWidths());\n });\n\n observer.observe(bodyTableBody, { childList: true, subtree: true });\n\n this.cleanup.push(() => observer.disconnect());\n }\n}\n","<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable()\"\n [class.sort-asc]=\"column.sortable() && getSortDirection(column.name()) === 'ascending'\"\n [class.sort-desc]=\"column.sortable() && getSortDirection(column.name()) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name()) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name()) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate()) {\n <ng-container *ngTemplateOutlet=\"rowTemplate()!; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td>&nbsp;</td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subject, Subscription, from, merge, of } from 'rxjs';\nimport { catchError, distinctUntilChanged, filter, map, startWith, switchMap } from 'rxjs/operators';\n\nexport class VirtualDatatableDataSource<T> extends DataSource<T> {\n private readonly fetchFn: (skip: number, take: number) => Promise<{ data: T[]; totalRecords: number }>;\n private readonly pageSize: number;\n private readonly cachedPages = new Map<number, T[]>();\n private totalRecords = 0;\n private dataStream = new BehaviorSubject<T[]>([]);\n private subscription?: Subscription;\n private resetSubject = new Subject<void>();\n private resetVersion = 0;\n\n constructor(\n fetchFn: (skip: number, take: number) => Promise<{ data: T[]; totalRecords: number }>,\n pageSize = 50\n ) {\n super();\n this.fetchFn = fetchFn;\n this.pageSize = pageSize;\n }\n\n connect(collectionViewer: CollectionViewer): Observable<T[]> {\n // Support reconnection after disconnect (which completes the previous dataStream)\n this.dataStream = new BehaviorSubject<T[]>([]);\n this.cachedPages.clear();\n this.totalRecords = 0;\n\n // Track the last viewport range so reset() can re-trigger a fetch.\n // resetVersion is incremented on reset() to bypass distinctUntilChanged.\n let lastRange = { start: 0, end: this.pageSize };\n this.subscription = merge(\n collectionViewer.viewChange.pipe(startWith(lastRange)),\n this.resetSubject.pipe(map(() => lastRange))\n ).pipe(\n filter(range => range.end > range.start),\n map(range => { lastRange = range; return { pages: this.getPageIndices(range), version: this.resetVersion }; }),\n distinctUntilChanged((a, b) => a.version === b.version && a.pages.join() === b.pages.join()),\n switchMap(({ pages }) => from(this.fetchPages(pages)).pipe(\n catchError(() => of(this.dataStream.value))\n ))\n ).subscribe(data => this.dataStream.next(data));\n\n return this.dataStream;\n }\n\n disconnect(): void {\n this.subscription?.unsubscribe();\n this.dataStream.complete();\n }\n\n get length(): number {\n return this.totalRecords;\n }\n\n reset(): void {\n this.cachedPages.clear();\n this.resetVersion++;\n this.resetSubject.next();\n }\n\n private getPageIndices(range: { start: number; end: number }): number[] {\n const startPage = Math.floor(range.start / this.pageSize);\n const endPage = Math.floor((range.end - 1) / this.pageSize);\n const pages: number[] = [];\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n return pages;\n }\n\n private async fetchPages(pageIndices: number[]): Promise<T[]> {\n const uncachedPages = pageIndices.filter(p => !this.cachedPages.has(p));\n\n const results = await Promise.all(\n uncachedPages.map(async pageIndex => {\n const skip = pageIndex * this.pageSize;\n const result = await this.fetchFn(skip, this.pageSize);\n return { pageIndex, result };\n })\n );\n\n for (const { pageIndex, result } of results) {\n this.cachedPages.set(pageIndex, result.data);\n }\n if (results.length > 0) {\n this.totalRecords = results[0].result.totalRecords;\n }\n\n // Build the full data array with placeholders for unloaded pages\n const totalPages = Math.ceil(this.totalRecords / this.pageSize);\n const data: T[] = [];\n for (let i = 0; i < totalPages; i++) {\n const page = this.cachedPages.get(i);\n if (page) {\n data.push(...page);\n } else {\n // Fill with empty slots to maintain correct virtual scroll positioning\n const remaining = Math.min(this.pageSize, this.totalRecords - i * this.pageSize);\n data.push(...new Array<T>(remaining));\n }\n }\n return data;\n }\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { BsVirtualDatatableComponent } from '../virtual-datatable/virtual-datatable.component';\n\n@Directive({\n selector: '[bsVirtualRowTemplate]',\n})\nexport class BsVirtualRowTemplateDirective<TData> {\n\n private datatableComponent = inject<BsVirtualDatatableComponent<TData>>(BsVirtualDatatableComponent);\n private templateRef = inject<TemplateRef<BsVirtualRowTemplateContext<TData>>>(TemplateRef);\n\n constructor() {\n this.datatableComponent.rowTemplate.set(this.templateRef);\n }\n\n public static ngTemplateContextGuard<TData>(\n dir: BsVirtualRowTemplateDirective<TData>,\n ctx: any\n ): ctx is BsVirtualRowTemplateContext<Exclude<TData, false | 0 | '' | null | undefined>> {\n return true;\n }\n}\n\nexport class BsVirtualRowTemplateContext<TData = unknown> {\n public $implicit: TData = null!;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mintplayer/ng-bootstrap",
3
3
  "private": false,
4
- "version": "21.12.12",
4
+ "version": "21.14.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/MintPlayer/mintplayer-ng-bootstrap",
@@ -24,10 +24,6 @@
24
24
  "types": "./types/mintplayer-ng-bootstrap-alert.d.ts",
25
25
  "default": "./fesm2022/mintplayer-ng-bootstrap-alert.mjs"
26
26
  },
27
- "./async-host-binding": {
28
- "types": "./types/mintplayer-ng-bootstrap-async-host-binding.d.ts",
29
- "default": "./fesm2022/mintplayer-ng-bootstrap-async-host-binding.mjs"
30
- },
31
27
  "./badge": {
32
28
  "types": "./types/mintplayer-ng-bootstrap-badge.d.ts",
33
29
  "default": "./fesm2022/mintplayer-ng-bootstrap-badge.mjs"
@@ -236,6 +232,10 @@
236
232
  "types": "./types/mintplayer-ng-bootstrap-popover.d.ts",
237
233
  "default": "./fesm2022/mintplayer-ng-bootstrap-popover.mjs"
238
234
  },
235
+ "./priority-nav": {
236
+ "types": "./types/mintplayer-ng-bootstrap-priority-nav.d.ts",
237
+ "default": "./fesm2022/mintplayer-ng-bootstrap-priority-nav.mjs"
238
+ },
239
239
  "./progress-bar": {
240
240
  "types": "./types/mintplayer-ng-bootstrap-progress-bar.d.ts",
241
241
  "default": "./fesm2022/mintplayer-ng-bootstrap-progress-bar.mjs"