Skip to content

Set up shared package for components and utilities#13486

Draft
parlough wants to merge 42 commits into
mainfrom
feat/site_shared
Draft

Set up shared package for components and utilities#13486
parlough wants to merge 42 commits into
mainfrom
feat/site_shared

Conversation

@parlough

@parlough parlough commented Jun 10, 2026

Copy link
Copy Markdown
Member

Adds a new site_shared package that contains components and other utilities for sharing with dart-lang/site-www.

  • Moved all components that are the same between both sites.
  • Moved and adapted components that exist on both sites but are slightly different (such as SiteSwitcher and Quiz)
  • Moved styled used by moved components.
  • Moved the markdown rendering setup, which is the same for both sites.
  • Moved some utilities that are needed by extracted components, such as analytics and code highlighting.

schultek and others added 17 commits April 13, 2026 12:57
# Conflicts:
#	packages/site_shared/lib/_sass/base/_mixins.scss
#	packages/site_shared/lib/_sass/base/_reset.scss
#	packages/site_shared/lib/_sass/components/_alert.scss
#	packages/site_shared/lib/_sass/components/_banner.scss
#	packages/site_shared/lib/_sass/components/_breadcrumbs.scss
#	packages/site_shared/lib/_sass/components/_button.scss
#	packages/site_shared/lib/_sass/components/_card.scss
#	packages/site_shared/lib/_sass/components/_code.scss
#	packages/site_shared/lib/_sass/components/_cookie-notice.scss
#	packages/site_shared/lib/_sass/components/_dropdown.scss
#	packages/site_shared/lib/_sass/components/_quiz.scss
#	packages/site_shared/lib/_sass/components/_site-switcher.scss
#	packages/site_shared/lib/_sass/components/_stepper.scss
#	packages/site_shared/lib/_sass/components/_summary-card.scss
#	packages/site_shared/lib/_sass/components/_tabs.scss
#	packages/site_shared/lib/_sass/components/_theming.scss
#	packages/site_shared/lib/_sass/components/_tooltip.scss
#	packages/site_shared/lib/components/common/breadcrumbs.dart
#	packages/site_shared/lib/components/common/button.dart
#	packages/site_shared/lib/components/common/card.dart
#	packages/site_shared/lib/components/common/chip.dart
#	packages/site_shared/lib/components/common/client/collapse_button.dart
#	packages/site_shared/lib/components/common/client/cookie_notice.dart
#	packages/site_shared/lib/components/common/client/copy_button.dart
#	packages/site_shared/lib/components/common/client/download_button.dart
#	packages/site_shared/lib/components/common/client/feedback.dart
#	packages/site_shared/lib/components/common/client/on_this_page_button.dart
#	packages/site_shared/lib/components/common/client/page_header_options.dart
#	packages/site_shared/lib/components/common/client/simple_tooltip.dart
#	packages/site_shared/lib/components/common/dropdown.dart
#	packages/site_shared/lib/components/common/fragment_target.dart
#	packages/site_shared/lib/components/common/material_icon.dart
#	packages/site_shared/lib/components/common/search.dart
#	packages/site_shared/lib/components/common/tabs.dart
#	packages/site_shared/lib/components/common/tags.dart
#	packages/site_shared/lib/components/common/tooltip.dart
#	packages/site_shared/lib/components/common/wrapped_code_block.dart
#	packages/site_shared/lib/components/common/youtube_embed.dart
#	packages/site_shared/lib/components/dartpad/dartpad_injector.dart
#	packages/site_shared/lib/components/dartpad/embedded_dartpad.dart
#	packages/site_shared/lib/components/layout/menu_toggle.dart
#	packages/site_shared/lib/components/layout/site_switcher.dart
#	packages/site_shared/lib/components/layout/theme_switcher.dart
#	packages/site_shared/lib/components/tutorial/client/progress_ring.dart
#	packages/site_shared/lib/components/tutorial/client/quiz.dart
#	packages/site_shared/lib/components/tutorial/downloadable_snippet.dart
#	packages/site_shared/lib/components/tutorial/models/quiz_model.dart
#	packages/site_shared/lib/components/tutorial/models/summary_card_model.dart
#	packages/site_shared/lib/components/tutorial/models/tutorial_model.dart
#	packages/site_shared/lib/components/tutorial/progress_ring.dart
#	packages/site_shared/lib/components/tutorial/stepper.dart
#	packages/site_shared/lib/components/tutorial/summary_card.dart
#	packages/site_shared/lib/components/tutorial/tutorial_outline.dart
#	packages/site_shared/lib/components/utils/global_event_listener.dart
#	packages/site_shared/lib/extensions/attribute_processor.dart
#	packages/site_shared/lib/extensions/code_block_processor.dart
#	packages/site_shared/lib/extensions/header_extractor.dart
#	packages/site_shared/lib/extensions/header_processor.dart
#	packages/site_shared/lib/extensions/table_processor.dart
#	packages/site_shared/lib/src/builders/styles_hash_builder.dart
#	packages/site_shared/lib/src/highlight/theme/dark.dart
#	packages/site_shared/lib/src/highlight/theme/light.dart
#	packages/site_shared/lib/src/highlight/token_renderer.dart
#	packages/site_shared/lib/src/markdown/alert_syntax.dart
#	packages/site_shared/lib/src/markdown/attribute_syntax.dart
#	packages/site_shared/lib/src/markdown/fenced_code_block_syntax.dart
#	packages/site_shared/lib/src/markdown/header_syntax.dart
#	packages/site_shared/lib/src/markdown/markdown_parser.dart
#	packages/site_shared/lib/src/utils/retake_element.dart
#	packages/site_shared/lib/src/utils/retake_element_web.dart
#	pubspec.yaml
#	site/lib/_sass/base/_mixins.scss
#	site/lib/_sass/base/_reset.scss
#	site/lib/_sass/components/_alert.scss
#	site/lib/_sass/components/_banner.scss
#	site/lib/_sass/components/_breadcrumbs.scss
#	site/lib/_sass/components/_button.scss
#	site/lib/_sass/components/_card.scss
#	site/lib/_sass/components/_code.scss
#	site/lib/_sass/components/_cookie-notice.scss
#	site/lib/_sass/components/_dropdown.scss
#	site/lib/_sass/components/_quiz.scss
#	site/lib/_sass/components/_site-switcher.scss
#	site/lib/_sass/components/_stepper.scss
#	site/lib/_sass/components/_summary-card.scss
#	site/lib/_sass/components/_tabs.scss
#	site/lib/_sass/components/_theming.scss
#	site/lib/_sass/components/_tooltip.scss
#	site/lib/src/builders/styles_hash_builder.dart
#	site/lib/src/components/common/breadcrumbs.dart
#	site/lib/src/components/common/button.dart
#	site/lib/src/components/common/card.dart
#	site/lib/src/components/common/chip.dart
#	site/lib/src/components/common/client/collapse_button.dart
#	site/lib/src/components/common/client/cookie_notice.dart
#	site/lib/src/components/common/client/copy_button.dart
#	site/lib/src/components/common/client/download_button.dart
#	site/lib/src/components/common/client/feedback.dart
#	site/lib/src/components/common/client/on_this_page_button.dart
#	site/lib/src/components/common/client/page_header_options.dart
#	site/lib/src/components/common/client/simple_tooltip.dart
#	site/lib/src/components/common/dropdown.dart
#	site/lib/src/components/common/fragment_target.dart
#	site/lib/src/components/common/material_icon.dart
#	site/lib/src/components/common/search.dart
#	site/lib/src/components/common/tabs.dart
#	site/lib/src/components/common/tags.dart
#	site/lib/src/components/common/tooltip.dart
#	site/lib/src/components/common/wrapped_code_block.dart
#	site/lib/src/components/common/youtube_embed.dart
#	site/lib/src/components/dartpad/dartpad_injector.dart
#	site/lib/src/components/dartpad/embedded_dartpad.dart
#	site/lib/src/components/layout/menu_toggle.dart
#	site/lib/src/components/layout/site_switcher.dart
#	site/lib/src/components/layout/theme_switcher.dart
#	site/lib/src/components/tutorial/client/progress_ring.dart
#	site/lib/src/components/tutorial/client/quiz.dart
#	site/lib/src/components/tutorial/downloadable_snippet.dart
#	site/lib/src/components/tutorial/progress_ring.dart
#	site/lib/src/components/tutorial/stepper.dart
#	site/lib/src/components/tutorial/summary_card.dart
#	site/lib/src/components/tutorial/tutorial_outline.dart
#	site/lib/src/components/util/global_event_listener.dart
#	site/lib/src/components/util/retake_element.dart
#	site/lib/src/components/util/retake_element_web.dart
#	site/lib/src/extensions/attribute_processor.dart
#	site/lib/src/extensions/code_block_processor.dart
#	site/lib/src/extensions/header_extractor.dart
#	site/lib/src/extensions/header_processor.dart
#	site/lib/src/extensions/table_processor.dart
#	site/lib/src/highlight/theme/dark.dart
#	site/lib/src/highlight/theme/light.dart
#	site/lib/src/highlight/token_renderer.dart
#	site/lib/src/markdown/alert_syntax.dart
#	site/lib/src/markdown/attribute_syntax.dart
#	site/lib/src/markdown/fenced_code_block_syntax.dart
#	site/lib/src/markdown/header_syntax.dart
#	site/lib/src/markdown/markdown_parser.dart
#	site/lib/src/models/quiz_model.dart
#	site/lib/src/models/summary_card_model.dart
#	site/lib/src/models/tutorial_model.dart
#	sites/docs/lib/_sass/base/_mixins.scss
#	sites/docs/lib/_sass/base/_reset.scss
#	sites/docs/lib/_sass/components/_alert.scss
#	sites/docs/lib/_sass/components/_banner.scss
#	sites/docs/lib/_sass/components/_breadcrumbs.scss
#	sites/docs/lib/_sass/components/_button.scss
#	sites/docs/lib/_sass/components/_card.scss
#	sites/docs/lib/_sass/components/_code.scss
#	sites/docs/lib/_sass/components/_cookie-notice.scss
#	sites/docs/lib/_sass/components/_dropdown.scss
#	sites/docs/lib/_sass/components/_quiz.scss
#	sites/docs/lib/_sass/components/_site-switcher.scss
#	sites/docs/lib/_sass/components/_stepper.scss
#	sites/docs/lib/_sass/components/_summary-card.scss
#	sites/docs/lib/_sass/components/_tabs.scss
#	sites/docs/lib/_sass/components/_theming.scss
#	sites/docs/lib/_sass/components/_tooltip.scss
#	sites/docs/lib/builders.dart
#	sites/docs/lib/src/builders/styles_hash_builder.dart
#	sites/docs/lib/src/components/common/breadcrumbs.dart
#	sites/docs/lib/src/components/common/button.dart
#	sites/docs/lib/src/components/common/card.dart
#	sites/docs/lib/src/components/common/chip.dart
#	sites/docs/lib/src/components/common/client/collapse_button.dart
#	sites/docs/lib/src/components/common/client/cookie_notice.dart
#	sites/docs/lib/src/components/common/client/copy_button.dart
#	sites/docs/lib/src/components/common/client/download_button.dart
#	sites/docs/lib/src/components/common/client/feedback.dart
#	sites/docs/lib/src/components/common/client/on_this_page_button.dart
#	sites/docs/lib/src/components/common/client/page_header_options.dart
#	sites/docs/lib/src/components/common/client/simple_tooltip.dart
#	sites/docs/lib/src/components/common/dropdown.dart
#	sites/docs/lib/src/components/common/fragment_target.dart
#	sites/docs/lib/src/components/common/material_icon.dart
#	sites/docs/lib/src/components/common/search.dart
#	sites/docs/lib/src/components/common/tabs.dart
#	sites/docs/lib/src/components/common/tags.dart
#	sites/docs/lib/src/components/common/tooltip.dart
#	sites/docs/lib/src/components/common/wrapped_code_block.dart
#	sites/docs/lib/src/components/common/youtube_embed.dart
#	sites/docs/lib/src/components/dartpad/dartpad_injector.dart
#	sites/docs/lib/src/components/dartpad/embedded_dartpad.dart
#	sites/docs/lib/src/components/layout/banner.dart
#	sites/docs/lib/src/components/layout/menu_toggle.dart
#	sites/docs/lib/src/components/layout/site_switcher.dart
#	sites/docs/lib/src/components/layout/theme_switcher.dart
#	sites/docs/lib/src/components/tutorial/client/progress_ring.dart
#	sites/docs/lib/src/components/tutorial/client/quiz.dart
#	sites/docs/lib/src/components/tutorial/downloadable_snippet.dart
#	sites/docs/lib/src/components/tutorial/progress_ring.dart
#	sites/docs/lib/src/components/tutorial/quiz.dart
#	sites/docs/lib/src/components/tutorial/stepper.dart
#	sites/docs/lib/src/components/tutorial/summary_card.dart
#	sites/docs/lib/src/components/tutorial/tutorial_outline.dart
#	sites/docs/lib/src/components/util/component_ref.dart
#	sites/docs/lib/src/components/util/global_event_listener.dart
#	sites/docs/lib/src/components/util/retake_element.dart
#	sites/docs/lib/src/components/util/retake_element_vm.dart
#	sites/docs/lib/src/components/util/retake_element_web.dart
#	sites/docs/lib/src/extensions/attribute_processor.dart
#	sites/docs/lib/src/extensions/code_block_processor.dart
#	sites/docs/lib/src/extensions/header_extractor.dart
#	sites/docs/lib/src/extensions/header_processor.dart
#	sites/docs/lib/src/extensions/table_processor.dart
#	sites/docs/lib/src/highlight/theme/dark.dart
#	sites/docs/lib/src/highlight/theme/light.dart
#	sites/docs/lib/src/highlight/token_renderer.dart
#	sites/docs/lib/src/layouts/dash_layout.dart
#	sites/docs/lib/src/layouts/flutter_layout.dart
#	sites/docs/lib/src/markdown/alert_syntax.dart
#	sites/docs/lib/src/markdown/attribute_syntax.dart
#	sites/docs/lib/src/markdown/fenced_code_block_syntax.dart
#	sites/docs/lib/src/markdown/header_syntax.dart
#	sites/docs/lib/src/markdown/markdown_parser.dart
#	sites/docs/lib/src/models/quiz_model.dart
#	sites/docs/lib/src/models/summary_card_model.dart
#	sites/docs/lib/src/models/tutorial_model.dart
#	sites/docs/lib/src/util.dart
#	sites/docs/pubspec.yaml
#	sites/docs/src/data/banner.yml
#	sites/docs/src/data/site.yml
@flutter-website-bot

flutter-website-bot commented Jun 10, 2026

Copy link
Copy Markdown
Collaborator

Staged preview of the updated docs.flutter.dev site (updated for commit ad806da):

https://flutter-docs-prod--docs-pr13486-feat-site-shared-227hub3q.web.app

@flutter-website-bot

flutter-website-bot commented Jun 10, 2026

Copy link
Copy Markdown
Collaborator

Staged preview of the updated flutter.dev site (updated for commit ad806da):

https://flutter-dev-230821--www-pr13486-feat-site-shared-w9ez94yu.web.app

@parlough

Copy link
Copy Markdown
Member Author

/gemini review

gemini-code-assist[bot]

This comment was marked as resolved.

sfshaza2 pushed a commit that referenced this pull request Jun 10, 2026
Updates the docs-site banner to be updated by modifying the
`sites/docs/src/data/banner.yml` file, specifying entries as either text
or link based. This better fits our site implementation and will enable
sharing additional setup with dart.dev.

Extracted and modified from
#13486.

@sfshaza2 sfshaza2 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.

I know it's in draft form... lgtm

parlough added 2 commits June 14, 2026 12:26
# Conflicts:
#	packages/site_shared/lib/layouts/dash_layout.dart
#	sites/docs/lib/src/components/layout/banner.dart
#	sites/docs/src/data/banner.yml
@parlough

Copy link
Copy Markdown
Member Author

/gemini review

@gemini-code-assist gemini-code-assist Bot 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.

Code Review

This pull request extracts shared logic, UI components, styles, and layouts from the docs site into a new centralized package named site_shared, updating the docs site to depend on it. The code review identified numerous critical syntax errors introduced during this refactoring, primarily consisting of invalid method and constructor shorthand invocations (such as .text, .fragment, .fromEnvironment, and .empty()) and unqualified enum values (e.g., .macOS, .windows). Additionally, issues regarding a potential null-pointer dereference on codeElement in CopyButton and a type mismatch with progress in ProgressRing were raised.

Comment thread sites/docs/lib/src/layouts/flutter_layout.dart
Comment thread packages/site_shared/lib/components/tutorial/tutorial_outline.dart
Comment thread packages/site_shared/lib/util.dart
Comment thread packages/site_shared/lib/components/utils/component_ref.dart
Comment thread packages/site_shared/lib/src/utils/retake_element_web.dart
Comment thread packages/site_shared/lib/components/common/button.dart
Comment thread packages/site_shared/lib/src/layouts/dash_layout.dart
Comment thread sites/docs/lib/src/client/global_scripts.dart
Comment thread packages/site_shared/lib/components/common/client/copy_button.dart
Comment thread packages/site_shared/lib/components/tutorial/progress_ring.dart
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.

4 participants