Skip to content

feat: add presentational country flag component and docs (#DS-1405)#1711

Open
NikGurev wants to merge 12 commits into
mainfrom
feat/DS-1405
Open

feat: add presentational country flag component and docs (#DS-1405)#1711
NikGurev wants to merge 12 commits into
mainfrom
feat/DS-1405

Conversation

@NikGurev

@NikGurev NikGurev commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Adds KbqFlag (<kbq-flag>) — a small, presentational country-flag component. The component owns only
presentation and accessibility; the flag graphic itself is supplied by the consumer as projected content.

  • Content projection, not data. The flag SVG is projected ([innerHTML] or a child element); the
    library ships no flag data and has no dependency on any flag package.

  • Inputs: shape (rectangle / square / circle), shadow (inset / none, a theme-adaptive
    inset hairline), empty (neutral
    placeholder), plus the a11y contract — labelrole="img" + accessible name, decorative
    aria-hidden.

  • Sizing follows font-size (height: 1em) with an aspect-ratio box; no hardcoded size presets.

  • Zero coupling / trivial customization. Any custom or non-country flag is just different projected
    SVG (or any element) — no API, no registration. The library stays data-free and dependency-free.

  • Simple and conventional. Rendering an inline <svg> is the most common way to show vector icons on
    the web — no image requests, no data-URL/base64 wrapping, no runtime fetch or icon-registry
    indirection. Consumers just import a flag string and drop it in.

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown

Visit the preview URL for this PR (updated for commit af3d09a):

https://koobiq-next--prs-1711-6vzyyk8c.web.app

(expires Mon, 13 Jul 2026 11:30:07 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: c9e37e518febda70d0317d07e8ceb35ac43c534c

@github-actions

github-actions Bot commented Jul 7, 2026

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 8, 2026

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@NikGurev NikGurev self-assigned this Jul 8, 2026
@NikGurev NikGurev added enhancement New feature or request 20.x labels Jul 8, 2026
@NikGurev NikGurev marked this pull request as ready for review July 8, 2026 16:17
@NikGurev NikGurev requested a review from lskramarov as a code owner July 8, 2026 16:17
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@NikGurev

NikGurev commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

/approve-snapshots

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

🔄 Updating snapshots.

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

✅ Snapshots updated!

@NikGurev

NikGurev commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

/approve-snapshots

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

🔄 Updating snapshots.

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

✅ Snapshots updated!

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.

Sample flag svg, so not quite filled into shaped

@artembelik

Copy link
Copy Markdown
Contributor

примеры не работают
image

@artembelik

Copy link
Copy Markdown
Contributor

мб добавим callout по аналогии с другими компонентами?
image

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

Adds a new @koobiq/components/flag package that provides <kbq-flag> — a small presentational wrapper for consumer-supplied flag graphics — and wires it into docs, examples, E2E, and the components-dev playground.

Changes:

  • Introduces KbqFlag component (+ types, styles, NgModule export, unit tests, API extractor/guard output).
  • Adds docs content + multiple docs examples (including a virtual-scroll select example) and a components-dev demo app.
  • Adds E2E route + Playwright visual-regression coverage and updates workspace config to include the new package.

Reviewed changes

Copilot reviewed 32 out of 36 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
yarn.lock Locks the newly added country-flag-icons dependency.
tsconfig.json Adds a path alias for @koobiq/components/flag.
tools/public_api_guard/components/flag.api.md New API guard snapshot for the Flag package.
tools/api-extractor/config.json Registers flag for API extraction.
packages/e2e/routes.ts Registers the Flag E2E component route.
packages/docs-examples/example-module.ts Registers Flag examples (and some additional non-Flag examples) for docs.
packages/docs-examples/components/flag/ng-package.json Adds ng-packagr config for the Flag docs-examples subpackage.
packages/docs-examples/components/flag/index.ts Declares/exports the Flag docs examples module and examples.
packages/docs-examples/components/flag/flag-stylized/flag-stylized-example.ts Adds a stylized flag docs example.
packages/docs-examples/components/flag/flag-square/flag-square-example.ts Adds a square-flag docs example.
packages/docs-examples/components/flag/flag-sizes/flag-sizes-example.ts Adds a flag sizing guidance docs example.
packages/docs-examples/components/flag/flag-overview/flag-overview-example.ts Adds an overview grid docs example.
packages/docs-examples/components/flag/flag-language/flag-language-example.ts Adds an a11y guidance example (“flag is not a language”).
packages/docs-examples/components/flag/flag-fallback/flag-fallback-example.ts Adds a fallback/placeholder example using hasFlag.
packages/docs-examples/components/flag/flag-circle/flag-circle-example.ts Adds a circular-flag docs example.
packages/docs-examples/components/flag/flag-aspect-ratio/flag-aspect-ratio-example.ts Adds a select + virtual scroll example demonstrating sizing/aspect ratio.
packages/components/flag/public-api.ts Exposes Flag public API surface.
packages/components/flag/ng-package.json Adds ng-packagr config for the new component package.
packages/components/flag/module.ts Provides KbqFlagModule for NgModule consumers.
packages/components/flag/index.ts Adds package entrypoint export.
packages/components/flag/flag.types.ts Defines KbqFlagShape/KbqFlagShadow types.
packages/components/flag/flag.ts Implements the KbqFlag component host bindings and inputs.
packages/components/flag/flag.spec.ts Adds unit tests for projection, modifiers, and a11y host attributes.
packages/components/flag/flag.scss Adds styling for sizing, shape, inset shadow, stylized mode, and empty placeholder.
packages/components/flag/flag.ru.md Adds Russian docs for usage/a11y guidelines + examples.
packages/components/flag/flag.en.md Adds English docs for usage/a11y guidelines + examples.
packages/components/flag/e2e.ts Adds E2E demo component for visual coverage without external flag data.
packages/components/flag/e2e.playwright-spec.ts Adds Playwright screenshot coverage (light/dark).
packages/components-dev/flag/tsconfig.app.json Adds TS config for the flag dev app.
packages/components-dev/flag/module.ts Adds dev app module wiring for Flag docs examples.
packages/components-dev/flag/main.ts Bootstraps the Flag dev app.
package.json Adds country-flag-icons dev dependency and dev:flag script.
apps/docs/src/app/structure.ts Registers Flag in docs navigation structure.
angular.json Adds a dev-flag Angular project configuration.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread package.json
Comment thread packages/docs-examples/example-module.ts
Comment thread apps/docs/src/app/structure.ts
Comment thread packages/components/flag/flag.en.md Outdated
ru: 'Flag',
en: 'Flag'
},
svgPreview: '',

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.

@rmnturov нужна иконка

Comment thread packages/components/flag/flag.ts Outdated
@NikGurev

NikGurev commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

примеры не работают

#1715 поправили тут

Comment thread package.json
@NikGurev NikGurev requested a review from rmnturov July 9, 2026 09:27
@rmnturov

rmnturov commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

скроллбар не стилизовался
image

@rmnturov

Copy link
Copy Markdown
Contributor

Отступ еще как-то ненужный у скроллбара
image

У самого окна не нужно паддингов. Паддинги нужны уже внутри самое прокручиваемой области (список опций)

@rmnturov

Copy link
Copy Markdown
Contributor

По stylized (и его реализации в flag.scss) — это был просто пример для документации, демонстрирующий возможную кастомную стилизацию (градиент, тень, скругление), а не универсальное решение, которое стоит зашивать в сам компонент. Конкретные значения градиента/тени/radius лучше не хардкодить в библиотечном коде — предлагаю либо вынести это в пример кастомизации в доках (без встроенного пропа), либо вынести значения в переопределяемые CSS-переменные, если проп всё же остаётся.

@rmnturov

Copy link
Copy Markdown
Contributor

В мире не менее (а то и более) распространены флаги с пропорцией 4:3 — не только из country-flag-icons. Хотелось бы, чтобы обёртка могла работать и с такими флагами, а не только с жёстко зафиксированными 3:2.

@NikGurev

Copy link
Copy Markdown
Contributor Author

скроллбар не стилизовался

@rmnturov это select с виртуальным скроллом, известная проблема. Использовал его, так как из-за большого количества svg страница подтормаживала

@lskramarov

Copy link
Copy Markdown
Contributor

скроллбар не стилизовался

@rmnturov это select с виртуальным скроллом, известная проблема. Использовал его, так как из-за большого количества svg страница подтормаживала

@NikGurev количество стран конечное и сравнительно не большое, что бы использовать вирт скрол, давай без него

@NikGurev

Copy link
Copy Markdown
Contributor Author

В мире не менее (а то и более) распространены флаги с пропорцией 4:3 — не только из country-flag-icons. Хотелось бы, чтобы обёртка могла работать и с такими флагами, а не только с жёстко зафиксированными 3:2.

добавил кастомизацию через --kbq-flag-aspect-ratio

@NikGurev

Copy link
Copy Markdown
Contributor Author

По stylized (и его реализации в flag.scss) — это был просто пример для документации, демонстрирующий возможную кастомную стилизацию (градиент, тень, скругление), а не универсальное решение, которое стоит зашивать в сам компонент. Конкретные значения градиента/тени/radius лучше не хардкодить в библиотечном коде — предлагаю либо вынести это в пример кастомизации в доках (без встроенного пропа), либо вынести значения в переопределяемые CSS-переменные, если проп всё же остаётся.

вынес кастомизацию в пример, border-radius кастомизируется через --kbq-flag-border-radius

@github-actions

Copy link
Copy Markdown

🚨 E2E tests failed

Review the report for details.


💡 Comment /approve-snapshots to approve snapshot changes.

@NikGurev

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.

@NikGurev

Copy link
Copy Markdown
Contributor Author

/approve-snapshots

@github-actions

Copy link
Copy Markdown

🔄 Updating 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.

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

Labels

20.x enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants