Skip to content

feat(scrollbar): independent scrollbar implimentation (#DS-3176) - #1798

Open
artembelik wants to merge 6 commits into
mainfrom
feat/DS-3176
Open

feat(scrollbar): independent scrollbar implimentation (#DS-3176)#1798
artembelik wants to merge 6 commits into
mainfrom
feat/DS-3176

Conversation

@artembelik

Copy link
Copy Markdown
Contributor

No description provided.

@artembelik artembelik self-assigned this Jul 29, 2026
@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@github-actions

github-actions Bot commented Jul 29, 2026

Copy link
Copy Markdown

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

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@artembelik

Copy link
Copy Markdown
Contributor Author

/approve-snapshots

@github-actions

Copy link
Copy Markdown

🔄 Updating snapshots.

@github-actions

Copy link
Copy Markdown

🚨 Failed to update snapshots.

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@artembelik

Copy link
Copy Markdown
Contributor Author

/approve-snapshots

@github-actions

Copy link
Copy Markdown

🔄 Updating snapshots.

@github-actions

Copy link
Copy Markdown

✅ Snapshots updated!

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@artembelik

Copy link
Copy Markdown
Contributor Author

/approve-snapshots

@github-actions

Copy link
Copy Markdown

🔄 Updating snapshots.

@github-actions

Copy link
Copy Markdown

✅ Snapshots updated!

@artembelik
artembelik requested a review from Copilot August 3, 2026 07:32
@artembelik
artembelik marked this pull request as ready for review August 3, 2026 07:32

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/private entry 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.

Comment thread packages/components/scrollbar/private/scrollbar.ts Outdated
Comment thread packages/components/scrollbar/private/scrollbar.ts Outdated
@artembelik

Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts in this pull request

Copilot AI commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

@copilot resolve the merge conflicts in this pull request

Resolved the merge conflict in tools/cspell-locales/ru.json — both скроллеру (from main) and скроллить (from this branch) are now included in the word list. Merge commit: d902ab2.

@artembelik
artembelik marked this pull request as draft August 3, 2026 14:31
@artembelik
artembelik force-pushed the feat/DS-3176 branch 2 times, most recently from bd98288 to 0a72bad Compare August 11, 2026 13:06
@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@artembelik

Copy link
Copy Markdown
Contributor Author

/approve-snapshots

@github-actions

Copy link
Copy Markdown

🔄 Updating snapshots.

@github-actions

Copy link
Copy Markdown

🚨 Failed to update snapshots.

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@artembelik
artembelik requested a balanced review from Copilot August 12, 2026 08:55
@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@artembelik
artembelik marked this pull request as ready for review August 12, 2026 11:07
@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@lskramarov lskramarov left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В timezone остался старый скролл

@artembelik

Copy link
Copy Markdown
Contributor Author

В 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.';

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Мы на 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>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ag-grid-overview - сломалось отображение

Image

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Аналогично

image

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это ожидаемо, баг на дизейблед сколбар у нас есть в беклоге, те он воспроизводился переодичски ранее, не связано с данными изменениями

скрол в dto поправлю

@NikGurev NikGurev Aug 14, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут не дизейблед скролбар, в доке сейчас так не отображается. Самый первый пример: https://koobiq.io/ru/components/ag-grid/overview

image

// 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 = {

@NikGurev NikGurev Aug 13, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Давай сделаем тип на основе HTMLElement. Будет единым источником правды

type Dimension = Pick<HTMLElement, 'scrollTop' | 'scrollHeight' .... >;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants