diff --git a/adev/shared-docs/pipeline/shared/marked/extensions/docs-card/docs-card.mts b/adev/shared-docs/pipeline/shared/marked/extensions/docs-card/docs-card.mts index 3642e813c6b..ebd74453da1 100644 --- a/adev/shared-docs/pipeline/shared/marked/extensions/docs-card/docs-card.mts +++ b/adev/shared-docs/pipeline/shared/marked/extensions/docs-card/docs-card.mts @@ -18,6 +18,7 @@ interface DocsCardToken extends Tokens.Generic { href?: string; imgSrc?: string; iconImgSrc?: string; // Need image since icons are custom + titleInline?: boolean; tokens: Token[]; } @@ -30,6 +31,7 @@ const linkRule = /link="([^"]*)"/; const hrefRule = /href="([^"]*)"/; const imgSrcRule = /imgSrc="([^"]*)"/; const iconImgSrcRule = /iconImgSrc="([^"]*)"/; +const titleInlineRule = /(?:^|\s)titleInline(?=\s|$|=)/; export const docsCardExtension = { name: 'docs-card', @@ -47,6 +49,7 @@ export const docsCardExtension = { const href = hrefRule.exec(attr); const imgSrc = imgSrcRule.exec(attr); const iconImgSrc = iconImgSrcRule.exec(attr); + const titleInline = titleInlineRule.test(attr); const body = match[2].trim(); @@ -59,6 +62,7 @@ export const docsCardExtension = { link: link ? link[1] : undefined, imgSrc: imgSrc ? imgSrc[1] : undefined, iconImgSrc: iconImgSrc ? iconImgSrc[1] : undefined, + titleInline, tokens: [], }; this.lexer.blockTokens(token.body, token.tokens); @@ -79,12 +83,14 @@ function getStandardCard(renderer: AdevDocsRenderer, token: DocsCardToken) { // We need to read svg content, instead of renering svg with `img`, // cause we would like to use CSS variables to support dark and light mode. const icon = loadWorkspaceRelativeFile(token.iconImgSrc); + const header = token.titleInline + ? `
${icon}

${token.title}

` + : `${icon}

${token.title}

`; return `
- ${icon} -

${token.title}

+ ${header} ${renderer.parser.parse(token.tokens)}
${token.link ? token.link : 'Learn more'} diff --git a/adev/shared-docs/styles/docs/_card.scss b/adev/shared-docs/styles/docs/_card.scss index bed89f699bc..dedda443844 100644 --- a/adev/shared-docs/styles/docs/_card.scss +++ b/adev/shared-docs/styles/docs/_card.scss @@ -159,6 +159,21 @@ margin-block: 1.5rem; } + .docs-card-header-inline { + display: flex; + align-items: center; + gap: 0.5rem; + + svg { + margin-block-end: 0; + flex-shrink: 0; + } + + h3 { + margin-block: 0; + } + } + &.docs-card-with-svg { padding: 0; diff --git a/adev/src/assets/icons/playground.svg b/adev/src/assets/icons/playground.svg new file mode 100644 index 00000000000..c9d54a3ed75 --- /dev/null +++ b/adev/src/assets/icons/playground.svg @@ -0,0 +1,3 @@ + + + diff --git a/adev/src/content/introduction/BUILD.bazel b/adev/src/content/introduction/BUILD.bazel index f09f3aeeee8..5f881f654b7 100644 --- a/adev/src/content/introduction/BUILD.bazel +++ b/adev/src/content/introduction/BUILD.bazel @@ -15,6 +15,7 @@ generate_guides( "//adev/src/assets/icons:forms.svg", "//adev/src/assets/icons:language-service.svg", "//adev/src/assets/icons:ng-update.svg", + "//adev/src/assets/icons:playground.svg", "//adev/src/assets/icons:routing.svg", "//adev/src/assets/icons:signals.svg", "//adev/src/assets/icons:ssr.svg", diff --git a/adev/src/content/introduction/installation.md b/adev/src/content/introduction/installation.md index 1cfa843b65e..a6538b3e2c4 100644 --- a/adev/src/content/introduction/installation.md +++ b/adev/src/content/introduction/installation.md @@ -7,11 +7,9 @@ Get started with Angular quickly with online starters or locally with your termi If you just want to play around with Angular in your browser without setting up a project, you can use our online sandbox: - - - The fastest way to play with an Angular app. No setup required. - - + +The fastest way to play with an Angular app. No setup required. + ## Set up a new project locally