feat(scrollbar): independent scrollbar implimentation (#DS-3176) - #1798
feat(scrollbar): independent scrollbar implimentation (#DS-3176)#1798artembelik wants to merge 6 commits into
Conversation
🚨 E2E tests failedReview the report for details. 💡 Comment |
|
Visit the preview URL for this PR (updated for commit 27bac45): https://koobiq-next--prs-1798-x2s07lds.web.app (expires Sat, 15 Aug 2026 12:09:30 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: c9e37e518febda70d0317d07e8ceb35ac43c534c |
🚨 E2E tests failedReview the report for details. 💡 Comment |
|
/approve-snapshots |
|
🔄 Updating snapshots. |
|
🚨 Failed to update snapshots. |
🚨 E2E tests failedReview the report for details. 💡 Comment |
🚨 E2E tests failedReview the report for details. 💡 Comment |
|
/approve-snapshots |
|
🔄 Updating snapshots. |
|
✅ Snapshots updated! |
🚨 E2E tests failedReview the report for details. 💡 Comment |
🚨 E2E tests failedReview the report for details. 💡 Comment |
🚨 E2E tests failedReview the report for details. 💡 Comment |
🚨 E2E tests failedReview the report for details. 💡 Comment |
|
/approve-snapshots |
|
🔄 Updating snapshots. |
|
✅ Snapshots updated! |
There was a problem hiding this comment.
Pull request overview
This PR introduces a new internal (“private”) scrollbar implementation (KbqScrollbar) that renders custom track/thumb UI without relying on the external overlayscrollbars library, and migrates KbqContentPanel to use it. It also wires up API extraction/paths for a nested entry point and adds docs/e2e coverage for the new scrollbar behavior.
Changes:
- Added
@koobiq/components/scrollbar/privateentry point (paths + ng-package) and API extractor support for nested entrypoints. - Implemented the new dependency-free scrollbar directive, styles, unit tests, and Playwright e2e coverage.
- Updated content-panel (and its docs/e2e) to use the new private scrollbar instead of the overlayscrollbars-based component.
Reviewed changes
Copilot reviewed 34 out of 37 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| tsconfig.json | Adds TS path alias for @koobiq/components/scrollbar/private. |
| tools/public_api_guard/components/scrollbar-private.api.md | New API guard snapshot for the private scrollbar entry point. |
| tools/public_api_guard/components/content-panel.api.md | Updates API snapshot due to content-panel referencing the private scrollbar entry point. |
| tools/cspell-locales/ru.json | Adds RU spelling exceptions for new scrollbar-related terminology. |
| tools/api-extractor/config.json | Adds scrollbar/private to API extractor component list. |
| tools/api-extractor/api-extractor.ts | Flattens nested entrypoint name for api.md report file naming. |
| packages/e2e/routes.ts | Registers new private scrollbar e2e routes/components and keeps existing scrollbar e2e route. |
| packages/docs-examples/example-module.ts | Adds new docs examples (AG Grid + private scrollbar examples) and updates example routing map. |
| packages/docs-examples/components/scrollbar/private-scrollbar-visibility/private-scrollbar-visibility-example.ts | New docs example for private scrollbar visibility modes. |
| packages/docs-examples/components/scrollbar/private-scrollbar-virtual-scroll/private-scrollbar-virtual-scroll-example.ts | New docs example showing virtual-scroll delegation. |
| packages/docs-examples/components/scrollbar/private-scrollbar-scroll-to/private-scrollbar-scroll-to-example.ts | New docs example for programmatic scrolling APIs. |
| packages/docs-examples/components/scrollbar/private-scrollbar-rtl/private-scrollbar-rtl-example.ts | New docs example for RTL behavior. |
| packages/docs-examples/components/scrollbar/private-scrollbar-native/private-scrollbar-native-example.ts | New docs example for native fallback via provider config. |
| packages/docs-examples/components/scrollbar/private-scrollbar-disable-interaction/private-scrollbar-disable-interaction-example.ts | New docs example for disabling drag/click interactions independently. |
| packages/docs-examples/components/scrollbar/index.ts | Exports and registers new private scrollbar docs examples in the scrollbar examples module. |
| packages/components/scrollbar/scrollbar.ru.md | Adds a “programmatic control” section hook for scrollbar docs. |
| packages/components/scrollbar/scrollbar.en.md | Adds a “programmatic control” section hook for scrollbar docs. |
| packages/components/scrollbar/private/scrollbar.ts | Adds the new independent scrollbar directive implementation and related types/providers. |
| packages/components/scrollbar/private/scrollbar.spec.ts | Adds comprehensive Jest unit tests for the private scrollbar directive. |
| packages/components/scrollbar/private/scrollbar.scss | Adds styles/tokens for the private scrollbar track/thumb UI. |
| packages/components/scrollbar/private/scrollbar.module.ts | Adds an NgModule wrapper exporting the private scrollbar directives. |
| packages/components/scrollbar/private/public-api.ts | Defines the private scrollbar entry point public exports. |
| packages/components/scrollbar/private/ng-package.json | Adds packaging config for the nested scrollbar/private entry point. |
| packages/components/scrollbar/private/index.ts | Entry-point barrel exporting public-api. |
| packages/components/scrollbar/private/e2e.ts | Adds e2e demo components for private scrollbar scenarios. |
| packages/components/scrollbar/private/e2e.playwright-spec.ts | Adds Playwright specs validating private scrollbar rendering and interactions. |
| packages/components/scrollbar/examples.scrollbar.ru.md | Replaces old placeholder with detailed RU docs examples for the private scrollbar. |
| packages/components/scrollbar/examples.scrollbar.en.md | Replaces old placeholder with detailed EN docs examples for the private scrollbar. |
| packages/components/content-panel/e2e.playwright-spec.ts | Updates selectors to match the new scroll viewport structure (.kbq-private-scrollbar-viewport). |
| packages/components/content-panel/content-panel.ts | Migrates content-panel body/container to kbqScrollbar directive usage. |
| packages/components/content-panel/content-panel.ru.md | Removes overlayscrollbars dependency note (content-panel no longer uses it). |
| packages/components/content-panel/content-panel.en.md | Removes overlayscrollbars dependency note (content-panel no longer uses it). |
| packages/components-dev/scrollbar/template.html | Simplifies dev app template to render the docs examples block. |
| packages/components-dev/scrollbar/styles.scss | Updates dev app layout styling. |
| packages/components-dev/scrollbar/module.ts | Replaces custom dev examples with imports/rendering of docs examples components. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@copilot resolve the merge conflicts in this pull request |
bd98288 to
0a72bad
Compare
🚨 E2E tests failedReview the report for details. 💡 Comment |
|
/approve-snapshots |
|
🔄 Updating snapshots. |
|
🚨 Failed to update snapshots. |
0a72bad to
e0eb829
Compare
🚨 E2E tests failedReview the report for details. 💡 Comment |
🚨 E2E tests failedReview the report for details. 💡 Comment |
🚨 E2E tests failedReview the report for details. 💡 Comment |
🚨 E2E tests failedReview the report for details. 💡 Comment |
e6915e1 to
3982562
Compare
🚨 E2E tests failedReview the report for details. 💡 Comment |
lskramarov
left a comment
There was a problem hiding this comment.
В timezone остался старый скролл
на это есть задача DS-3584 (исправим во всех выпадашках), в этих компонентах используется "kbq-scrollbar" селектор, а не kbq-scrollbar компонент, поэтому в данном пре не вносил изменения |
| } | ||
|
|
||
| @mixin _kbq-scrollbar() { | ||
| @warn 'The `.kbq-scrollbar` selector and related mixins/tokens are deprecated. Use the `KbqScrollbar` component instead. Will be removed in the next major version.'; |
There was a problem hiding this comment.
Мы на 100% хотим уходить от такой реализации?
CSS скролбар может быть достаточным для простой кастомизации
| <span>DTO sent to the backend:</span> | ||
| <pre class="kbq-scrollbar"><code>{{ selectionDto() | json }}</code></pre> | ||
| <pre><code>{{ selectionDto() | json }}</code></pre> | ||
| </div> |
There was a problem hiding this comment.
это ожидаемо, баг на дизейблед сколбар у нас есть в беклоге, те он воспроизводился переодичски ранее, не связано с данными изменениями
скрол в dto поправлю
There was a problem hiding this comment.
Тут не дизейблед скролбар, в доке сейчас так не отображается. Самый первый пример: https://koobiq.io/ru/components/ag-grid/overview
| // and the thumb overhangs the track's trailing edge at the very end of the scroll range. | ||
| const MIN_THUMB_BOX_SIZE = MIN_THUMB_SIZE + THUMB_GAP * 2; | ||
|
|
||
| type Dimension = { |
There was a problem hiding this comment.
Давай сделаем тип на основе HTMLElement. Будет единым источником правды
type Dimension = Pick<HTMLElement, 'scrollTop' | 'scrollHeight' .... >;


No description provided.