igniteui-angular 22.1.4 → 22.2.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/combo/README.md +19 -0
- package/drop-down/README.md +40 -4
- package/fesm2022/igniteui-angular-accordion.mjs +7 -7
- package/fesm2022/igniteui-angular-action-strip.mjs +10 -10
- package/fesm2022/igniteui-angular-avatar.mjs +7 -7
- package/fesm2022/igniteui-angular-badge.mjs +7 -7
- package/fesm2022/igniteui-angular-banner.mjs +10 -10
- package/fesm2022/igniteui-angular-bottom-nav.mjs +22 -22
- package/fesm2022/igniteui-angular-button-group.mjs +12 -13
- package/fesm2022/igniteui-angular-button-group.mjs.map +1 -1
- package/fesm2022/igniteui-angular-calendar.mjs +61 -61
- package/fesm2022/igniteui-angular-card.mjs +31 -31
- package/fesm2022/igniteui-angular-carousel.mjs +22 -22
- package/fesm2022/igniteui-angular-chat-extras.mjs +6 -6
- package/fesm2022/igniteui-angular-chat.mjs +12 -12
- package/fesm2022/igniteui-angular-checkbox.mjs +7 -7
- package/fesm2022/igniteui-angular-chips.mjs +10 -10
- package/fesm2022/igniteui-angular-combo.mjs +268 -120
- package/fesm2022/igniteui-angular-combo.mjs.map +1 -1
- package/fesm2022/igniteui-angular-core.mjs +188 -59
- package/fesm2022/igniteui-angular-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-date-picker.mjs +71 -80
- package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-dialog.mjs +13 -13
- package/fesm2022/igniteui-angular-directives.mjs +321 -457
- package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
- package/fesm2022/igniteui-angular-drop-down.mjs +331 -104
- package/fesm2022/igniteui-angular-drop-down.mjs.map +1 -1
- package/fesm2022/igniteui-angular-expansion-panel.mjs +28 -28
- package/fesm2022/igniteui-angular-grids-core.mjs +552 -516
- package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-grid.mjs +79 -80
- package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +59 -46
- package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-lite.mjs +12 -12
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +113 -86
- package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs +57 -57
- package/fesm2022/igniteui-angular-grids-tree-grid.mjs.map +1 -1
- package/fesm2022/igniteui-angular-icon.mjs +10 -10
- package/fesm2022/igniteui-angular-input-group.mjs +47 -61
- package/fesm2022/igniteui-angular-input-group.mjs.map +1 -1
- package/fesm2022/igniteui-angular-list.mjs +40 -40
- package/fesm2022/igniteui-angular-navbar.mjs +13 -13
- package/fesm2022/igniteui-angular-navigation-drawer.mjs +16 -16
- package/fesm2022/igniteui-angular-paginator.mjs +19 -19
- package/fesm2022/igniteui-angular-progressbar.mjs +19 -19
- package/fesm2022/igniteui-angular-query-builder.mjs +23 -23
- package/fesm2022/igniteui-angular-query-builder.mjs.map +1 -1
- package/fesm2022/igniteui-angular-radio.mjs +59 -35
- package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
- package/fesm2022/igniteui-angular-select.mjs +35 -43
- package/fesm2022/igniteui-angular-select.mjs.map +1 -1
- package/fesm2022/igniteui-angular-simple-combo.mjs +44 -33
- package/fesm2022/igniteui-angular-simple-combo.mjs.map +1 -1
- package/fesm2022/igniteui-angular-slider.mjs +28 -28
- package/fesm2022/igniteui-angular-snackbar.mjs +7 -7
- package/fesm2022/igniteui-angular-splitter.mjs +13 -13
- package/fesm2022/igniteui-angular-stepper.mjs +34 -34
- package/fesm2022/igniteui-angular-switch.mjs +7 -7
- package/fesm2022/igniteui-angular-tabs.mjs +34 -34
- package/fesm2022/igniteui-angular-time-picker.mjs +29 -38
- package/fesm2022/igniteui-angular-time-picker.mjs.map +1 -1
- package/fesm2022/igniteui-angular-toast.mjs +7 -7
- package/fesm2022/igniteui-angular-tree.mjs +28 -28
- package/fesm2022/igniteui-angular-virtual-scroll.mjs +1257 -0
- package/fesm2022/igniteui-angular-virtual-scroll.mjs.map +1 -0
- package/fesm2022/igniteui-angular.mjs +1 -0
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/input-group/README.md +2 -0
- package/lib/core/styles/components/scrollbar/scrollbar-component.scss +0 -2
- package/lib/core/styles/components/scrollbar/scrollbar-theme.scss +23 -51
- package/lib/grids/core/src/column-actions/themes/_derived.scss +3 -3
- package/lib/grids/core/src/filtering/excel-style/themes/_derived.scss +3 -3
- package/lib/grids/themes/_derived.scss +3 -3
- package/lib/query-builder/src/query-builder/themes/_derived.scss +3 -3
- package/migrations/migration-collection.json +10 -0
- package/migrations/update-22_2_0/changes/theme-changes.json +77 -0
- package/migrations/update-22_2_0/index.d.ts +3 -0
- package/migrations/update-22_2_0/index.js +18 -0
- package/migrations/update-22_2_0/index.spec.d.ts +1 -0
- package/migrations/update-22_2_0/index.spec.js +88 -0
- package/migrations/update-22_2_0_grid-summary-borders/changes/theme-changes.json +17 -0
- package/migrations/update-22_2_0_grid-summary-borders/index.d.ts +3 -0
- package/migrations/update-22_2_0_grid-summary-borders/index.js +64 -0
- package/migrations/update-22_2_0_grid-summary-borders/index.spec.d.ts +1 -0
- package/migrations/update-22_2_0_grid-summary-borders/index.spec.js +100 -0
- package/package.json +6 -2
- package/schematics/tsconfig.tsbuildinfo +1 -1
- package/simple-combo/README.md +3 -0
- package/skills/igniteui-angular-components/references/form-controls.md +58 -0
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
- package/types/igniteui-angular-calendar.d.ts +1 -1
- package/types/igniteui-angular-combo.d.ts +55 -12
- package/types/igniteui-angular-core.d.ts +64 -11
- package/types/igniteui-angular-date-picker.d.ts +3 -4
- package/types/igniteui-angular-directives.d.ts +50 -164
- package/types/igniteui-angular-drop-down.d.ts +76 -4
- package/types/igniteui-angular-grids-core.d.ts +63 -28
- package/types/igniteui-angular-grids-grid.d.ts +2 -7
- package/types/igniteui-angular-grids-hierarchical-grid.d.ts +5 -4
- package/types/igniteui-angular-grids-pivot-grid.d.ts +11 -5
- package/types/igniteui-angular-grids-tree-grid.d.ts +1 -1
- package/types/igniteui-angular-icon.d.ts +1 -1
- package/types/igniteui-angular-input-group.d.ts +1 -2
- package/types/igniteui-angular-query-builder.d.ts +1 -1
- package/types/igniteui-angular-radio.d.ts +16 -1
- package/types/igniteui-angular-select.d.ts +1 -2
- package/types/igniteui-angular-simple-combo.d.ts +7 -0
- package/types/igniteui-angular-stepper.d.ts +1 -1
- package/types/igniteui-angular-time-picker.d.ts +1 -2
- package/types/igniteui-angular-tree.d.ts +3 -3
- package/types/igniteui-angular-virtual-scroll.d.ts +408 -0
- package/types/igniteui-angular.d.ts +1 -0
- package/virtual-scroll/README.md +332 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"igniteui-angular-virtual-scroll.mjs","sources":["../../../projects/igniteui-angular/virtual-scroll/src/virtual-scroll/scroll-engine.ts","../../../projects/igniteui-angular/virtual-scroll/src/virtual-scroll/types.ts","../../../projects/igniteui-angular/virtual-scroll/src/virtual-scroll/virtual-scroll-item.directive.ts","../../../projects/igniteui-angular/virtual-scroll/src/virtual-scroll/virtual-scroll.component.ts","../../../projects/igniteui-angular/virtual-scroll/src/virtual-scroll/virtual-scroll.component.html","../../../projects/igniteui-angular/virtual-scroll/src/igniteui-angular-virtual-scroll.ts"],"sourcesContent":["import { computed, signal } from \"@angular/core\";\nimport { clamp } from \"igniteui-angular/core\";\nimport type { ScrollAlignment, VisibleRange } from \"./types\";\n\n/** The maximum scroll coordinate is a per-document constant, so probe once. */\nconst _maxBrowserSizeCache = new WeakMap<Document, number>();\n\n/** Measures the largest scroll coordinate the browser can represent. */\nfunction probeMaxBrowserSize(doc: Document): number {\n const cached = _maxBrowserSizeCache.get(doc);\n if (cached !== undefined) {\n return cached;\n }\n\n const container = doc.body ?? doc.documentElement;\n if (!container) {\n return Number.POSITIVE_INFINITY;\n }\n\n const probe = doc.createElement(\"div\");\n probe.style.position = \"absolute\";\n probe.style.top = `${Number.MAX_SAFE_INTEGER}px`;\n probe.style.width = \"0\";\n probe.style.height = \"0\";\n probe.style.visibility = \"hidden\";\n container.appendChild(probe);\n\n // The rect is viewport relative, so add back how far the document is scrolled.\n const scrollOffset = doc.documentElement?.scrollTop ?? 0;\n const size = Math.abs(probe.getBoundingClientRect().top) + scrollOffset;\n container.removeChild(probe);\n\n _maxBrowserSizeCache.set(doc, size);\n return size;\n}\n\n/**\n * Fills `tree` with the partial range sums of `sizes` in one O(N) pass.\n * `tree` is a 1-indexed Fenwick array of `sizes.length + 1` zeroed entries.\n * Returns the total sum.\n */\nfunction buildTree(tree: Float64Array, sizes: Float64Array): number {\n const length = sizes.length;\n let total = 0;\n\n for (let i = 1; i <= length; i++) {\n tree[i] += sizes[i - 1];\n total += sizes[i - 1];\n\n const parent = i + (i & -i);\n if (parent <= length) {\n tree[parent] += tree[i];\n }\n }\n return total;\n}\n\n/**\n * Binary Indexed Tree (Fenwick tree) over item sizes. Each hot-path operation\n * is O(log N): point update (item measured), prefix sum (scroll offset), and\n * index at offset (scroll to item, through binary lifting).\n */\nclass SizeTree {\n public readonly length: number;\n\n /** A 1-indexed BIT. Each cell holds a partial range sum. */\n private readonly _tree: Float64Array;\n\n /** Raw per-item sizes, 0-indexed. Kept for O(1) reads and delta calculation. */\n private readonly _sizes: Float64Array;\n\n /**\n * Flags the indices holding a DOM-measured size (`1`) instead of an\n * estimate (`0`). `applyEstimate` changes only the estimated entries.\n */\n private readonly _measured: Uint8Array;\n\n /** Running total. Updated together with the tree in O(1). */\n private _total: number;\n\n /**\n * The highest power of two <= `length`, for the binary lifting in\n * `findIndexAtOffset`. Precomputed because that runs on each scroll event.\n */\n private readonly _topBit: number;\n\n private constructor(\n sizes: Float64Array,\n tree: Float64Array,\n total: number,\n measured: Uint8Array,\n ) {\n this.length = sizes.length;\n this._sizes = sizes;\n this._tree = tree;\n this._total = total;\n this._measured = measured;\n this._topBit = this.length > 0 ? 1 << (31 - Math.clz32(this.length)) : 0;\n }\n\n /** Creates a tree of `length` unmeasured items, each set to `fillSize`. O(N). */\n public static filled(length: number, fillSize: number): SizeTree {\n return SizeTree._build(\n new Float64Array(length).fill(fillSize),\n new Uint8Array(length),\n );\n }\n\n /** Builds a tree from a sizes array and its matching measured flags. O(N). */\n private static _build(sizes: Float64Array, measured: Uint8Array): SizeTree {\n const tree = new Float64Array(sizes.length + 1);\n const total = buildTree(tree, sizes);\n return new SizeTree(sizes, tree, total, measured);\n }\n\n /** Total size of all items. O(1). */\n public get totalSize(): number {\n return this._total;\n }\n\n /**\n * Prefix sum of items [0, i): the virtual scroll offset at the leading\n * edge of item i. O(log N).\n */\n public prefixSum(i: number): number {\n let sum = 0;\n for (let j = i; j > 0; j -= j & -j) {\n sum += this._tree[j];\n }\n return sum;\n }\n\n /**\n * Sets the size of the item at a 0-based index and marks it measured, so\n * later `applyEstimate` calls leave it alone. Returns true when the size\n * changed. O(log N).\n */\n public update(index: number, newSize: number): boolean {\n if (index < 0 || index >= this.length) {\n return false;\n }\n\n const old = this._sizes[index];\n this._measured[index] = 1;\n\n if (old === newSize) {\n return false;\n }\n\n const delta = newSize - old;\n this._sizes[index] = newSize;\n this._total += delta;\n\n for (let i = index + 1; i <= this.length; i += i & -i) {\n this._tree[i] += delta;\n }\n return true;\n }\n\n /**\n * Returns a new tree of `newLength` items in one O(N) pass. Sizes and\n * measured flags are kept up to `min(this.length, newLength, retainCount)`.\n * The remainder is filled with `fillSize` and marked unmeasured. Pass a\n * `retainCount` below the item count when the data behind those indices\n * changed identity.\n */\n public cloneResized(\n newLength: number,\n fillSize: number,\n retainCount = newLength,\n ): SizeTree {\n const sizes = new Float64Array(newLength).fill(fillSize);\n const measured = new Uint8Array(newLength);\n const retained = Math.max(0, Math.min(this.length, newLength, retainCount));\n\n sizes.set(this._sizes.subarray(0, retained));\n measured.set(this._measured.subarray(0, retained));\n return SizeTree._build(sizes, measured);\n }\n\n /**\n * Sets `estimatedSize` on each unmeasured item. Returns true when at least\n * one size changed.\n *\n * One estimate change can touch most of the list, so this rebuilds in one\n * O(N) pass instead of one O(log N) `update` per item.\n */\n public applyEstimate(estimatedSize: number): boolean {\n let changed = false;\n\n for (let i = 0; i < this.length; i++) {\n if (!this._measured[i] && this._sizes[i] !== estimatedSize) {\n this._sizes[i] = estimatedSize;\n changed = true;\n }\n }\n\n if (!changed) {\n return false;\n }\n\n this._tree.fill(0);\n this._total = buildTree(this._tree, this._sizes);\n return true;\n }\n\n /**\n * Returns the 0-based index of the item containing the scroll `offset`:\n * the largest i where `prefixSum(i) <= offset < prefixSum(i + 1)`. O(log N).\n */\n public findIndexAtOffset(offset: number): number {\n if (offset <= 0 || this.length === 0) {\n return 0;\n }\n\n let index = 0;\n let remaining = offset;\n\n for (let bit = this._topBit; bit > 0; bit >>= 1) {\n const next = index + bit;\n if (next <= this.length && this._tree[next] <= remaining) {\n index = next;\n remaining -= this._tree[index];\n }\n }\n return Math.min(this.length - 1, index);\n }\n}\n\n/**\n * Pure scroll-math engine for one axis of virtual scrolling. A Fenwick tree\n * holds all size state, exposed through signals so downstream `computed()`\n * values (visible range, spacer size, translate offset) react to any change\n * of item sizes or item count.\n *\n * ### Virtual and DOM coordinates\n *\n * Browsers limit how far an element can scroll. When the total item size is\n * larger than that limit, the engine maps the *virtual* scroll range\n * (`0…totalSize - viewport`) onto the *DOM* scroll range the browser can\n * represent (`0…domSize - viewport`), see `_scrollRanges`. Incoming scroll\n * positions are converted to virtual offsets, outgoing offsets to DOM ones.\n * Items render at their real pixel size, so item sizes are always virtual.\n */\nexport class VirtualScrollEngine {\n private _maxBrowserSize = Number.POSITIVE_INFINITY;\n\n private _tree: SizeTree | null = null;\n\n /** Bumped on every structural change: resize, measurement or estimate. */\n private readonly _version = signal(0);\n\n /**\n * Read this from a `computed()` to make it recompute on any size change.\n * `totalSize` and `domSize` already do.\n */\n public readonly version = this._version.asReadonly();\n\n /** Total virtual size of all items in px. */\n public readonly totalSize = computed<number>(() => {\n this._version();\n return this._tree?.totalSize ?? 0;\n });\n\n /**\n * Total size in DOM space, clamped to the maximum browser size.\n *\n * Depends on `_version` directly rather than on `totalSize()`. The maximum\n * can change while the total does not (it is probed after the first\n * render), and an unchanged `totalSize` would not propagate.\n */\n public readonly domSize = computed<number>(() => {\n this._version();\n return Math.min(this._tree?.totalSize ?? 0, this._maxBrowserSize);\n });\n\n /**\n * Probes the document's maximum scroll coordinate and rescales. Notifies,\n * because the probe can only run after the first render, by which point\n * `domSize` has already been read at the uncompressed total.\n */\n public initMaxBrowserSize(doc: Document): void {\n this._maxBrowserSize = probeMaxBrowserSize(doc);\n this._invalidate();\n }\n\n /**\n * Resizes the internal sizes array to `length`. Measured sizes below\n * `retainCount` are kept, the remainder falls back to `estimatedSize`.\n * Callers that only append can keep the default `retainCount`. Callers\n * whose data changed identity at some index must pass that index, so the\n * stale measurements after it are discarded.\n */\n public resize(\n length: number,\n estimatedSize: number,\n retainCount = length,\n ): void {\n if (this._tree?.length === length && retainCount >= length) {\n return;\n }\n\n this._tree = this._tree\n ? this._tree.cloneResized(length, estimatedSize, retainCount)\n : SizeTree.filled(length, estimatedSize);\n this._invalidate();\n }\n\n /** Records the measured DOM size for a single item. */\n public measureItem(index: number, size: number): void {\n if (this._tree?.update(index, size)) {\n this._invalidate();\n }\n }\n\n /**\n * Applies a new estimate to every item not yet measured in the DOM. Use\n * this when `estimatedItemSize` changes but the item count does not,\n * because `resize` is then a no-op.\n */\n public updateEstimatedSize(estimatedSize: number): void {\n if (this._tree?.applyEstimate(estimatedSize)) {\n this._invalidate();\n }\n }\n\n /**\n * Returns the DOM scroll offset in px that puts the item at `index` at the\n * leading edge of a `viewportSize` px viewport.\n */\n public getScrollOffsetForIndex(index: number, viewportSize: number): number {\n if (!this._tree || index <= 0) {\n return 0;\n }\n return this._toDom(\n this._tree.prefixSum(Math.min(index, this._tree.length)),\n viewportSize,\n );\n }\n\n /**\n * Returns the DOM scroll offset that positions the item at `index` in a\n * `viewportSize` px viewport, aligned by `align` and clamped to the\n * reachable scroll range.\n *\n * The slack is computed in virtual space against the item's real size and\n * converted to DOM space once, at the end. Under compression one DOM pixel\n * is several virtual pixels, so mixed coordinates would scale the slack.\n */\n public getAlignedScrollOffset(\n index: number,\n viewportSize: number,\n align: ScrollAlignment,\n ): number {\n const bounds = this._itemBounds(index);\n if (!bounds) {\n return 0;\n }\n\n const [start, end] = bounds;\n const slack = viewportSize - Math.max(0, end - start);\n let offset = start;\n\n if (align === \"center\") {\n offset -= slack / 2;\n } else if (align === \"end\") {\n offset -= slack;\n }\n\n return clamp(\n this._toDom(offset, viewportSize),\n 0,\n Math.max(0, this.domSize() - viewportSize),\n );\n }\n\n /**\n * The alignment `scrollIntoView({ block: 'nearest' })` resolves to for the\n * item at `index` at the given DOM scroll position: `start` for an item\n * before the viewport, `end` for one past it, and `null` for one that needs\n * no scrolling because it is fully inside the viewport, or larger than the\n * viewport and covering it.\n */\n public getNearestAlignment(\n index: number,\n scrollPosition: number,\n viewportSize: number,\n ): ScrollAlignment | null {\n const bounds = this._itemBounds(index);\n if (!bounds) {\n return null;\n }\n\n const [start, end] = bounds;\n const viewStart = this._toVirtual(scrollPosition, viewportSize);\n const viewEnd = viewStart + viewportSize;\n\n const contained = start >= viewStart && end <= viewEnd;\n const spanning = start <= viewStart && end >= viewEnd;\n if (contained || spanning) {\n return null;\n }\n return start < viewStart ? \"start\" : \"end\";\n }\n\n /** Returns the visible and over-scanned item range for the given scroll state. */\n public getVisibleRange(\n scrollPosition: number,\n viewportSize: number,\n overScan: number,\n ): VisibleRange {\n if (!this._tree || this._tree.length === 0 || viewportSize <= 0) {\n return { startIndex: 0, endIndex: -1 };\n }\n\n // The viewport is not compressed. Items render at their real pixel size,\n // so a `viewportSize` px viewport always shows that many virtual pixels of\n // items, at any compression of the scroll range.\n const startOffset = this._toVirtual(scrollPosition, viewportSize);\n const first = this._tree.findIndexAtOffset(startOffset);\n const last = this._tree.findIndexAtOffset(startOffset + viewportSize);\n\n return {\n startIndex: Math.max(0, first - overScan),\n endIndex: Math.min(this._tree.length - 1, last + overScan),\n };\n }\n\n /**\n * Sum of the real sizes of the items in [startIndex, endIndex]. The render\n * pass uses it to clamp the content translate offset, so rendered items do\n * not overflow past `domSize` under coordinate compression.\n */\n public getPhysicalRangeSize(startIndex: number, endIndex: number): number {\n if (!this._tree) {\n return 0;\n }\n\n const start = Math.max(0, startIndex);\n const end = Math.min(Math.max(endIndex + 1, start), this._tree.length);\n return this._tree.prefixSum(end) - this._tree.prefixSum(start);\n }\n\n /**\n * The virtual [start, end] offsets of the item at `index`, clamped into the\n * item range. Null while there are no items.\n */\n private _itemBounds(index: number): [number, number] | null {\n if (!this._tree || this._tree.length === 0) {\n return null;\n }\n\n const clamped = clamp(index, 0, this._tree.length - 1);\n return [this._tree.prefixSum(clamped), this._tree.prefixSum(clamped + 1)];\n }\n\n private _invalidate(): void {\n this._version.update((v) => v + 1);\n }\n\n /**\n * A virtual offset as the DOM scroll position that shows it, for a\n * `viewportSize` px viewport.\n */\n private _toDom(virtualOffset: number, viewportSize: number): number {\n const [virtualRange, domRange] = this._scrollRanges(viewportSize);\n return (virtualOffset * domRange) / virtualRange;\n }\n\n /**\n * A DOM scroll position as the virtual offset it shows, for a\n * `viewportSize` px viewport.\n */\n private _toVirtual(domOffset: number, viewportSize: number): number {\n const [virtualRange, domRange] = this._scrollRanges(viewportSize);\n return (Math.max(0, domOffset) * virtualRange) / domRange;\n }\n\n /**\n * The virtual and DOM scroll ranges to map between; the identity while the\n * content fits the browser's limit. One viewport of items renders at real\n * size at any scroll position, so both ranges exclude it: mapping the totals\n * instead would leave the last `viewport * (ratio - 1)` virtual pixels past\n * the largest DOM offset. Callers multiply before dividing, so exact\n * positions come back exact.\n */\n private _scrollRanges(viewportSize: number): [number, number] {\n const totalSize = this._tree?.totalSize ?? 0;\n const domRange = this._maxBrowserSize - viewportSize;\n\n if (totalSize <= this._maxBrowserSize || domRange <= 0) {\n return [1, 1];\n }\n return [totalSize - viewportSize, domRange];\n }\n}\n","/** Template context for a single item of the virtual scroll. */\nexport class IgxVsItemContext<T> {\n constructor(\n /** The current item in the virtual scroll. */\n public $implicit: T,\n /** The index of the current item. */\n public index: number,\n /** The total number of items in the virtual scroll. */\n public count: number,\n ) {}\n\n /** Whether the current item is the first in the list. */\n public get first(): boolean {\n return this.index === 0;\n }\n\n /** Whether the current item is the last in the list. */\n public get last(): boolean {\n return this.index === this.count - 1;\n }\n\n /** Whether the current item is at an even index. */\n public get even(): boolean {\n return this.index % 2 === 0;\n }\n\n /** Whether the current item is at an odd index. */\n public get odd(): boolean {\n return !this.even;\n }\n}\n\n/**\n * How `scrollToIndex` positions the requested item in the viewport.\n * The subset of `ScrollLogicalPosition` that the engine supports.\n */\nexport type ScrollAlignment = \"start\" | \"center\" | \"end\";\n\n/** The currently rendered (visible plus over-scanned) range of items. */\nexport interface VisibleRange {\n /** Index of the first rendered item, inclusive. */\n startIndex: number;\n /** Index of the last rendered item, inclusive. */\n endIndex: number;\n}\n\n/** Snapshot of the currently rendered virtual window. */\nexport interface VirtualScrollState extends VisibleRange {\n /** The size of the viewport in pixels. */\n viewportSize: number;\n /** The total size of the virtual scroll content in pixels. */\n totalSize: number;\n}\n\n/**\n * A loaded page of a larger collection, for data that arrives a page at a time.\n *\n * The list is sized by `totalCount` while only `items` are in memory. Indices are indices\n * in the whole collection: the item at `index` is `items[index - startIndex]`, and indices\n * the page does not cover render nothing.\n *\n * Measured sizes are kept per index across pages while `totalCount` holds: the indices still\n * mean the same records. A page with another `totalCount` is a different collection, and\n * every size is measured again. A page that keeps the count but puts different records at\n * the same indices keeps the sizes measured for the previous ones until those rows render.\n */\nexport interface VirtualDataWindow<T> {\n /** The loaded items. */\n readonly items: readonly T[];\n /** The index `items[0]` has in the whole collection. */\n readonly startIndex: number;\n /** How many items the whole collection has. */\n readonly totalCount: number;\n}\n\n/**\n * Request for more data, emitted when the rendered window nears the end of\n * the loaded items. Listen to it to implement infinite / remote scrolling.\n */\nexport interface VirtualScrollDataRequest {\n /** The first index that does not yet have data. */\n startIndex: number;\n /** Number of items being requested. */\n count: number;\n}\n","import { Directive, inject, TemplateRef } from \"@angular/core\";\nimport { IgxVsItemContext } from \"./types\";\n\n/**\n * Directive to mark an `ng-template` as the item template for the virtual scroll component.\n * The template provided by this directive will be used to render each item in the virtual scroll.\n * The context for the template will include the item data and its index.\n *\n * @example\n * ```html\n * <igx-virtual-scroll [data]=\"items\">\n * <ng-template igxVirtualItem let-item let-i=\"index\">\n * <div>{{ i }}: {{ item }}</div>\n * </ng-template>\n * </igx-virtual-scroll>\n * ```\n */\n@Directive({ selector: \"ng-template[igxVirtualItem]\" })\nexport class IgxVirtualItemDirective<T = unknown> {\n public readonly template =\n inject<TemplateRef<IgxVsItemContext<T>>>(TemplateRef);\n}\n","import { isPlatformBrowser, NgTemplateOutlet } from \"@angular/common\";\nimport {\n afterNextRender,\n afterRenderEffect,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n output,\n PLATFORM_ID,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation,\n} from \"@angular/core\";\nimport { clamp, isLeftToRight } from \"igniteui-angular/core\";\nimport { VirtualScrollEngine } from \"./scroll-engine\";\nimport {\n IgxVsItemContext,\n VirtualDataWindow,\n VirtualScrollDataRequest,\n VirtualScrollState,\n VisibleRange,\n} from \"./types\";\nimport { IgxVirtualItemDirective } from \"./virtual-scroll-item.directive\";\n\n/** Defaults for the inputs, also used as the fallback for invalid values. */\nconst DEFAULT_OVER_SCAN = 2;\nconst DEFAULT_ESTIMATED_ITEM_SIZE = 50;\n\n/** How close to the end of `data` the window must get to emit `dataRequest`. */\nconst DATA_REQUEST_THRESHOLD = 5;\nconst DATA_REQUEST_MIN_COUNT = 20;\nconst DATA_REQUEST_OVER_SCAN_FACTOR = 4;\n\n/** Give-up bounds for the two loops that wait for the layout to stabilize. */\nconst MAX_LAYOUT_SETTLE_PASSES = 20;\nconst MAX_SCROLL_CORRECTION_PASSES = 5;\n\nconst SCROLL_END_TIMEOUT_MS = 2000;\nconst SCROLL_OFFSET_EPSILON_PX = 1;\n\n/** How long the scroll position must stay unchanged to count as settled. */\nconst SCROLL_IDLE_MS = 100;\n\n/**\n * Upper limit on one `requestAnimationFrame` wait. A hidden tab or a detached\n * element gets no frames, and `layoutComplete` must still resolve there.\n */\nconst LAYOUT_FRAME_TIMEOUT_MS = 100;\n\nconst EMPTY_RANGE: VisibleRange = Object.freeze({ startIndex: 0, endIndex: -1 });\n\n/** `data` and `dataWindow` seen as one thing: what is loaded, and where it sits. */\ninterface LoadedItems<T> extends VirtualDataWindow<T> {\n /** Whether this came from `dataWindow`, which is a page of something larger. */\n readonly windowed: boolean;\n}\n\n/** A consumer-supplied index, count or size, reduced to a whole non-negative number. */\nfunction toCount(value: number): number {\n const count = Math.trunc(value);\n return Number.isFinite(count) ? Math.max(0, count) : 0;\n}\n\nfunction loadedEqual<T>(a: LoadedItems<T>, b: LoadedItems<T>): boolean {\n return (\n a.items === b.items &&\n a.startIndex === b.startIndex &&\n a.totalCount === b.totalCount &&\n a.windowed === b.windowed\n );\n}\n\nfunction rangesEqual(a: VisibleRange, b: VisibleRange): boolean {\n return a.startIndex === b.startIndex && a.endIndex === b.endIndex;\n}\n\nfunction statesEqual(\n a: VirtualScrollState | null,\n b: VirtualScrollState,\n): boolean {\n return (\n a !== null &&\n rangesEqual(a, b) &&\n a.viewportSize === b.viewportSize &&\n a.totalSize === b.totalSize\n );\n}\n\n/** The data index an item wrapper carries, or -1 when it has none. */\nfunction itemIndex(element: Element): number {\n const index = Number.parseInt(\n (element as HTMLElement).dataset[\"index\"] ?? \"\",\n 10,\n );\n return Number.isInteger(index) && index >= 0 ? index : -1;\n}\n\nfunction onAbort(abort: AbortSignal, cancel: () => void): void {\n abort.addEventListener(\"abort\", cancel, { once: true });\n}\n\n/**\n * A virtual scroll component for large lists. Only the items visible in the\n * viewport (plus a configurable over-scan) are rendered.\n *\n * @igxKeywords virtual, scroll, virtualization, list\n * @igxGroup Grids & Lists\n *\n * @example\n * ```html\n * <igx-virtual-scroll [data]=\"items\" style=\"height: 400px\">\n * <ng-template igxVirtualItem let-item let-i=\"index\">\n * <div>{{ i }}: {{ item }}</div>\n * </ng-template>\n * </igx-virtual-scroll>\n * ```\n */\n@Component({\n selector: \"igx-virtual-scroll\",\n templateUrl: \"./virtual-scroll.component.html\",\n styleUrls: [\"./virtual-scroll.component.scss\"],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgTemplateOutlet],\n host: {\n class: \"igx-virtual-scroll\",\n role: \"list\",\n \"[attr.data-orientation]\": \"orientation()\",\n },\n})\nexport class IgxVirtualScrollComponent<T> implements OnDestroy {\n //#region Dependency injection\n\n private readonly _hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly _zone = inject(NgZone);\n private readonly _document = inject(DOCUMENT);\n private readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n //#endregion\n\n //#region Internal state\n\n private readonly _engine = new VirtualScrollEngine();\n\n private _viewportResizeObserver: ResizeObserver | null = null;\n private _itemResizeObserver: ResizeObserver | null = null;\n private _onScroll: (() => void) | null = null;\n\n /** Elements currently registered with the item resize observer. */\n private readonly _observedItems = new Set<Element>();\n\n /** The data index each observed wrapper element last hosted. */\n private readonly _observedItemIndexes = new WeakMap<Element, number>();\n\n /**\n * The live scroll offset on the active axis. A plain field, not a signal:\n * `_visibleRange` reads it but is invalidated by `_scrollTick`, so a scroll\n * that does not move the rendered window schedules no work.\n */\n private _scrollPosition = 0;\n\n /** Bumped only when a scroll actually moves the rendered window. */\n private readonly _scrollTick = signal(0);\n\n /** The measured viewport, or `null` while the host has never been laid out. */\n private readonly _viewportSize = signal<number | null>(null);\n\n /**\n * Whether the host is laid out left-to-right, as of the last read of the\n * horizontal axis. `_contentTransform` depends on it, so a `dir` change\n * flips the wrapper even while the rendered window stays put.\n */\n private readonly _ltr = signal(true);\n\n /** What was loaded as of the previous change, for `_retainCount`. */\n private _previousItems: LoadedItems<T> | undefined;\n\n private _lastEmittedState: VirtualScrollState | null = null;\n private _hasPendingDataRequest = false;\n\n /**\n * The `startIndex` of the last emitted `dataRequest`, which is also the\n * item count at that emit. See `_checkDataRequest`.\n */\n private _lastDataRequestIndex = -1;\n\n private _layoutCompletePromise: Promise<void> | null = null;\n private _scrollRequestId = 0;\n\n //#endregion\n\n //#region View and content children\n\n private readonly _itemDirective = contentChild(IgxVirtualItemDirective);\n\n private readonly _contentDivRef =\n viewChild<ElementRef<HTMLElement>>(\"contentDiv\");\n\n //#endregion\n\n //#region Public inputs\n\n /**\n * The array of items to virtualize.\n *\n * Compared by reference: mutating the array in place (`data.push(...)`)\n * causes no update. Assign a new array instead. The `dataRequest` flow\n * also expects a new array.\n */\n public readonly data = input<T[]>([]);\n\n /**\n * Scroll orientation of the virtual scroll.\n * Can be either \"vertical\" or \"horizontal\".\n * Default is \"vertical\".\n */\n public readonly orientation = input<\"vertical\" | \"horizontal\">(\"vertical\");\n\n /**\n * Number of extra items to render beyond the visible area of the viewport.\n * Higher values reduce blank flashes during fast scrolling but may impact performance.\n * Default is 2.\n */\n public readonly overScan = input<number>(DEFAULT_OVER_SCAN);\n\n /**\n * Estimated item size in pixels used before an item is measured in the DOM.\n * The engine replaces this with the actual measured size after the first render of each item.\n * Default is 50 pixels.\n * Setting this to a value close to the actual average item size can improve initial rendering performance.\n */\n public readonly estimatedItemSize = input<number>(DEFAULT_ESTIMATED_ITEM_SIZE);\n\n /**\n * A loaded page of a larger collection, for data that arrives a page at a time.\n *\n * Takes the place of `data` while it is set. The list is as long as `totalCount`, so the\n * scrollbar spans the whole collection while only the page is in memory. Indices the page\n * does not cover render nothing; use `stateChange` to see which range is wanted and supply\n * the page that covers it.\n *\n * Measured sizes are kept per index across pages while `totalCount` holds: the indices still\n * mean the same records. A page with another `totalCount` is a different collection, and\n * every size is measured again. A page that keeps the count but puts different records at\n * the same indices keeps the sizes measured for the previous ones until those rows render.\n *\n * @example\n * ```html\n * <igx-virtual-scroll [dataWindow]=\"page\" (stateChange)=\"load($event)\" style=\"height: 400px\">\n * <ng-template igxVirtualItem let-item>{{ item?.name }}</ng-template>\n * </igx-virtual-scroll>\n * ```\n */\n public readonly dataWindow = input<VirtualDataWindow<T> | null>(null);\n\n /**\n * @hidden @internal\n *\n * Viewport size in pixels to render the first window against, for a list that is hidden\n * until the change detection pass that reveals it and so has no size to measure in it.\n *\n * A hint for that first render: once the host has been laid out its own size takes over,\n * zero included. Changing `orientation` begins an axis with no measurement of its own, so\n * the hint applies again there. Negative, `NaN` and infinite values count as no hint.\n *\n * A workaround for the drop-down family, which reads and focuses items in the pass that\n * opens the list. To be removed once those components render their list on reveal.\n */\n public readonly initialViewportSize = input<number>(0);\n\n /**\n * Item template provided programmatically. Takes precedence over a content\n * `ng-template[igxVirtualItem]` when both are provided.\n *\n * Items are measured by their border box, so margins accumulate as drift\n * down the list. Use padding on the item, or a gap on a wrapper, instead.\n *\n * Only the current window is in the DOM, so assistive technology cannot\n * infer an item's position from the markup. Templates that render a role\n * with set semantics (`listitem`, `option`, `row`, ...) should map the\n * context's `index` and `count` onto `aria-posinset` and `aria-setsize`.\n */\n public readonly itemTemplate = input<TemplateRef<IgxVsItemContext<T>> | null>(\n null,\n );\n\n //#endregion\n\n //#region Public outputs\n\n /** Emitted when the rendered virtual window changes. */\n public readonly stateChange = output<VirtualScrollState>();\n\n /**\n * Emitted when the rendered window comes within a few items of the end of\n * `data`. Also emitted on the first render, when the loaded items do not\n * fill the viewport. Listen to this event to append more items\n * (infinite / remote scrolling).\n */\n public readonly dataRequest = output<VirtualScrollDataRequest>();\n\n //#endregion\n\n //#region Derived state\n\n protected readonly _isVertical = computed(\n () => this.orientation() === \"vertical\",\n );\n\n protected readonly _resolvedTemplate = computed(\n () => this.itemTemplate() ?? this._itemDirective()?.template ?? null,\n );\n\n /**\n * What the component has to work with, from whichever data input is in use. A page is\n * trusted to be no longer than the collection it says it belongs to.\n */\n private readonly _loaded = computed<LoadedItems<T>>(() => {\n const window = this.dataWindow();\n\n if (!window) {\n const items = this.data() ?? [];\n return { items, startIndex: 0, totalCount: items.length, windowed: false };\n }\n\n const items = window.items ?? [];\n const startIndex = toCount(window.startIndex);\n return {\n items,\n startIndex,\n totalCount: Math.max(toCount(window.totalCount), startIndex + items.length),\n windowed: true,\n };\n }, { equal: loadedEqual });\n\n /** The measured size once the host has been laid out, the hint until then. */\n private readonly _effectiveViewportSize = computed(\n () => this._viewportSize() ?? toCount(this.initialViewportSize()),\n );\n\n /** The configured `overScan`, normalized to a non-negative integer. */\n private readonly _normalizedOverScan = computed(() => {\n const value = Number(this.overScan());\n return Number.isFinite(value)\n ? Math.max(0, Math.floor(value))\n : DEFAULT_OVER_SCAN;\n });\n\n /** The configured `estimatedItemSize`, normalized to a positive number. */\n private readonly _normalizedItemSize = computed(() => {\n const value = Number(this.estimatedItemSize());\n return Number.isFinite(value) && value > 0\n ? value\n : DEFAULT_ESTIMATED_ITEM_SIZE;\n });\n\n /**\n * The window to render for the current scroll position and viewport. Empty\n * until an item template is resolved, because nothing renders without one.\n *\n * The scroll position is read from the plain `_scrollPosition` field so\n * that a recompute triggered by a measurement uses the live offset, while\n * `_scrollTick` limits recomputes to scrolls that actually move the window.\n */\n private readonly _visibleRange = computed<VisibleRange>(\n () => {\n // Depend on the engine so the range recomputes whenever item sizes or\n // the item count change.\n this._engine.version();\n this._scrollTick();\n\n return this._resolvedTemplate()\n ? this._engine.getVisibleRange(\n this._scrollPosition,\n this._effectiveViewportSize(),\n this._normalizedOverScan(),\n )\n : EMPTY_RANGE;\n },\n { equal: rangesEqual },\n );\n\n /** The track size, in DOM space. */\n protected readonly _spaceSize = this._engine.domSize;\n\n /** The part of the rendered range a page actually covers. */\n private readonly _loadedRange = computed<VisibleRange>(\n () => {\n const { startIndex, endIndex } = this._visibleRange();\n const { items, startIndex: from } = this._loaded();\n\n return {\n startIndex: Math.max(startIndex, from),\n endIndex: Math.min(endIndex, from + items.length - 1),\n };\n },\n { equal: rangesEqual },\n );\n\n /** The item contexts for the currently rendered window, in render order. */\n protected readonly _renderedItems = computed<IgxVsItemContext<T>[]>(() => {\n const { startIndex, endIndex } = this._loadedRange();\n const { items, startIndex: from, totalCount } = this._loaded();\n\n const rendered: IgxVsItemContext<T>[] = [];\n for (let i = startIndex; i <= endIndex; i++) {\n rendered.push(new IgxVsItemContext<T>(items[i - from], i, totalCount));\n }\n return rendered;\n });\n\n /**\n * The `translateY` / `translateX` for the content wrapper. It is absolutely\n * positioned at the origin of a `domSize` px track, so translating it to\n * the first rendered item's offset puts that item at its virtual position.\n */\n protected readonly _contentTransform = computed(() => {\n // The offsets below are plain reads of the engine's size state, so depend\n // on its version explicitly.\n this._engine.version();\n const range = this._loadedRange();\n\n // Under coordinate compression item positions are scaled down but item\n // sizes are not. Without this cap the rendered range would overflow past\n // domSize at the end of the list, pushing the last items beyond the\n // maximum browser scroll coordinate.\n const position = clamp(\n this._engine.getScrollOffsetForIndex(\n range.startIndex,\n this._effectiveViewportSize(),\n ),\n 0,\n this._engine.domSize() -\n this._engine.getPhysicalRangeSize(range.startIndex, range.endIndex),\n );\n\n if (this._isVertical()) {\n return `translateY(${position}px)`;\n }\n\n // In RTL the wrapper is anchored to the right edge of the track, so it\n // translates towards the negative (leading) direction.\n return `translateX(${this._ltr() ? position : -position}px)`;\n });\n\n //#endregion\n\n constructor() {\n // Sync the engine's item count with `data`, discarding the measurements\n // of items whose identity changed.\n effect(() => {\n const loaded = this._loaded();\n untracked(() => {\n const previous = this._previousItems;\n const retained = this._retainCount(previous, loaded);\n this._previousItems = loaded;\n this._engine.resize(\n loaded.totalCount,\n this._normalizedItemSize(),\n retained,\n );\n this._remeasureFrom(retained);\n // New data (or a reset) clears any in-flight data request so the next\n // approach to the end of the list can emit again.\n this._hasPendingDataRequest = false;\n });\n });\n\n // Re-apply the estimate when it changes but the item count does not,\n // because `resize` is then a no-op.\n effect(() => {\n const size = this._normalizedItemSize();\n untracked(() => this._engine.updateEstimatedSize(size));\n });\n\n // The scroll offset of the previous axis does not carry over.\n effect(() => {\n this.orientation();\n untracked(() => {\n if (!this._isBrowser) {\n return;\n }\n\n // The size of the previous axis says nothing about the new one.\n this._viewportSize.set(null);\n this._measureViewport();\n this._scrollPosition = this._currentAxisScroll();\n this._scrollTick.update((v) => v + 1);\n });\n });\n\n afterNextRender(() => {\n this._engine.initMaxBrowserSize(this._document);\n this._measureViewport();\n this._setupScrollListener();\n this._setupViewportResizeObserver();\n });\n\n // Runs after the DOM reflects the current window, and re-runs whenever\n // the window or the engine's sizes change.\n afterRenderEffect({\n read: () => {\n // What is wanted and what is rendered change independently: the viewport can move\n // into indices no page covers, and a page can arrive without the viewport moving.\n this._visibleRange();\n this._renderedItems();\n this._engine.version();\n untracked(() => {\n this._scheduleItemMeasurement();\n this._checkDataRequest();\n this._emitStateChange();\n });\n },\n });\n }\n\n public ngOnDestroy(): void {\n this._teardown();\n }\n\n //#region Public API\n\n /**\n * Resolves when the virtual scroll has settled: the current render pass is\n * complete, the item-size measurements it triggers are complete, and so\n * are the renders those measurements schedule.\n */\n public get layoutComplete(): Promise<void> {\n if (!this._layoutCompletePromise) {\n this._layoutCompletePromise = this._resolveLayoutComplete();\n }\n return this._layoutCompletePromise;\n }\n\n /**\n * Scrolls to the specified item index.\n *\n * Items outside the rendered window have only an estimated size, so the\n * first jump can miss the target. The items at the landing point are then\n * measured and the scroll position is corrected, until the offset is\n * stable. The returned promise resolves on that final offset; callers that\n * need only the first, approximate scroll can ignore it.\n *\n * @param index The index of the item to scroll to.\n * @param options `block` / `inline` select the alignment (`start`,\n * `center`, `end` or `nearest`); `behavior` selects `auto` or `smooth`.\n */\n public async scrollToIndex(\n index: number,\n options?: ScrollIntoViewOptions,\n ): Promise<void> {\n const clampedIndex = clamp(\n index,\n 0,\n Math.max(0, this._loaded().totalCount - 1),\n );\n\n // A newer call supersedes a correction loop that still runs for a\n // previous call, for example under rapid, repeated calls.\n const requestId = ++this._scrollRequestId;\n\n let offset = this._getAlignedScrollOffset(clampedIndex, options);\n await this._scrollAndWaitForEnd(offset, options?.behavior ?? \"auto\");\n\n for (let i = 0; i < MAX_SCROLL_CORRECTION_PASSES; i++) {\n await this.layoutComplete;\n\n if (requestId !== this._scrollRequestId) {\n return;\n }\n\n const corrected = this._getAlignedScrollOffset(clampedIndex, options);\n if (Math.abs(corrected - offset) < SCROLL_OFFSET_EPSILON_PX) {\n break;\n }\n\n offset = corrected;\n await this._scrollAndWaitForEnd(offset, \"auto\");\n\n if (requestId !== this._scrollRequestId) {\n return;\n }\n }\n }\n\n //#endregion\n\n //#region Scrolling\n\n /**\n * Re-reads the host's direction, which `dir` can change at runtime. `:dir()`\n * is a selector match, so this costs no layout.\n */\n private _syncDirection(): boolean {\n const ltr = isLeftToRight(this._hostRef.nativeElement);\n this._ltr.set(ltr);\n return ltr;\n }\n\n /** The current real scroll position on the active axis, normalized for RTL. */\n private _currentAxisScroll(): number {\n const host = this._hostRef.nativeElement;\n\n if (this._isVertical()) {\n return host.scrollTop;\n }\n\n // Standards-compliant browsers expose a negative scrollLeft in RTL.\n return this._syncDirection() ? host.scrollLeft : -host.scrollLeft;\n }\n\n /** Applies a scroll offset to the active axis, accounting for RTL. */\n private _applyScroll(offset: number, behavior: ScrollBehavior): void {\n const host = this._hostRef.nativeElement;\n\n if (this._isVertical()) {\n host.scrollTo({ top: offset, behavior });\n return;\n }\n\n host.scrollTo({ left: this._syncDirection() ? offset : -offset, behavior });\n }\n\n /**\n * The scroll offset that aligns `index` in the viewport according to\n * `options`, from the engine's current size data. As more items are\n * measured, the same input can give a different, more accurate result.\n *\n * `nearest` keeps the current offset for an item already in view and\n * otherwise brings the item to its nearer edge, as native `scrollIntoView`\n * does.\n */\n private _getAlignedScrollOffset(\n index: number,\n options?: ScrollIntoViewOptions,\n ): number {\n const requested = this._isVertical()\n ? (options?.block ?? \"start\")\n : (options?.inline ?? options?.block ?? \"start\");\n const current = this._currentAxisScroll();\n const viewport = this._effectiveViewportSize();\n\n const align =\n requested === \"nearest\"\n ? this._engine.getNearestAlignment(index, current, viewport)\n : requested;\n\n if (align === null) {\n return current;\n }\n\n return this._engine.getAlignedScrollOffset(index, viewport, align);\n }\n\n /**\n * Applies a scroll offset to the active axis and waits for the scroll,\n * instant or smooth, to settle.\n *\n * `scrollend` does not fire when the requested offset does not move the\n * scroll position, so that case resolves immediately. The deadline covers\n * an event that never arrives, for example when the element is detached\n * mid-scroll.\n */\n private _scrollAndWaitForEnd(\n offset: number,\n behavior: ScrollBehavior,\n ): Promise<void> {\n if (\n !this._isBrowser ||\n Math.abs(this._currentAxisScroll() - offset) < SCROLL_OFFSET_EPSILON_PX\n ) {\n return Promise.resolve();\n }\n\n return this._withDeadline(SCROLL_END_TIMEOUT_MS, (abort) => {\n // `scrollend` reports exactly when a scroll has settled. Safari before\n // 18.2 does not have it, and the scroll-idle timer stands in there.\n const settled =\n \"onscrollend\" in this._hostRef.nativeElement\n ? this._waitForScrollEnd(abort)\n : this._waitForScrollIdle(abort);\n\n // Applied only after the listener is attached, so an instant scroll\n // cannot settle before something watches for it.\n this._applyScroll(offset, behavior);\n return settled;\n });\n }\n\n private _waitForScrollEnd(abort: AbortSignal): Promise<void> {\n return this._promiseOutsideZone((resolve) => {\n this._hostRef.nativeElement.addEventListener(\"scrollend\", resolve, {\n once: true,\n signal: abort,\n });\n });\n }\n\n /**\n * Resolves when no `scroll` event arrives for `SCROLL_IDLE_MS`: the closest\n * replacement for `scrollend`. The first timer starts immediately, so a\n * scroll that does not move still settles.\n */\n private _waitForScrollIdle(abort: AbortSignal): Promise<void> {\n return this._promiseOutsideZone((resolve) => {\n let id = setTimeout(resolve, SCROLL_IDLE_MS);\n\n this._hostRef.nativeElement.addEventListener(\n \"scroll\",\n () => {\n clearTimeout(id);\n id = setTimeout(resolve, SCROLL_IDLE_MS);\n },\n { passive: true, signal: abort },\n );\n\n onAbort(abort, () => clearTimeout(id));\n });\n }\n\n //#endregion\n\n //#region Async helpers\n\n /** A promise whose subscription work stays out of the Angular zone. */\n private _promiseOutsideZone(\n subscribe: (resolve: () => void) => void,\n ): Promise<void> {\n return this._zone.runOutsideAngular(\n () => new Promise<void>((resolve) => subscribe(() => resolve())),\n );\n }\n\n /**\n * Resolves with `task` or with a deadline of `ms`, whichever comes first.\n * The signal then tears down the other, so no live timer or dangling\n * listener remains.\n */\n private _withDeadline(\n ms: number,\n task: (abort: AbortSignal) => Promise<void>,\n ): Promise<void> {\n const controller = new AbortController();\n\n return Promise.race([\n task(controller.signal),\n this._promiseOutsideZone((resolve) => {\n const id = setTimeout(resolve, ms);\n onAbort(controller.signal, () => clearTimeout(id));\n }),\n ]).finally(() => controller.abort());\n }\n\n /**\n * Resolves on the next animation frame, or after `LAYOUT_FRAME_TIMEOUT_MS`\n * when no frame arrives. A hidden tab or a detached element gets no frames\n * and has no layout to wait for, so resolving early there is safe.\n */\n private _nextFrame(): Promise<void> {\n if (!this._isBrowser) {\n return Promise.resolve();\n }\n\n return this._withDeadline(LAYOUT_FRAME_TIMEOUT_MS, (abort) =>\n this._promiseOutsideZone((resolve) => {\n const id = requestAnimationFrame(resolve);\n onAbort(abort, () => cancelAnimationFrame(id));\n }),\n );\n }\n\n /**\n * Waits out the frames in which the item measurements land. Each\n * measurement that changes a size bumps the engine's version and schedules\n * another render, so the layout has settled once the version holds still\n * across two consecutive frames.\n */\n private async _resolveLayoutComplete(): Promise<void> {\n try {\n let lastVersion = -1;\n\n for (let i = 0; i < MAX_LAYOUT_SETTLE_PASSES; i++) {\n await this._nextFrame();\n\n const version = untracked(this._engine.version);\n if (version === lastVersion) {\n break;\n }\n lastVersion = version;\n }\n } finally {\n // Cleared here, not after the loop, so a run that throws cannot leave\n // the getter with a permanently rejected promise.\n this._layoutCompletePromise = null;\n }\n }\n\n //#endregion\n\n //#region Measurement\n\n private _measureViewport(): void {\n const host = this._hostRef.nativeElement;\n\n // A host with no box is hidden or detached, not sized: its last measurement is kept so\n // it renders in the pass that reveals it. A laid-out zero is a size like any other.\n if (!host.isConnected || host.getClientRects().length === 0) {\n return;\n }\n\n const size = this._isVertical() ? host.clientHeight : host.clientWidth;\n if (size !== untracked(this._viewportSize)) {\n this._viewportSize.set(size);\n }\n }\n\n private _setupViewportResizeObserver(): void {\n this._viewportResizeObserver?.disconnect();\n\n this._zone.runOutsideAngular(() => {\n this._viewportResizeObserver = new ResizeObserver(() =>\n this._measureViewport(),\n );\n this._viewportResizeObserver.observe(this._hostRef.nativeElement);\n });\n }\n\n private _setupScrollListener(): void {\n const host = this._hostRef.nativeElement;\n\n if (this._onScroll) {\n host.removeEventListener(\"scroll\", this._onScroll);\n }\n\n this._zone.runOutsideAngular(() => {\n this._onScroll = () => this._handleScroll();\n host.addEventListener(\"scroll\", this._onScroll, { passive: true });\n });\n }\n\n /**\n * Records the new scroll offset and invalidates the rendered window only\n * when it actually moves. Without the guard, a scroll inside a single item\n * would schedule a change detection pass for an identical result.\n */\n private _handleScroll(): void {\n this._scrollPosition = this._currentAxisScroll();\n\n const next = this._engine.getVisibleRange(\n this._scrollPosition,\n untracked(this._effectiveViewportSize),\n untracked(this._normalizedOverScan),\n );\n\n if (!rangesEqual(next, untracked(this._visibleRange))) {\n this._scrollTick.update((v) => v + 1);\n }\n }\n\n private _handleItemResize(entries: ResizeObserverEntry[]): void {\n for (const entry of entries) {\n const index = itemIndex(entry.target);\n if (index < 0) {\n continue;\n }\n\n const measured = this._isVertical()\n ? (entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height)\n : (entry.borderBoxSize?.[0]?.inlineSize ?? entry.contentRect.width);\n\n if (measured > 0) {\n this._engine.measureItem(index, measured);\n }\n }\n }\n\n /**\n * Synchronizes the item observer with the rendered window, applying only\n * the difference. A newly observed element gets one initial measurement.\n *\n * An element whose `data-index` changed is re-registered, because\n * `observe` on an already observed element is a no-op. `@for` tracks by\n * slot and reuses the wrapper elements, so after a scroll the same element\n * can host a different item at an identical size. The observer stays quiet\n * about that and the new index would keep its estimated size.\n */\n private _scheduleItemMeasurement(): void {\n const content = this._contentDivRef()?.nativeElement;\n if (!content) {\n return;\n }\n\n const observer = this._getItemResizeObserver();\n\n for (const element of [...this._observedItems]) {\n if (element.parentNode !== content) {\n observer.unobserve(element);\n this._observedItems.delete(element);\n }\n }\n\n for (const element of Array.from(content.children)) {\n const index = itemIndex(element);\n\n if (this._observedItems.has(element)) {\n if (this._observedItemIndexes.get(element) === index) {\n continue;\n }\n observer.unobserve(element);\n }\n\n observer.observe(element);\n this._observedItems.add(element);\n this._observedItemIndexes.set(element, index);\n }\n }\n\n /**\n * Forgets the wrappers from `index` on, so the next pass registers them\n * again: the resize dropped their sizes, and a wrapper whose size did not\n * change reports nothing on its own.\n */\n private _remeasureFrom(index: number): void {\n for (const element of this._observedItems) {\n if ((this._observedItemIndexes.get(element) ?? -1) >= index) {\n this._observedItemIndexes.delete(element);\n }\n }\n }\n\n private _getItemResizeObserver(): ResizeObserver {\n if (!this._itemResizeObserver) {\n this._itemResizeObserver = this._zone.runOutsideAngular(\n () => new ResizeObserver((entries) => this._handleItemResize(entries)),\n );\n }\n return this._itemResizeObserver;\n }\n\n //#endregion\n\n //#region Events\n\n /**\n * The number of leading items that kept their identity across a `data`\n * change: the index of the first item whose measured size no longer\n * matches its rendered content. An append (the `dataRequest` flow) retains\n * all items. A filter or a replacement retains only the unchanged prefix.\n */\n private _firstChangedIndex(\n previous: readonly T[],\n current: readonly T[],\n ): number {\n const shared = Math.min(previous.length, current.length);\n for (let i = 0; i < shared; i++) {\n if (previous[i] !== current[i]) {\n return i;\n }\n }\n return shared;\n }\n\n /**\n * How many leading items keep their measured size across a change. A page of the same\n * collection keeps all of them - its indices still mean the same records. A page with\n * another `totalCount` comes from a filtered or otherwise different collection, and\n * switching inputs starts over, so neither keeps any.\n */\n private _retainCount(\n previous: LoadedItems<T> | undefined,\n current: LoadedItems<T>,\n ): number {\n if (previous?.windowed !== current.windowed) {\n return 0;\n }\n\n if (!current.windowed) {\n return this._firstChangedIndex(previous.items, current.items);\n }\n\n return previous.totalCount === current.totalCount ? current.totalCount : 0;\n }\n\n /**\n * Emits `stateChange`. Skipped when the window is empty or equal to the\n * last reported one, because measurement passes re-render without a window\n * change.\n */\n private _emitStateChange(): void {\n const { startIndex, endIndex } = untracked(this._visibleRange);\n if (endIndex < startIndex) {\n return;\n }\n\n const state: VirtualScrollState = {\n startIndex,\n endIndex,\n viewportSize: untracked(this._effectiveViewportSize),\n totalSize: untracked(this._engine.totalSize),\n };\n\n if (statesEqual(this._lastEmittedState, state)) {\n return;\n }\n\n this._lastEmittedState = { ...state };\n this.stateChange.emit(state);\n }\n\n private _checkDataRequest(): void {\n const loaded = untracked(this._loaded);\n\n // `dataRequest` asks for items to append, which a sized collection does not need. The\n // count `data` had reached before says nothing once a window is bound, so forget it here.\n if (loaded.windowed) {\n this._lastDataRequestIndex = -1;\n return;\n }\n\n if (this._hasPendingDataRequest) {\n return;\n }\n\n const { endIndex } = untracked(this._visibleRange);\n const total = loaded.items.length;\n\n if (total === 0 || endIndex < total - DATA_REQUEST_THRESHOLD) {\n return;\n }\n\n // Each `data` change clears `_hasPendingDataRequest`, including one that\n // appends nothing. Without this second guard, a consumer whose source is\n // exhausted, and that reassigns `data` in response to a request, would\n // receive the same request on each reassignment.\n if (this._lastDataRequestIndex === total) {\n return;\n }\n\n this._hasPendingDataRequest = true;\n this._lastDataRequestIndex = total;\n\n this.dataRequest.emit({\n startIndex: total,\n count: Math.max(\n untracked(this._normalizedOverScan) * DATA_REQUEST_OVER_SCAN_FACTOR,\n DATA_REQUEST_MIN_COUNT,\n ),\n });\n }\n\n //#endregion\n\n private _teardown(): void {\n const host = this._hostRef.nativeElement;\n\n if (this._onScroll) {\n host.removeEventListener(\"scroll\", this._onScroll);\n this._onScroll = null;\n }\n\n this._viewportResizeObserver?.disconnect();\n this._viewportResizeObserver = null;\n\n this._itemResizeObserver?.disconnect();\n this._itemResizeObserver = null;\n this._observedItems.clear();\n }\n}\n","<div\n class=\"igx-virtual-scroll__track\"\n role=\"presentation\"\n [style.height.px]=\"_isVertical() ? _spaceSize() : null\"\n [style.width.px]=\"!_isVertical() ? _spaceSize() : null\"\n>\n <div\n class=\"igx-virtual-scroll__content\"\n #contentDiv\n role=\"presentation\"\n [style.transform]=\"_contentTransform()\"\n >\n @if (_resolvedTemplate(); as template) {\n @for (context of _renderedItems(); track $index) {\n <div\n class=\"igx-virtual-item\"\n role=\"presentation\"\n [attr.data-index]=\"context.index\"\n >\n <ng-container\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"context\"\n />\n </div>\n }\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -42,6 +42,7 @@ export * from 'igniteui-angular/tabs';
|
|
|
42
42
|
export * from 'igniteui-angular/time-picker';
|
|
43
43
|
export * from 'igniteui-angular/toast';
|
|
44
44
|
export * from 'igniteui-angular/tree';
|
|
45
|
+
export * from 'igniteui-angular/virtual-scroll';
|
|
45
46
|
|
|
46
47
|
/*
|
|
47
48
|
* Public API Surface of igniteui-angular
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igniteui-angular.mjs","sources":["../../../projects/igniteui-angular/src/public_api.ts","../../../projects/igniteui-angular/src/igniteui-angular.ts"],"sourcesContent":["/*\n * Public API Surface of igniteui-angular\n */\n\n/**\n * Animations\n * MOVED TO igniteui-angular/animations\n */\n//export * from './lib/animations/main';\n\n/**\n * Core utilities, services, and data operations\n * Re-export from igniteui-angular/core for backwards compatibility\n */\nexport * from 'igniteui-angular/core';\n\n/**\n * Directives\n * Re-export from igniteui-angular/directives for backwards compatibility\n */\nexport * from 'igniteui-angular/directives';\n\n/**\n * Components\n * Re-export from individual component entry points for backwards compatibility\n */\nexport * from 'igniteui-angular/accordion';\nexport * from 'igniteui-angular/action-strip';\nexport * from 'igniteui-angular/avatar';\nexport * from 'igniteui-angular/badge';\nexport * from 'igniteui-angular/banner';\nexport * from 'igniteui-angular/bottom-nav';\nexport * from 'igniteui-angular/button-group';\nexport * from 'igniteui-angular/calendar';\nexport * from 'igniteui-angular/card';\nexport * from 'igniteui-angular/carousel';\nexport * from 'igniteui-angular/checkbox';\nexport * from 'igniteui-angular/chips';\nexport * from 'igniteui-angular/combo';\nexport * from 'igniteui-angular/simple-combo';\nexport * from 'igniteui-angular/date-picker';\nexport * from 'igniteui-angular/dialog';\nexport * from 'igniteui-angular/drop-down';\nexport * from 'igniteui-angular/expansion-panel';\nexport * from 'igniteui-angular/grids/core';\nexport * from 'igniteui-angular/grids/grid';\nexport * from 'igniteui-angular/grids/hierarchical-grid';\nexport * from 'igniteui-angular/grids/tree-grid';\nexport * from 'igniteui-angular/grids/pivot-grid';\nexport * from 'igniteui-angular/icon';\nexport * from 'igniteui-angular/input-group';\nexport * from 'igniteui-angular/list';\nexport * from 'igniteui-angular/navbar';\nexport * from 'igniteui-angular/navigation-drawer';\nexport * from 'igniteui-angular/paginator';\nexport * from 'igniteui-angular/progressbar';\nexport * from 'igniteui-angular/query-builder';\nexport * from 'igniteui-angular/radio';\nexport * from 'igniteui-angular/select';\nexport * from 'igniteui-angular/slider';\nexport * from 'igniteui-angular/snackbar';\nexport * from 'igniteui-angular/splitter';\nexport * from 'igniteui-angular/stepper';\nexport * from 'igniteui-angular/switch';\nexport * from 'igniteui-angular/tabs';\nexport * from 'igniteui-angular/time-picker';\nexport * from 'igniteui-angular/toast';\nexport * from 'igniteui-angular/tree';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"igniteui-angular.mjs","sources":["../../../projects/igniteui-angular/src/public_api.ts","../../../projects/igniteui-angular/src/igniteui-angular.ts"],"sourcesContent":["/*\n * Public API Surface of igniteui-angular\n */\n\n/**\n * Animations\n * MOVED TO igniteui-angular/animations\n */\n//export * from './lib/animations/main';\n\n/**\n * Core utilities, services, and data operations\n * Re-export from igniteui-angular/core for backwards compatibility\n */\nexport * from 'igniteui-angular/core';\n\n/**\n * Directives\n * Re-export from igniteui-angular/directives for backwards compatibility\n */\nexport * from 'igniteui-angular/directives';\n\n/**\n * Components\n * Re-export from individual component entry points for backwards compatibility\n */\nexport * from 'igniteui-angular/accordion';\nexport * from 'igniteui-angular/action-strip';\nexport * from 'igniteui-angular/avatar';\nexport * from 'igniteui-angular/badge';\nexport * from 'igniteui-angular/banner';\nexport * from 'igniteui-angular/bottom-nav';\nexport * from 'igniteui-angular/button-group';\nexport * from 'igniteui-angular/calendar';\nexport * from 'igniteui-angular/card';\nexport * from 'igniteui-angular/carousel';\nexport * from 'igniteui-angular/checkbox';\nexport * from 'igniteui-angular/chips';\nexport * from 'igniteui-angular/combo';\nexport * from 'igniteui-angular/simple-combo';\nexport * from 'igniteui-angular/date-picker';\nexport * from 'igniteui-angular/dialog';\nexport * from 'igniteui-angular/drop-down';\nexport * from 'igniteui-angular/expansion-panel';\nexport * from 'igniteui-angular/grids/core';\nexport * from 'igniteui-angular/grids/grid';\nexport * from 'igniteui-angular/grids/hierarchical-grid';\nexport * from 'igniteui-angular/grids/tree-grid';\nexport * from 'igniteui-angular/grids/pivot-grid';\nexport * from 'igniteui-angular/icon';\nexport * from 'igniteui-angular/input-group';\nexport * from 'igniteui-angular/list';\nexport * from 'igniteui-angular/navbar';\nexport * from 'igniteui-angular/navigation-drawer';\nexport * from 'igniteui-angular/paginator';\nexport * from 'igniteui-angular/progressbar';\nexport * from 'igniteui-angular/query-builder';\nexport * from 'igniteui-angular/radio';\nexport * from 'igniteui-angular/select';\nexport * from 'igniteui-angular/slider';\nexport * from 'igniteui-angular/snackbar';\nexport * from 'igniteui-angular/splitter';\nexport * from 'igniteui-angular/stepper';\nexport * from 'igniteui-angular/switch';\nexport * from 'igniteui-angular/tabs';\nexport * from 'igniteui-angular/time-picker';\nexport * from 'igniteui-angular/toast';\nexport * from 'igniteui-angular/tree';\nexport * from 'igniteui-angular/virtual-scroll';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEG;AAEH;;;AAGG;AACH;AAEA;;;AAGG;;ACbH;;AAEG"}
|
package/input-group/README.md
CHANGED
|
@@ -19,6 +19,8 @@ A walkthrough of how to get started can be found [here](https://www.infragistics
|
|
|
19
19
|
</igx-input-group>
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
+
`igxInput` works with template-driven forms (`ngModel`), reactive forms (`formControlName`) and Signal Forms (`[formField]`).
|
|
23
|
+
|
|
22
24
|
### Elements
|
|
23
25
|
The following directives could be wrapped in an <igx-input-group> container - igxInput, igxLabel, igxPrefix, igxSuffix or igxHint.
|
|
24
26
|
|
|
@@ -1,63 +1,35 @@
|
|
|
1
|
-
@use 'sass:
|
|
2
|
-
@use 'sass:meta';
|
|
1
|
+
@use 'sass:meta' as *;
|
|
3
2
|
@use '../../base' as *;
|
|
4
3
|
|
|
4
|
+
/// Emits the scrollbar tokens and the standard scrollbar properties.
|
|
5
|
+
/// `scrollbar-color`/`scrollbar-width` substitute their `var()`s on the declaring element and
|
|
6
|
+
/// inherit the resolved value, so every scope that overrides the tokens must include this mixin.
|
|
5
7
|
/// @access private
|
|
6
8
|
/// @see {mixin} tokens
|
|
7
9
|
/// @param {Map} $theme - The theme used to style the component.
|
|
8
|
-
@
|
|
9
|
-
|
|
10
|
+
/// @param {String} $scope [null] - The selector the tokens and styles are scoped to.
|
|
11
|
+
@mixin scrollbar($theme, $scope: null) {
|
|
12
|
+
$_scope: if(sass($scope): $scope; else: '.ig-scrollbar');
|
|
10
13
|
|
|
11
|
-
|
|
12
|
-
// The @-moz-document rule is specifically for Firefox because it does not support the WebKit pseudo-selectors for scrollbar styling.
|
|
13
|
-
/* stylelint-disable-next-line at-rule-no-vendor-prefix */
|
|
14
|
-
@-moz-document url-prefix() {
|
|
15
|
-
scrollbar-width: var-get($theme, 'sb-size');
|
|
16
|
-
scrollbar-color: var-get($theme, 'sb-thumb-bg-color') var-get($theme, 'sb-track-bg-color');
|
|
17
|
-
}
|
|
14
|
+
@include tokens($theme, $mode: 'scoped', $scope: $_scope);
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
16
|
+
// `&` is only valid when nested; at root it leaks out and invalidates the selector list.
|
|
17
|
+
@if is-root() {
|
|
18
|
+
#{$_scope} {
|
|
19
|
+
@include _scrollbar-properties($theme);
|
|
24
20
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
::-webkit-scrollbar-track:hover,
|
|
31
|
-
::-webkit-scrollbar-track:active {
|
|
32
|
-
background: var-get($theme, 'sb-track-bg-color-hover');
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
::-webkit-scrollbar-thumb {
|
|
36
|
-
min-height: var-get($theme, 'sb-thumb-min-height');
|
|
37
|
-
border-radius: var-get($theme, 'sb-thumb-border-radius');
|
|
38
|
-
border: var-get($theme, 'sb-thumb-border-size') solid var-get($theme, 'sb-thumb-border-color');
|
|
39
|
-
background-clip: content-box;
|
|
40
|
-
background-color: var-get($theme, 'sb-thumb-bg-color');
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
::-webkit-scrollbar-thumb:hover {
|
|
44
|
-
background-color: var-get($theme, 'sb-thumb-bg-color-hover');
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
::-webkit-scrollbar-corner {
|
|
48
|
-
background: var-get($theme, 'sb-corner-bg');
|
|
49
|
-
border: var-get($theme, 'sb-corner-border-size') solid var-get($theme, 'sb-corner-border-color');
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
::-webkit-scrollbar-track-piece {
|
|
53
|
-
border: var-get($theme, 'sb-track-border-size') solid var-get($theme, 'sb-track-border-color');
|
|
21
|
+
} @else {
|
|
22
|
+
&,
|
|
23
|
+
#{$_scope} {
|
|
24
|
+
@include _scrollbar-properties($theme);
|
|
54
25
|
}
|
|
55
26
|
}
|
|
27
|
+
}
|
|
56
28
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
29
|
+
/// @access private
|
|
30
|
+
/// @param {Map} $theme - The theme used to style the component.
|
|
31
|
+
@mixin _scrollbar-properties($theme) {
|
|
32
|
+
// `scrollbar-width` takes auto | thin | none only, so the length-based `sb-size` can't drive it.
|
|
33
|
+
scrollbar-width: var(--sb-width, auto);
|
|
34
|
+
scrollbar-color: var-get($theme, 'sb-thumb-bg-color') var-get($theme, 'sb-track-bg-color');
|
|
63
35
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
@use 'sass:map';
|
|
2
2
|
@use 'igniteui-theming/sass/themes' as *;
|
|
3
3
|
@use '../../../../../core/styles/themes/scoping' as *;
|
|
4
|
+
@use '../../../../../core/styles/components/scrollbar/scrollbar-theme' as *;
|
|
4
5
|
|
|
5
6
|
/// Emits the derived token overrides for the sub-components rendered inside
|
|
6
7
|
/// `igx-column-actions`, computed from the column-actions' own background, foreground and
|
|
@@ -73,14 +74,13 @@
|
|
|
73
74
|
--_scrollbar-thumb-color: color-mix(in srgb, var(--_column-actions-foreground) 50%, var(--_column-actions-background));
|
|
74
75
|
--_scrollbar-track-border-color: color-mix(in srgb, var(--_column-actions-foreground) 16%, var(--_column-actions-background));
|
|
75
76
|
|
|
76
|
-
@include
|
|
77
|
+
@include scrollbar(
|
|
77
78
|
scrollbar-theme(
|
|
78
79
|
$schema: $schema,
|
|
79
80
|
$sb-track-bg-color: var(--_column-actions-background, $scrollbar-bg-color),
|
|
80
81
|
$sb-thumb-bg-color: var(--_scrollbar-thumb-color, $scrollbar-thumb-color),
|
|
81
82
|
$sb-track-border-color: var(--_scrollbar-track-border-color, $scrollbar-track-border-color),
|
|
82
|
-
)
|
|
83
|
-
$mode: 'scoped'
|
|
83
|
+
)
|
|
84
84
|
);
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
@use 'igniteui-theming/sass/themes' as *;
|
|
3
3
|
@use 'igniteui-theming/sass/color' as *;
|
|
4
4
|
@use '../../../../../../core/styles/themes/scoping' as *;
|
|
5
|
+
@use '../../../../../../core/styles/components/scrollbar/scrollbar-theme' as *;
|
|
5
6
|
|
|
6
7
|
/// Emits the derived token overrides for the sub-components rendered inside
|
|
7
8
|
/// `igx-grid-excel-style-filtering`, computed from the igx-grid-excel-style-filtering's own background, foreground and
|
|
@@ -183,14 +184,13 @@
|
|
|
183
184
|
--_scrollbar-thumb-color: color-mix(in srgb, var(--_excel-filtering-foreground) 50%, var(--_excel-filtering-background));
|
|
184
185
|
--_scrollbar-track-border-color: color-mix(in srgb, var(--_excel-filtering-foreground) 16%, var(--_excel-filtering-background));
|
|
185
186
|
|
|
186
|
-
@include
|
|
187
|
+
@include scrollbar(
|
|
187
188
|
scrollbar-theme(
|
|
188
189
|
$schema: $schema,
|
|
189
190
|
$sb-track-bg-color: var(--_excel-filtering-background, $scrollbar-bg-color),
|
|
190
191
|
$sb-thumb-bg-color: var(--_scrollbar-thumb-color, $scrollbar-thumb-color),
|
|
191
192
|
$sb-track-border-color: var(--_scrollbar-track-border-color, $scrollbar-track-border-color),
|
|
192
|
-
)
|
|
193
|
-
$mode: 'scoped'
|
|
193
|
+
)
|
|
194
194
|
);
|
|
195
195
|
}
|
|
196
196
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
@use 'sass:map';
|
|
2
2
|
@use 'igniteui-theming/sass/themes' as *;
|
|
3
3
|
@use '../../core/styles/themes/scoping' as *;
|
|
4
|
+
@use '../../core/styles/components/scrollbar/scrollbar-theme' as *;
|
|
4
5
|
|
|
5
6
|
/// Emits the derived token overrides for the sub-components rendered inside
|
|
6
7
|
/// `ig*-grid`, computed from the grid's own background, foreground and
|
|
@@ -290,14 +291,13 @@
|
|
|
290
291
|
--_scrollbar-thumb-color: color-mix(in srgb, var(--_grid-foreground) 50%, var(--_grid-background));
|
|
291
292
|
--_scrollbar-track-border-color: color-mix(in srgb, var(--_grid-foreground) 16%, var(--_grid-background));
|
|
292
293
|
|
|
293
|
-
@include
|
|
294
|
+
@include scrollbar(
|
|
294
295
|
scrollbar-theme(
|
|
295
296
|
$schema: $schema,
|
|
296
297
|
$sb-track-bg-color: var(--_grid-background, var(--content-background), $scrollbar-bg-color),
|
|
297
298
|
$sb-thumb-bg-color: var(--_scrollbar-thumb-color, $scrollbar-thumb-color),
|
|
298
299
|
$sb-track-border-color: var(--_scrollbar-track-border-color, $scrollbar-track-border-color),
|
|
299
|
-
)
|
|
300
|
-
$mode: 'scoped'
|
|
300
|
+
)
|
|
301
301
|
);
|
|
302
302
|
|
|
303
303
|
@if $theme == 'indigo' {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
@use 'sass:map';
|
|
2
2
|
@use 'igniteui-theming/sass/themes' as *;
|
|
3
3
|
@use '../../../../core/styles/themes/scoping' as *;
|
|
4
|
+
@use '../../../../core/styles/components/scrollbar/scrollbar-theme' as *;
|
|
4
5
|
|
|
5
6
|
/// Emits the derived token overrides for the sub-components rendered inside
|
|
6
7
|
/// `igx-query-builder`, computed from the igx-query-builder's own background, foreground and
|
|
@@ -165,14 +166,13 @@
|
|
|
165
166
|
--_scrollbar-thumb-color: color-mix(in srgb, var(--_query-builder-foreground) 50%, var(--_query-builder-background));
|
|
166
167
|
--_scrollbar-track-border-color: color-mix(in srgb, var(--_query-builder-foreground) 16%, var(--_query-builder-background));
|
|
167
168
|
|
|
168
|
-
@include
|
|
169
|
+
@include scrollbar(
|
|
169
170
|
scrollbar-theme(
|
|
170
171
|
$schema: $schema,
|
|
171
172
|
$sb-track-bg-color: var(--_query-builder-background, $scrollbar-bg-color),
|
|
172
173
|
$sb-thumb-bg-color: var(--_scrollbar-thumb-color, $scrollbar-thumb-color),
|
|
173
174
|
$sb-track-border-color: var(--_scrollbar-track-border-color, $scrollbar-track-border-color),
|
|
174
|
-
)
|
|
175
|
-
$mode: 'scoped'
|
|
175
|
+
)
|
|
176
176
|
);
|
|
177
177
|
|
|
178
178
|
@if $theme == 'indigo' {
|
|
@@ -309,6 +309,16 @@
|
|
|
309
309
|
"version": "22.1.0",
|
|
310
310
|
"description": "Update Chip outline properties",
|
|
311
311
|
"factory": "./update-22_1_0_chip-outline"
|
|
312
|
+
},
|
|
313
|
+
"migration-61": {
|
|
314
|
+
"version": "22.2.0",
|
|
315
|
+
"description": "Removes scrollbar-theme properties with no effect under the standard scrollbar properties",
|
|
316
|
+
"factory": "./update-22_2_0"
|
|
317
|
+
},
|
|
318
|
+
"migration-62": {
|
|
319
|
+
"version": "22.2.0",
|
|
320
|
+
"description": "Removes the grid-summary border width properties now driven by the grid's own borders",
|
|
321
|
+
"factory": "./update-22_2_0_grid-summary-borders"
|
|
312
322
|
}
|
|
313
323
|
}
|
|
314
324
|
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "../../common/schema/theme-changes.schema.json",
|
|
3
|
+
"changes": [
|
|
4
|
+
{
|
|
5
|
+
"name": "$sb-size",
|
|
6
|
+
"remove": true,
|
|
7
|
+
"owner": "scrollbar-theme",
|
|
8
|
+
"type": "property"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "$sb-thumb-min-height",
|
|
12
|
+
"remove": true,
|
|
13
|
+
"owner": "scrollbar-theme",
|
|
14
|
+
"type": "property"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"name": "$sb-thumb-bg-color-hover",
|
|
18
|
+
"remove": true,
|
|
19
|
+
"owner": "scrollbar-theme",
|
|
20
|
+
"type": "property"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"name": "$sb-thumb-border-color",
|
|
24
|
+
"remove": true,
|
|
25
|
+
"owner": "scrollbar-theme",
|
|
26
|
+
"type": "property"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "$sb-thumb-border-size",
|
|
30
|
+
"remove": true,
|
|
31
|
+
"owner": "scrollbar-theme",
|
|
32
|
+
"type": "property"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "$sb-thumb-border-radius",
|
|
36
|
+
"remove": true,
|
|
37
|
+
"owner": "scrollbar-theme",
|
|
38
|
+
"type": "property"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "$sb-track-bg-color-hover",
|
|
42
|
+
"remove": true,
|
|
43
|
+
"owner": "scrollbar-theme",
|
|
44
|
+
"type": "property"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"name": "$sb-track-border-color",
|
|
48
|
+
"remove": true,
|
|
49
|
+
"owner": "scrollbar-theme",
|
|
50
|
+
"type": "property"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"name": "$sb-track-border-size",
|
|
54
|
+
"remove": true,
|
|
55
|
+
"owner": "scrollbar-theme",
|
|
56
|
+
"type": "property"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "$sb-corner-bg",
|
|
60
|
+
"remove": true,
|
|
61
|
+
"owner": "scrollbar-theme",
|
|
62
|
+
"type": "property"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "$sb-corner-border-color",
|
|
66
|
+
"remove": true,
|
|
67
|
+
"owner": "scrollbar-theme",
|
|
68
|
+
"type": "property"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"name": "$sb-corner-border-size",
|
|
72
|
+
"remove": true,
|
|
73
|
+
"owner": "scrollbar-theme",
|
|
74
|
+
"type": "property"
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const UpdateChanges_1 = require("../common/UpdateChanges");
|
|
13
|
+
const version = '22.2.0';
|
|
14
|
+
exports.default = () => (host, context) => __awaiter(void 0, void 0, void 0, function* () {
|
|
15
|
+
context.logger.info(`Applying migration for Ignite UI for Angular to version ${version}`);
|
|
16
|
+
const update = new UpdateChanges_1.UpdateChanges(__dirname, host, context);
|
|
17
|
+
update.applyChanges();
|
|
18
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|