@frame-ui-ng/components 0.5.0-beta.0 → 0.6.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/src/styles/_vars.css +2 -5
- package/accordion/src/styles/accordion.css +44 -30
- package/breadcrumb/src/styles/breadcrumb.css +12 -2
- package/button/src/styles/button.css +20 -66
- package/button-group/src/styles/button-group.css +0 -38
- package/calendar/src/styles/_vars.css +4 -0
- package/calendar/src/styles/calendar.css +26 -18
- package/carousel/src/styles/carousel.css +103 -89
- package/checkbox/src/styles/checkbox.css +14 -5
- package/collapsible/src/styles/_vars.css +1 -0
- package/collapsible/src/styles/collapsible.css +15 -11
- package/combobox/src/styles/combobox.css +11 -2
- package/confirm-popover/src/styles/confirm-popover.css +0 -1
- package/date-picker/src/styles/date-picker.css +15 -10
- package/dropdown-menu/src/styles/dropdown-menu-item.css +6 -2
- package/fesm2022/frame-ui-ng-components-accordion.mjs +201 -147
- package/fesm2022/frame-ui-ng-components-accordion.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-alert.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-alert.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-breadcrumb.mjs +10 -2
- package/fesm2022/frame-ui-ng-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-button-group.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-button-group.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-button.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-button.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-calendar.mjs +202 -50
- package/fesm2022/frame-ui-ng-components-calendar.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-card.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-card.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-carousel.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-carousel.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-collapsible.mjs +80 -22
- package/fesm2022/frame-ui-ng-components-collapsible.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-combobox.mjs +61 -6
- package/fesm2022/frame-ui-ng-components-combobox.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-command.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-command.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-confirm-popover.mjs +6 -6
- package/fesm2022/frame-ui-ng-components-confirm-popover.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-date-picker.mjs +75 -37
- package/fesm2022/frame-ui-ng-components-date-picker.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-dropdown-menu.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-empty.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-empty.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-hover-card.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-hover-card.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-input-otp.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-input-otp.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-input.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-input.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-item.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-item.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-menubar.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-menubar.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-modal.mjs +10 -4
- package/fesm2022/frame-ui-ng-components-modal.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-navigation-menu.mjs +4 -4
- package/fesm2022/frame-ui-ng-components-navigation-menu.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-pagination.mjs +20 -4
- package/fesm2022/frame-ui-ng-components-pagination.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-popover.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-popover.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-radio-group.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-radio-group.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-resizable.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-resizable.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-sheet.mjs +90 -65
- package/fesm2022/frame-ui-ng-components-sheet.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-table.mjs +6 -5
- package/fesm2022/frame-ui-ng-components-table.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-tabs.mjs +2 -2
- package/fesm2022/frame-ui-ng-components-tabs.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-toast.mjs +6 -6
- package/fesm2022/frame-ui-ng-components-toast.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-tooltip.mjs +6 -6
- package/fesm2022/frame-ui-ng-components-tooltip.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs +4 -4
- package/fesm2022/frame-ui-ng-components-virtual-scroll.mjs.map +1 -1
- package/fesm2022/frame-ui-ng-components.mjs +850 -420
- package/fesm2022/frame-ui-ng-components.mjs.map +1 -1
- package/input/src/styles/input-group.css +0 -7
- package/input/src/styles/input.css +0 -23
- package/modal/src/styles/modal.css +5 -19
- package/package.json +6 -6
- package/pagination/src/styles/pagination.css +6 -2
- package/popover/src/styles/popover.css +3 -3
- package/select/src/styles/select-item.css +67 -68
- package/sheet/src/styles/sheet.css +32 -19
- package/src/styles/components.css +2 -2
- package/src/styles/corner-handles.css +217 -0
- package/styles/components.css +2 -2
- package/styles/corner-handles.css +217 -0
- package/styles.css +2 -2
- package/toggle/src/styles/toggle.css +6 -1
- package/tooltip/src/styles/_vars.css +1 -1
- package/tooltip/src/styles/tooltip.css +13 -14
- package/types/frame-ui-ng-components-accordion.d.ts +69 -61
- package/types/frame-ui-ng-components-calendar.d.ts +7 -7
- package/types/frame-ui-ng-components-collapsible.d.ts +12 -4
- package/types/frame-ui-ng-components-combobox.d.ts +8 -0
- package/types/frame-ui-ng-components-date-picker.d.ts +2 -4
- package/types/frame-ui-ng-components-sheet.d.ts +6 -2
- package/types/frame-ui-ng-components.d.ts +172 -135
- package/src/styles/blueprint.css +0 -707
- package/styles/blueprint.css +0 -707
|
@@ -108,7 +108,7 @@ class FrVirtualViewport {
|
|
|
108
108
|
this.resizeObserver.observe(element);
|
|
109
109
|
}
|
|
110
110
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrVirtualViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
111
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrVirtualViewport, isStandalone: true, selector: "[frVirtualViewport], frame-virtual-viewport", inputs: { itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: true, transformFunction: null }, overscan: { classPropertyName: "overscan", publicName: "overscan", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "scroll": "handleScroll()" }, properties: { "style.block-size": "height()" }, classAttribute: "frame-virtual-scroll__viewport" }, exportAs: ["frVirtualViewport"], ngImport: i0 });
|
|
111
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.16", type: FrVirtualViewport, isStandalone: true, selector: "[frVirtualViewport], frame-virtual-viewport", inputs: { itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: true, transformFunction: null }, overscan: { classPropertyName: "overscan", publicName: "overscan", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "scroll": "handleScroll()" }, properties: { "style.block-size": "height()" }, classAttribute: "frame-virtual-scroll__viewport frame-corner-handles" }, exportAs: ["frVirtualViewport"], ngImport: i0 });
|
|
112
112
|
}
|
|
113
113
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrVirtualViewport, decorators: [{
|
|
114
114
|
type: Directive,
|
|
@@ -116,7 +116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
116
116
|
selector: '[frVirtualViewport], frame-virtual-viewport',
|
|
117
117
|
exportAs: 'frVirtualViewport',
|
|
118
118
|
host: {
|
|
119
|
-
class: 'frame-virtual-scroll__viewport',
|
|
119
|
+
class: 'frame-virtual-scroll__viewport frame-corner-handles',
|
|
120
120
|
'(scroll)': 'handleScroll()',
|
|
121
121
|
'[style.block-size]': 'height()',
|
|
122
122
|
},
|
|
@@ -234,14 +234,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
|
|
|
234
234
|
/** List wrapper for virtualized items. */
|
|
235
235
|
class FrVirtualList {
|
|
236
236
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrVirtualList, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
237
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrVirtualList, isStandalone: true, selector: "[frVirtualList], frame-virtual-list", host: { classAttribute: "frame-virtual-scroll__list" }, ngImport: i0 });
|
|
237
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.16", type: FrVirtualList, isStandalone: true, selector: "[frVirtualList], frame-virtual-list", host: { classAttribute: "frame-virtual-scroll__list frame-corner-handles" }, ngImport: i0 });
|
|
238
238
|
}
|
|
239
239
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: FrVirtualList, decorators: [{
|
|
240
240
|
type: Directive,
|
|
241
241
|
args: [{
|
|
242
242
|
selector: '[frVirtualList], frame-virtual-list',
|
|
243
243
|
host: {
|
|
244
|
-
class: 'frame-virtual-scroll__list',
|
|
244
|
+
class: 'frame-virtual-scroll__list frame-corner-handles',
|
|
245
245
|
},
|
|
246
246
|
}]
|
|
247
247
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame-ui-ng-components-virtual-scroll.mjs","sources":["../../../projects/components/virtual-scroll/src/virtual-scroll.engine.ts","../../../projects/components/virtual-scroll/src/virtual-scroll.viewport.ts","../../../projects/components/virtual-scroll/src/virtual-scroll.content.ts","../../../projects/components/virtual-scroll/src/virtual-scroll.for.ts","../../../projects/components/virtual-scroll/src/virtual-scroll.primitives.ts","../../../projects/components/virtual-scroll/virtual-scroll.module.ts","../../../projects/components/virtual-scroll/frame-ui-ng-components-virtual-scroll.ts"],"sourcesContent":["import { clampNumber } from '@frame-ui-ng/components/utils';\r\n\r\nexport interface FrVirtualRange {\r\n start: number;\r\n end: number;\r\n before: number;\r\n after: number;\r\n}\r\n\r\nexport interface FrVirtualRangeOptions {\r\n itemSize: number;\r\n overscan: number;\r\n scrollTop: number;\r\n totalCount: number;\r\n viewportSize: number;\r\n}\r\n\r\nexport type FrVirtualScrollAlignment = 'auto' | 'start' | 'center' | 'end' | 'nearest';\r\n\r\nexport function calculateVirtualRange(options: FrVirtualRangeOptions): FrVirtualRange {\r\n const itemSize = Math.max(options.itemSize, 1);\r\n const totalCount = Math.max(options.totalCount, 0);\r\n const viewportSize = Math.max(options.viewportSize, 0);\r\n const overscan = Math.max(Math.trunc(options.overscan), 0);\r\n const visibleCount = Math.max(Math.ceil(viewportSize / itemSize), 1);\r\n const rawStart = Math.floor(Math.max(options.scrollTop, 0) / itemSize) - overscan;\r\n const start = clampNumber(rawStart, 0, totalCount);\r\n const end = clampNumber(start + visibleCount + overscan * 2, start, totalCount);\r\n\r\n return {\r\n start,\r\n end,\r\n before: start * itemSize,\r\n after: Math.max(totalCount - end, 0) * itemSize,\r\n };\r\n}\r\n\r\nexport function calculateScrollOffsetForIndex(\r\n index: number,\r\n alignment: FrVirtualScrollAlignment,\r\n itemSize: number,\r\n viewportSize: number,\r\n totalCount: number,\r\n currentScrollTop: number,\r\n): number {\r\n const normalizedItemSize = Math.max(itemSize, 1);\r\n const normalizedViewportSize = Math.max(viewportSize, 0);\r\n const maxScrollTop = Math.max(totalCount * normalizedItemSize - normalizedViewportSize, 0);\r\n const clampedIndex = clampNumber(index, 0, Math.max(totalCount - 1, 0));\r\n const itemStart = clampedIndex * normalizedItemSize;\r\n const itemEnd = itemStart + normalizedItemSize;\r\n\r\n switch (alignment) {\r\n case 'start':\r\n return clampNumber(itemStart, 0, maxScrollTop);\r\n case 'center':\r\n return clampNumber(itemStart - (normalizedViewportSize - normalizedItemSize) / 2, 0, maxScrollTop);\r\n case 'end':\r\n return clampNumber(itemEnd - normalizedViewportSize, 0, maxScrollTop);\r\n case 'nearest':\r\n case 'auto':\r\n default:\r\n if (itemStart < currentScrollTop) {\r\n return clampNumber(itemStart, 0, maxScrollTop);\r\n }\r\n\r\n if (itemEnd > currentScrollTop + normalizedViewportSize) {\r\n return clampNumber(itemEnd - normalizedViewportSize, 0, maxScrollTop);\r\n }\r\n\r\n return clampNumber(currentScrollTop, 0, maxScrollTop);\r\n }\r\n}\r\n","import {\r\n Directive,\r\n DestroyRef,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport {\r\n FrVirtualScrollAlignment,\r\n calculateScrollOffsetForIndex,\r\n calculateVirtualRange,\r\n} from './virtual-scroll.engine';\r\n\r\n/** Viewport controller for virtual scrolling. */\r\n@Directive({\r\n selector: '[frVirtualViewport], frame-virtual-viewport',\r\n exportAs: 'frVirtualViewport',\r\n host: {\r\n class: 'frame-virtual-scroll__viewport',\r\n '(scroll)': 'handleScroll()',\r\n '[style.block-size]': 'height()',\r\n },\r\n})\r\nexport class FrVirtualViewport {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly scrollTop = signal(0);\r\n private readonly totalCount = signal(0);\r\n private readonly viewportSize = signal(0);\r\n private resizeObserver: ResizeObserver | null = null;\r\n\r\n readonly itemSize = input.required<number>();\r\n readonly overscan = input(4);\r\n readonly height = input<string | null>(null);\r\n\r\n readonly range = computed(() =>\r\n calculateVirtualRange({\r\n itemSize: this.itemSize(),\r\n overscan: this.overscan(),\r\n scrollTop: this.scrollTop(),\r\n totalCount: this.totalCount(),\r\n viewportSize: this.viewportSize(),\r\n }),\r\n );\r\n\r\n readonly before = computed(() => this.range().before);\r\n readonly after = computed(() => this.range().after);\r\n readonly startIndex = computed(() => this.range().start);\r\n readonly endIndex = computed(() => this.range().end);\r\n readonly renderedCount = computed(() => this.range().end - this.range().start);\r\n readonly totalSize = computed(() => this.totalCount() * Math.max(this.itemSize(), 1));\r\n\r\n constructor() {\r\n queueMicrotask(() => {\r\n this.measure();\r\n this.attachResizeObserver();\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n this.resizeObserver?.disconnect();\r\n });\r\n }\r\n\r\n setTotalCount(count: number): void {\r\n this.totalCount.set(Math.max(Math.trunc(count), 0));\r\n this.measure();\r\n }\r\n\r\n measure(): void {\r\n const element = this.elementRef.nativeElement;\r\n this.viewportSize.set(element.clientHeight);\r\n this.scrollTop.set(element.scrollTop);\r\n }\r\n\r\n scrollToIndex(index: number, alignment: FrVirtualScrollAlignment = 'auto'): void {\r\n const element = this.elementRef.nativeElement;\r\n // Virtual scrolling assumes fixed item heights, so index math can stay O(1).\r\n const nextScrollTop = calculateScrollOffsetForIndex(\r\n index,\r\n alignment,\r\n this.itemSize(),\r\n element.clientHeight,\r\n this.totalCount(),\r\n element.scrollTop,\r\n );\r\n\r\n element.scrollTop = nextScrollTop;\r\n this.scrollTop.set(nextScrollTop);\r\n }\r\n\r\n protected handleScroll(): void {\r\n this.scrollTop.set(this.elementRef.nativeElement.scrollTop);\r\n }\r\n\r\n private attachResizeObserver(): void {\r\n const element = this.elementRef.nativeElement;\r\n\r\n if (typeof ResizeObserver === 'undefined') {\r\n return;\r\n }\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.measure();\r\n });\r\n this.resizeObserver.observe(element);\r\n }\r\n}\r\n\r\n","import { Directive, computed, inject } from '@angular/core';\r\n\r\nimport { FrVirtualViewport } from './virtual-scroll.viewport';\r\n\r\n/** Measured content wrapper for virtual scrolling. */\r\n@Directive({\r\n selector: '[frVirtualContent], frame-virtual-content',\r\n host: {\r\n class: 'frame-virtual-scroll__content',\r\n '[style.padding-top.px]': 'before()',\r\n '[style.padding-bottom.px]': 'after()',\r\n },\r\n})\r\nexport class FrVirtualContent {\r\n private readonly viewport = inject(FrVirtualViewport);\r\n\r\n protected readonly before = computed(() => this.viewport.before());\r\n protected readonly after = computed(() => this.viewport.after());\r\n}\r\n\r\n","import {\r\n Directive,\r\n DoCheck,\r\n EmbeddedViewRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n computed,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nimport { FrVirtualViewport } from './virtual-scroll.viewport';\r\n\r\nexport interface FrVirtualForContext<T> {\r\n $implicit: T;\r\n count: number;\r\n even: boolean;\r\n first: boolean;\r\n index: number;\r\n last: boolean;\r\n odd: boolean;\r\n}\r\n\r\nexport type FrVirtualTrackBy<T> = (index: number, item: T) => unknown;\r\n\r\n/** Structural directive for rendering virtualized ranges. */\r\n@Directive({\r\n selector: '[frVirtualFor][frVirtualForOf]',\r\n})\r\nexport class FrVirtualFor<T> implements DoCheck {\r\n private readonly templateRef = inject<TemplateRef<FrVirtualForContext<T>>>(TemplateRef);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly viewport = inject(FrVirtualViewport);\r\n private readonly views: EmbeddedViewRef<FrVirtualForContext<T>>[] = [];\r\n\r\n readonly frVirtualForOf = input.required<readonly T[]>();\r\n readonly frVirtualForTrackBy = input<FrVirtualTrackBy<T> | null>(null);\r\n private lastRenderKey = '';\r\n\r\n private readonly slice = computed(() => {\r\n const items = this.frVirtualForOf();\r\n const start = this.viewport.startIndex();\r\n const end = this.viewport.endIndex();\r\n\r\n return {\r\n items,\r\n start,\r\n visible: items.slice(start, end),\r\n };\r\n });\r\n\r\n ngDoCheck(): void {\r\n const items = this.frVirtualForOf();\r\n const renderKey = [\r\n items,\r\n items.length,\r\n this.viewport.startIndex(),\r\n this.viewport.endIndex(),\r\n this.frVirtualForTrackBy(),\r\n ].map(String).join('|');\r\n\r\n this.viewport.setTotalCount(items.length);\r\n\r\n if (renderKey === this.lastRenderKey) {\r\n return;\r\n }\r\n\r\n this.lastRenderKey = renderKey;\r\n this.render();\r\n }\r\n\r\n static ngTemplateContextGuard<T>(\r\n _directive: FrVirtualFor<T>,\r\n _context: unknown,\r\n ): _context is FrVirtualForContext<T> {\r\n return true;\r\n }\r\n\r\n private render(): void {\r\n const { items, start, visible } = this.slice();\r\n const trackBy = this.frVirtualForTrackBy();\r\n\r\n while (this.views.length > visible.length) {\r\n this.viewContainerRef.remove(this.views.length - 1);\r\n this.views.pop();\r\n }\r\n\r\n for (let offset = 0; offset < visible.length; offset += 1) {\r\n const item = visible[offset]!;\r\n const index = start + offset;\r\n const view = this.views[offset] ?? this.createView(offset, item, index, items.length);\r\n const context = view.context;\r\n const identity = trackBy?.(index, item) ?? item;\r\n\r\n if ((view as EmbeddedViewRef<FrVirtualForContext<T>> & { __frameVirtualIdentity?: unknown }).__frameVirtualIdentity !== identity) {\r\n (view as EmbeddedViewRef<FrVirtualForContext<T>> & { __frameVirtualIdentity?: unknown }).__frameVirtualIdentity =\r\n identity;\r\n }\r\n\r\n context.$implicit = item;\r\n context.count = items.length;\r\n context.index = index;\r\n context.first = index === 0;\r\n context.last = index === items.length - 1;\r\n context.even = index % 2 === 0;\r\n context.odd = !context.even;\r\n view.detectChanges();\r\n }\r\n }\r\n\r\n private createView(\r\n offset: number,\r\n item: T,\r\n index: number,\r\n count: number,\r\n ): EmbeddedViewRef<FrVirtualForContext<T>> {\r\n const view = this.viewContainerRef.createEmbeddedView(\r\n this.templateRef,\r\n {\r\n $implicit: item,\r\n count,\r\n even: index % 2 === 0,\r\n first: index === 0,\r\n index,\r\n last: index === count - 1,\r\n odd: index % 2 !== 0,\r\n },\r\n offset,\r\n );\r\n\r\n this.views[offset] = view;\r\n return view;\r\n }\r\n}\r\n\r\n","import { Directive } from '@angular/core';\r\n\r\n/** List wrapper for virtualized items. */\r\n@Directive({\r\n selector: '[frVirtualList], frame-virtual-list',\r\n host: {\r\n class: 'frame-virtual-scroll__list',\r\n },\r\n})\r\nexport class FrVirtualList {}\r\n\r\n/** Panel wrapper for virtualized content. */\r\n@Directive({\r\n selector: '[frVirtualPanel], frame-virtual-panel',\r\n host: {\r\n class: 'frame-virtual-scroll__panel',\r\n },\r\n})\r\nexport class FrVirtualPanel {}\r\n\r\n/** Item wrapper for virtualized rows. */\r\n@Directive({\r\n selector: '[frVirtualItem], frame-virtual-item',\r\n host: {\r\n class: 'frame-virtual-scroll__item',\r\n },\r\n})\r\nexport class FrVirtualItem {}\r\n\r\n/** Meta slot for virtual item. */\r\n@Directive({\r\n selector: '[frVirtualItemMeta], frame-virtual-item-meta',\r\n host: {\r\n class: 'frame-virtual-scroll__item-meta',\r\n },\r\n})\r\nexport class FrVirtualItemMeta {}\r\n\r\n","import { NgModule } from '@angular/core';\nimport {\n FrVirtualContent,\n FrVirtualFor,\n FrVirtualItem,\n FrVirtualItemMeta,\n FrVirtualList,\n FrVirtualPanel,\n FrVirtualViewport,\n} from './src/virtual-scroll';\n\n@NgModule({\n imports: [\n FrVirtualContent,\n FrVirtualFor,\n FrVirtualItem,\n FrVirtualItemMeta,\n FrVirtualList,\n FrVirtualPanel,\n FrVirtualViewport,\n ],\n exports: [\n FrVirtualContent,\n FrVirtualFor,\n FrVirtualItem,\n FrVirtualItemMeta,\n FrVirtualList,\n FrVirtualPanel,\n FrVirtualViewport,\n ],\n})\nexport class FrVirtualScrollModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"frame-ui-ng-components-virtual-scroll.mjs","sources":["../../../projects/components/virtual-scroll/src/virtual-scroll.engine.ts","../../../projects/components/virtual-scroll/src/virtual-scroll.viewport.ts","../../../projects/components/virtual-scroll/src/virtual-scroll.content.ts","../../../projects/components/virtual-scroll/src/virtual-scroll.for.ts","../../../projects/components/virtual-scroll/src/virtual-scroll.primitives.ts","../../../projects/components/virtual-scroll/virtual-scroll.module.ts","../../../projects/components/virtual-scroll/frame-ui-ng-components-virtual-scroll.ts"],"sourcesContent":["import { clampNumber } from '@frame-ui-ng/components/utils';\r\n\r\nexport interface FrVirtualRange {\r\n start: number;\r\n end: number;\r\n before: number;\r\n after: number;\r\n}\r\n\r\nexport interface FrVirtualRangeOptions {\r\n itemSize: number;\r\n overscan: number;\r\n scrollTop: number;\r\n totalCount: number;\r\n viewportSize: number;\r\n}\r\n\r\nexport type FrVirtualScrollAlignment = 'auto' | 'start' | 'center' | 'end' | 'nearest';\r\n\r\nexport function calculateVirtualRange(options: FrVirtualRangeOptions): FrVirtualRange {\r\n const itemSize = Math.max(options.itemSize, 1);\r\n const totalCount = Math.max(options.totalCount, 0);\r\n const viewportSize = Math.max(options.viewportSize, 0);\r\n const overscan = Math.max(Math.trunc(options.overscan), 0);\r\n const visibleCount = Math.max(Math.ceil(viewportSize / itemSize), 1);\r\n const rawStart = Math.floor(Math.max(options.scrollTop, 0) / itemSize) - overscan;\r\n const start = clampNumber(rawStart, 0, totalCount);\r\n const end = clampNumber(start + visibleCount + overscan * 2, start, totalCount);\r\n\r\n return {\r\n start,\r\n end,\r\n before: start * itemSize,\r\n after: Math.max(totalCount - end, 0) * itemSize,\r\n };\r\n}\r\n\r\nexport function calculateScrollOffsetForIndex(\r\n index: number,\r\n alignment: FrVirtualScrollAlignment,\r\n itemSize: number,\r\n viewportSize: number,\r\n totalCount: number,\r\n currentScrollTop: number,\r\n): number {\r\n const normalizedItemSize = Math.max(itemSize, 1);\r\n const normalizedViewportSize = Math.max(viewportSize, 0);\r\n const maxScrollTop = Math.max(totalCount * normalizedItemSize - normalizedViewportSize, 0);\r\n const clampedIndex = clampNumber(index, 0, Math.max(totalCount - 1, 0));\r\n const itemStart = clampedIndex * normalizedItemSize;\r\n const itemEnd = itemStart + normalizedItemSize;\r\n\r\n switch (alignment) {\r\n case 'start':\r\n return clampNumber(itemStart, 0, maxScrollTop);\r\n case 'center':\r\n return clampNumber(itemStart - (normalizedViewportSize - normalizedItemSize) / 2, 0, maxScrollTop);\r\n case 'end':\r\n return clampNumber(itemEnd - normalizedViewportSize, 0, maxScrollTop);\r\n case 'nearest':\r\n case 'auto':\r\n default:\r\n if (itemStart < currentScrollTop) {\r\n return clampNumber(itemStart, 0, maxScrollTop);\r\n }\r\n\r\n if (itemEnd > currentScrollTop + normalizedViewportSize) {\r\n return clampNumber(itemEnd - normalizedViewportSize, 0, maxScrollTop);\r\n }\r\n\r\n return clampNumber(currentScrollTop, 0, maxScrollTop);\r\n }\r\n}\r\n","import {\r\n Directive,\r\n DestroyRef,\r\n ElementRef,\r\n computed,\r\n inject,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\n\r\nimport {\r\n FrVirtualScrollAlignment,\r\n calculateScrollOffsetForIndex,\r\n calculateVirtualRange,\r\n} from './virtual-scroll.engine';\r\n\r\n/** Viewport controller for virtual scrolling. */\r\n@Directive({\r\n selector: '[frVirtualViewport], frame-virtual-viewport',\r\n exportAs: 'frVirtualViewport',\r\n host: {\r\n class: 'frame-virtual-scroll__viewport frame-corner-handles',\r\n '(scroll)': 'handleScroll()',\r\n '[style.block-size]': 'height()',\r\n },\r\n})\r\nexport class FrVirtualViewport {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n private readonly scrollTop = signal(0);\r\n private readonly totalCount = signal(0);\r\n private readonly viewportSize = signal(0);\r\n private resizeObserver: ResizeObserver | null = null;\r\n\r\n readonly itemSize = input.required<number>();\r\n readonly overscan = input(4);\r\n readonly height = input<string | null>(null);\r\n\r\n readonly range = computed(() =>\r\n calculateVirtualRange({\r\n itemSize: this.itemSize(),\r\n overscan: this.overscan(),\r\n scrollTop: this.scrollTop(),\r\n totalCount: this.totalCount(),\r\n viewportSize: this.viewportSize(),\r\n }),\r\n );\r\n\r\n readonly before = computed(() => this.range().before);\r\n readonly after = computed(() => this.range().after);\r\n readonly startIndex = computed(() => this.range().start);\r\n readonly endIndex = computed(() => this.range().end);\r\n readonly renderedCount = computed(() => this.range().end - this.range().start);\r\n readonly totalSize = computed(() => this.totalCount() * Math.max(this.itemSize(), 1));\r\n\r\n constructor() {\r\n queueMicrotask(() => {\r\n this.measure();\r\n this.attachResizeObserver();\r\n });\r\n\r\n this.destroyRef.onDestroy(() => {\r\n this.resizeObserver?.disconnect();\r\n });\r\n }\r\n\r\n setTotalCount(count: number): void {\r\n this.totalCount.set(Math.max(Math.trunc(count), 0));\r\n this.measure();\r\n }\r\n\r\n measure(): void {\r\n const element = this.elementRef.nativeElement;\r\n this.viewportSize.set(element.clientHeight);\r\n this.scrollTop.set(element.scrollTop);\r\n }\r\n\r\n scrollToIndex(index: number, alignment: FrVirtualScrollAlignment = 'auto'): void {\r\n const element = this.elementRef.nativeElement;\r\n // Virtual scrolling assumes fixed item heights, so index math can stay O(1).\r\n const nextScrollTop = calculateScrollOffsetForIndex(\r\n index,\r\n alignment,\r\n this.itemSize(),\r\n element.clientHeight,\r\n this.totalCount(),\r\n element.scrollTop,\r\n );\r\n\r\n element.scrollTop = nextScrollTop;\r\n this.scrollTop.set(nextScrollTop);\r\n }\r\n\r\n protected handleScroll(): void {\r\n this.scrollTop.set(this.elementRef.nativeElement.scrollTop);\r\n }\r\n\r\n private attachResizeObserver(): void {\r\n const element = this.elementRef.nativeElement;\r\n\r\n if (typeof ResizeObserver === 'undefined') {\r\n return;\r\n }\r\n\r\n this.resizeObserver = new ResizeObserver(() => {\r\n this.measure();\r\n });\r\n this.resizeObserver.observe(element);\r\n }\r\n}\r\n\r\n","import { Directive, computed, inject } from '@angular/core';\r\n\r\nimport { FrVirtualViewport } from './virtual-scroll.viewport';\r\n\r\n/** Measured content wrapper for virtual scrolling. */\r\n@Directive({\r\n selector: '[frVirtualContent], frame-virtual-content',\r\n host: {\r\n class: 'frame-virtual-scroll__content',\r\n '[style.padding-top.px]': 'before()',\r\n '[style.padding-bottom.px]': 'after()',\r\n },\r\n})\r\nexport class FrVirtualContent {\r\n private readonly viewport = inject(FrVirtualViewport);\r\n\r\n protected readonly before = computed(() => this.viewport.before());\r\n protected readonly after = computed(() => this.viewport.after());\r\n}\r\n\r\n","import {\r\n Directive,\r\n DoCheck,\r\n EmbeddedViewRef,\r\n TemplateRef,\r\n ViewContainerRef,\r\n computed,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\n\r\nimport { FrVirtualViewport } from './virtual-scroll.viewport';\r\n\r\nexport interface FrVirtualForContext<T> {\r\n $implicit: T;\r\n count: number;\r\n even: boolean;\r\n first: boolean;\r\n index: number;\r\n last: boolean;\r\n odd: boolean;\r\n}\r\n\r\nexport type FrVirtualTrackBy<T> = (index: number, item: T) => unknown;\r\n\r\n/** Structural directive for rendering virtualized ranges. */\r\n@Directive({\r\n selector: '[frVirtualFor][frVirtualForOf]',\r\n})\r\nexport class FrVirtualFor<T> implements DoCheck {\r\n private readonly templateRef = inject<TemplateRef<FrVirtualForContext<T>>>(TemplateRef);\r\n private readonly viewContainerRef = inject(ViewContainerRef);\r\n private readonly viewport = inject(FrVirtualViewport);\r\n private readonly views: EmbeddedViewRef<FrVirtualForContext<T>>[] = [];\r\n\r\n readonly frVirtualForOf = input.required<readonly T[]>();\r\n readonly frVirtualForTrackBy = input<FrVirtualTrackBy<T> | null>(null);\r\n private lastRenderKey = '';\r\n\r\n private readonly slice = computed(() => {\r\n const items = this.frVirtualForOf();\r\n const start = this.viewport.startIndex();\r\n const end = this.viewport.endIndex();\r\n\r\n return {\r\n items,\r\n start,\r\n visible: items.slice(start, end),\r\n };\r\n });\r\n\r\n ngDoCheck(): void {\r\n const items = this.frVirtualForOf();\r\n const renderKey = [\r\n items,\r\n items.length,\r\n this.viewport.startIndex(),\r\n this.viewport.endIndex(),\r\n this.frVirtualForTrackBy(),\r\n ].map(String).join('|');\r\n\r\n this.viewport.setTotalCount(items.length);\r\n\r\n if (renderKey === this.lastRenderKey) {\r\n return;\r\n }\r\n\r\n this.lastRenderKey = renderKey;\r\n this.render();\r\n }\r\n\r\n static ngTemplateContextGuard<T>(\r\n _directive: FrVirtualFor<T>,\r\n _context: unknown,\r\n ): _context is FrVirtualForContext<T> {\r\n return true;\r\n }\r\n\r\n private render(): void {\r\n const { items, start, visible } = this.slice();\r\n const trackBy = this.frVirtualForTrackBy();\r\n\r\n while (this.views.length > visible.length) {\r\n this.viewContainerRef.remove(this.views.length - 1);\r\n this.views.pop();\r\n }\r\n\r\n for (let offset = 0; offset < visible.length; offset += 1) {\r\n const item = visible[offset]!;\r\n const index = start + offset;\r\n const view = this.views[offset] ?? this.createView(offset, item, index, items.length);\r\n const context = view.context;\r\n const identity = trackBy?.(index, item) ?? item;\r\n\r\n if ((view as EmbeddedViewRef<FrVirtualForContext<T>> & { __frameVirtualIdentity?: unknown }).__frameVirtualIdentity !== identity) {\r\n (view as EmbeddedViewRef<FrVirtualForContext<T>> & { __frameVirtualIdentity?: unknown }).__frameVirtualIdentity =\r\n identity;\r\n }\r\n\r\n context.$implicit = item;\r\n context.count = items.length;\r\n context.index = index;\r\n context.first = index === 0;\r\n context.last = index === items.length - 1;\r\n context.even = index % 2 === 0;\r\n context.odd = !context.even;\r\n view.detectChanges();\r\n }\r\n }\r\n\r\n private createView(\r\n offset: number,\r\n item: T,\r\n index: number,\r\n count: number,\r\n ): EmbeddedViewRef<FrVirtualForContext<T>> {\r\n const view = this.viewContainerRef.createEmbeddedView(\r\n this.templateRef,\r\n {\r\n $implicit: item,\r\n count,\r\n even: index % 2 === 0,\r\n first: index === 0,\r\n index,\r\n last: index === count - 1,\r\n odd: index % 2 !== 0,\r\n },\r\n offset,\r\n );\r\n\r\n this.views[offset] = view;\r\n return view;\r\n }\r\n}\r\n\r\n","import { Directive } from '@angular/core';\r\n\r\n/** List wrapper for virtualized items. */\r\n@Directive({\r\n selector: '[frVirtualList], frame-virtual-list',\r\n host: {\r\n class: 'frame-virtual-scroll__list frame-corner-handles',\r\n },\r\n})\r\nexport class FrVirtualList {}\r\n\r\n/** Panel wrapper for virtualized content. */\r\n@Directive({\r\n selector: '[frVirtualPanel], frame-virtual-panel',\r\n host: {\r\n class: 'frame-virtual-scroll__panel',\r\n },\r\n})\r\nexport class FrVirtualPanel {}\r\n\r\n/** Item wrapper for virtualized rows. */\r\n@Directive({\r\n selector: '[frVirtualItem], frame-virtual-item',\r\n host: {\r\n class: 'frame-virtual-scroll__item',\r\n },\r\n})\r\nexport class FrVirtualItem {}\r\n\r\n/** Meta slot for virtual item. */\r\n@Directive({\r\n selector: '[frVirtualItemMeta], frame-virtual-item-meta',\r\n host: {\r\n class: 'frame-virtual-scroll__item-meta',\r\n },\r\n})\r\nexport class FrVirtualItemMeta {}\r\n\r\n","import { NgModule } from '@angular/core';\nimport {\n FrVirtualContent,\n FrVirtualFor,\n FrVirtualItem,\n FrVirtualItemMeta,\n FrVirtualList,\n FrVirtualPanel,\n FrVirtualViewport,\n} from './src/virtual-scroll';\n\n@NgModule({\n imports: [\n FrVirtualContent,\n FrVirtualFor,\n FrVirtualItem,\n FrVirtualItemMeta,\n FrVirtualList,\n FrVirtualPanel,\n FrVirtualViewport,\n ],\n exports: [\n FrVirtualContent,\n FrVirtualFor,\n FrVirtualItem,\n FrVirtualItemMeta,\n FrVirtualList,\n FrVirtualPanel,\n FrVirtualViewport,\n ],\n})\nexport class FrVirtualScrollModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|