-
Notifications
You must be signed in to change notification settings - Fork 14
feat: add mitosis examples to generate storybook files next to showcase examples #5387
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
nmerget
wants to merge
49
commits into
main
Choose a base branch
from
feat-examples-plugins
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
49 commits
Select commit
Hold shift + click to select a range
38289f8
feat: add mitosis plugins for showcases and storybook
nmerget be83b1f
chore: update examples structure
nmerget c5148c6
chore: add button examples for every framework
nmerget ae581fb
chore: update mitosis.config.cjs
nmerget b9be380
chore: update patternhub to use button showcase
nmerget 8b091b0
fix: linting issues
nmerget 2f18755
fix: linting issues
nmerget 9f35296
fix: build issues
nmerget 20c5dfc
Merge branch 'main' into feat-examples-plugins
nmerget e8a1d13
fix: build issues
nmerget 017cf49
fix: issue with remaining slot code
nmerget 843e5f9
chore: update button.showcase.lite.tsx
nmerget 83dc632
fix: issue with version-switcher.tsx
nmerget 8007ab7
Merge branch 'main' into feat-examples-plugins
nmerget 4b453d0
auto update snapshots (#5395)
github-actions[bot] 41bc489
chore: update timeouts for patternhub
nmerget 6d6c8c0
chore: update button.showcase.lite.tsx
nmerget 365daeb
fix: replace pages with +
nmerget c3a43bc
fix: replace pages with +
nmerget 61b80d4
auto update snapshots (#5398)
github-actions[bot] 81f1f8e
feat: add contract for examples and integrate it into config and butt…
michaelmkraus ba5636d
feat: add plugin for button showcase
michaelmkraus 9e7a32e
chore: merge main to resolve conflicts
michaelmkraus a6523f8
feat: change meta from tsx to ts
michaelmkraus bd93f30
auto update snapshots (#5488)
github-actions[bot] 6702f6f
Merge branch 'main' into feat-examples-plugins
michaelmkraus 44976ad
fix: normalize url with spaces
michaelmkraus cc1ed5f
Merge remote-tracking branch 'origin/feat-examples-plugins' into feat…
michaelmkraus 804a777
feat: use basepath for group in url for tests
michaelmkraus 5c86107
feat: fix basepath for group in url for overview
michaelmkraus 0a7f24e
Merge branch 'main' into feat-examples-plugins
michaelmkraus 82fd6f5
feat: adapt screenreader test for button to tab into document
michaelmkraus b989038
Merge remote-tracking branch 'origin/feat-examples-plugins' into feat…
michaelmkraus fd8b7b5
feat: revert adapt screenreader test for button to tab into document
michaelmkraus 903e352
Merge branch 'main' into feat-examples-plugins
michaelmkraus c6dad55
refactor: order
mfranzke ee0ef58
Update button.examples.meta.ts
mfranzke 0502b3c
auto update snapshots (#5539)
github-actions[bot] e37030a
Merge branch 'main' into feat-examples-plugins
michaelmkraus e5082fe
feat: revert vertical center alignment of items
michaelmkraus b399f43
Merge branch 'main' into feat-examples-plugins
michaelmkraus c45938e
auto update snapshots (#5557)
github-actions[bot] f662b4a
Merge branch 'main' into feat-examples-plugins
mfranzke 094ac0c
Update default.spec.ts
mfranzke 939c9a0
fix: use className for DS components instead of class
michaelmkraus 9e6008d
Update packages/components/src/shared/showcase/container-wrapper.show…
michaelmkraus 141ce91
Update showcases/showcase-styles.css
michaelmkraus 0839093
Update default.spec.ts
mfranzke ae0c2fb
Merge branch 'main' into feat-examples-plugins
michaelmkraus File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Binary file modified
BIN
+19 Bytes
(100%)
...ontrast/DBButton-should-match-screenshot-1/DBButton-should-match-screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+136 Bytes
(100%)
...hromium/DBButton-should-match-screenshot-1/DBButton-should-match-screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+210 Bytes
(100%)
...firefox/DBButton-should-match-screenshot-1/DBButton-should-match-screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
+15 Bytes
(100%)
...-chrome/DBButton-should-match-screenshot-1/DBButton-should-match-screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified
BIN
-792 Bytes
(100%)
...e/firefox/DBInput-should-match-screenshot-1/DBInput-should-match-screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| /** | ||
| * @type {import('@builder.io/mitosis').MitosisConfig} | ||
| */ | ||
| module.exports = { | ||
| files: [ | ||
| 'src/components/**/*.showcase.lite.tsx', | ||
| 'src/components/**/*.example.lite.tsx' | ||
| ], | ||
| targets: ['angular', 'vue', 'react', 'stencil'], | ||
| dest: '../../output', | ||
| options: { | ||
| angular: { | ||
| api: 'signals' | ||
| }, | ||
| vue: { | ||
| api: 'composition' | ||
| } | ||
| }, | ||
| commonOptions: { | ||
| typescript: true | ||
| } | ||
| }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
93 changes: 93 additions & 0 deletions
93
packages/components/src/components/button/examples/button.examples.meta.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,93 @@ | ||
| export type ButtonExampleIdentifier = | ||
| | 'density' | ||
| | 'variant' | ||
| | 'disabled' | ||
| | 'size' | ||
| | 'show-icon-leading' | ||
| | 'show-icon-trailing' | ||
| | 'no-text' | ||
| | 'width' | ||
| | 'multi-line-text'; | ||
|
|
||
| export type ButtonExampleGroup = | ||
| | 'Content' | ||
| | 'Density' | ||
| | 'Icons' | ||
| | 'Layout' | ||
| | 'Size' | ||
| | 'State' | ||
| | 'Variants'; | ||
|
|
||
| export type ButtonExampleMeta = { | ||
| /** Technical identifier */ | ||
| id: ButtonExampleIdentifier; | ||
|
|
||
| /** Readable name */ | ||
| exampleName: string; | ||
|
|
||
| /** Group to which the example belongs */ | ||
| group?: ButtonExampleGroup; | ||
|
|
||
| /** Names of the Storybook stories that are created from this example. */ | ||
| storybookNames?: string[]; | ||
| }; | ||
|
|
||
| /** | ||
| * All button examples, defined centrally. | ||
| */ | ||
| export const buttonExamplesMeta: ButtonExampleMeta[] = [ | ||
| { | ||
| id: 'density', | ||
| exampleName: 'Density', | ||
| group: 'Density', | ||
| storybookNames: ['Density'] | ||
| }, | ||
| { | ||
| id: 'variant', | ||
| exampleName: 'Variant', | ||
| group: 'Variants', | ||
| storybookNames: ['Outlined', 'Filled', 'Ghost', 'Brand'] | ||
| }, | ||
| { | ||
| id: 'disabled', | ||
| exampleName: 'Disabled', | ||
| group: 'State', | ||
| storybookNames: ['Disabled'] | ||
| }, | ||
| { | ||
| id: 'size', | ||
| exampleName: 'Size', | ||
| group: 'Size', | ||
| storybookNames: ['Size'] | ||
| }, | ||
| { | ||
| id: 'show-icon-leading', | ||
| exampleName: 'Show Icon Leading', | ||
| group: 'Icons', | ||
| storybookNames: ['Show Icon Leading'] | ||
| }, | ||
| { | ||
| id: 'show-icon-trailing', | ||
| exampleName: 'Show Icon Trailing', | ||
| group: 'Icons', | ||
| storybookNames: ['Show Icon Trailing'] | ||
| }, | ||
| { | ||
| id: 'no-text', | ||
| exampleName: 'No Text', | ||
| group: 'Content', | ||
| storybookNames: ['Icon Only'] | ||
| }, | ||
| { | ||
| id: 'width', | ||
| exampleName: 'Width', | ||
| group: 'Layout', | ||
| storybookNames: ['Width'] | ||
| }, | ||
| { | ||
| id: 'multi-line-text', | ||
| exampleName: 'Multi-line Text With Line Breaks', | ||
| group: 'Content', | ||
| storybookNames: ['Multi-line Text'] | ||
| } | ||
| ]; |
12 changes: 12 additions & 0 deletions
12
packages/components/src/components/button/examples/density.example.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,12 @@ | ||
| import { Fragment } from '@builder.io/mitosis'; | ||
| import DBButton from '../button.lite'; | ||
|
|
||
| export default function ButtonDensity() { | ||
| return ( | ||
| <Fragment> | ||
| <DBButton data-density="functional">Functional</DBButton> | ||
| <DBButton data-density="regular">(Default) Regular</DBButton> | ||
| <DBButton data-density="expressive">Expressive</DBButton> | ||
| </Fragment> | ||
| ); | ||
| } |
11 changes: 11 additions & 0 deletions
11
packages/components/src/components/button/examples/disabled.example.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| import { Fragment } from '@builder.io/mitosis'; | ||
| import DBButton from '../button.lite'; | ||
|
|
||
| export default function ButtonDisabled() { | ||
| return ( | ||
| <Fragment> | ||
| <DBButton disabled={false}>(Default) False</DBButton> | ||
| <DBButton disabled={true}>True</DBButton> | ||
| </Fragment> | ||
| ); | ||
| } |
24 changes: 24 additions & 0 deletions
24
packages/components/src/components/button/examples/multi-line-text.example.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| import { Fragment } from '@builder.io/mitosis'; | ||
| import DBButton from '../button.lite'; | ||
|
|
||
| export default function ButtonMultiLineText() { | ||
| return ( | ||
| <Fragment> | ||
| <div style={{ width: '300px' }}> | ||
| <DBButton width="full"> | ||
| Multi-line Text With Automatic Line Breaks | ||
| </DBButton> | ||
| </div> | ||
| <div style={{ width: '300px' }}> | ||
| <DBButton width="full" icon="x_placeholder"> | ||
| Multi-line Text With Automatic Line Breaks and Icon | ||
| </DBButton> | ||
| </div> | ||
| <div style={{ width: '300px' }}> | ||
| <DBButton size="small"> | ||
| Button Small Multi-line Text With Automatic Line Breaks | ||
| </DBButton> | ||
| </div> | ||
| </Fragment> | ||
| ); | ||
| } |
11 changes: 11 additions & 0 deletions
11
packages/components/src/components/button/examples/no-text.example.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| import { Fragment } from '@builder.io/mitosis'; | ||
| import DBButton from '../button.lite'; | ||
|
|
||
| export default function ButtonNoText() { | ||
| return ( | ||
| <Fragment> | ||
| <DBButton icon="x_placeholder">(Default) False</DBButton> | ||
| <DBButton icon="x_placeholder" noText={true}>True</DBButton> | ||
| </Fragment> | ||
| ); | ||
| } |
11 changes: 11 additions & 0 deletions
11
packages/components/src/components/button/examples/show-icon-leading.example.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| import { Fragment } from '@builder.io/mitosis'; | ||
| import DBButton from '../button.lite'; | ||
|
|
||
| export default function ButtonShowIconLeading() { | ||
| return ( | ||
| <Fragment> | ||
| <DBButton icon="x_placeholder" showIcon={false}>(Default) False</DBButton> | ||
| <DBButton icon="x_placeholder" showIcon={true}>True</DBButton> | ||
| </Fragment> | ||
| ); | ||
| } |
11 changes: 11 additions & 0 deletions
11
packages/components/src/components/button/examples/show-icon-trailing.example.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| import { Fragment } from '@builder.io/mitosis'; | ||
| import DBButton from '../button.lite'; | ||
|
|
||
| export default function ButtonShowIconTrailing() { | ||
| return ( | ||
| <Fragment> | ||
| <DBButton iconTrailing="x_placeholder" showIconTrailing={false}>(Default) False</DBButton> | ||
| <DBButton iconTrailing="x_placeholder" showIconTrailing={true}>True</DBButton> | ||
| </Fragment> | ||
| ); | ||
| } |
11 changes: 11 additions & 0 deletions
11
packages/components/src/components/button/examples/size.example.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,11 @@ | ||
| import { Fragment } from '@builder.io/mitosis'; | ||
| import DBButton from '../button.lite'; | ||
|
|
||
| export default function ButtonSize() { | ||
| return ( | ||
| <Fragment> | ||
| <DBButton size="medium">(Default) Medium</DBButton> | ||
| <DBButton size="small">Small</DBButton> | ||
| </Fragment> | ||
| ); | ||
| } |
19 changes: 19 additions & 0 deletions
19
packages/components/src/components/button/examples/variant.example.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| import { Fragment, useMetadata } from '@builder.io/mitosis'; | ||
| import DBButton from '../button.lite'; | ||
|
|
||
| useMetadata({ | ||
| storybookNames: ['Outlined', 'Filled', 'Ghost', 'Brand'] | ||
| }); | ||
|
|
||
| export default function ButtonVariant() { | ||
| return ( | ||
| <Fragment> | ||
| <DBButton variant="outlined"> | ||
| (Default) Outlined - Adaptive | ||
| </DBButton> | ||
| <DBButton variant="filled">Filled - Adaptive</DBButton> | ||
| <DBButton variant="ghost">Ghost - Adaptive</DBButton> | ||
| <DBButton variant="brand">Brand</DBButton> | ||
| </Fragment> | ||
| ); | ||
| } |
13 changes: 13 additions & 0 deletions
13
packages/components/src/components/button/examples/width.example.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,13 @@ | ||
| import { Fragment } from '@builder.io/mitosis'; | ||
| import DBButton from '../button.lite'; | ||
|
|
||
| export default function ButtonWidth() { | ||
| return ( | ||
| <Fragment> | ||
| <DBButton width="auto">(Default) Auto</DBButton> | ||
| <div style={{ width: '500px' }}> | ||
| <DBButton width="full">Width</DBButton> | ||
| </div> | ||
| </Fragment> | ||
| ); | ||
| } |
80 changes: 80 additions & 0 deletions
80
packages/components/src/components/button/showcase/button.showcase.lite.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,80 @@ | ||
| import { PatternhubProps } from '../../../shared/model'; | ||
| import CardWrapperShowcase from '../../../shared/showcase/card-wrapper.showcase.lite'; | ||
| import ContainerWrapperShowcase from '../../../shared/showcase/container-wrapper.showcase.lite'; | ||
| import LinkWrapperShowcase from '../../../shared/showcase/link-wrapper.showcase.lite'; | ||
|
|
||
| import ButtonDensity from '../examples/density.example.lite'; | ||
| import ButtonDisabled from '../examples/disabled.example.lite'; | ||
| import ButtonMultiLineText from '../examples/multi-line-text.example.lite'; | ||
| import ButtonNoText from '../examples/no-text.example.lite'; | ||
| import ButtonShowIconLeading from '../examples/show-icon-leading.example.lite'; | ||
| import ButtonShowIconTrailing from '../examples/show-icon-trailing.example.lite'; | ||
| import ButtonSize from '../examples/size.example.lite'; | ||
| import ButtonVariant from '../examples/variant.example.lite'; | ||
| import ButtonWidth from '../examples/width.example.lite'; | ||
|
|
||
| import { | ||
| buttonExamplesMeta, | ||
| type ButtonExampleIdentifier | ||
| } from '../examples/button.examples.meta'; | ||
|
|
||
| const getExampleName = (id: ButtonExampleIdentifier): string => | ||
| (buttonExamplesMeta.find((example) => example.id === id)?.exampleName ?? | ||
| id) as string; | ||
|
|
||
| export default function ButtonShowcase(props: PatternhubProps) { | ||
| return ( | ||
| <ContainerWrapperShowcase | ||
| title="DBButton" | ||
| isPatternhub={props.isPatternhub}> | ||
| <LinkWrapperShowcase exampleName={getExampleName('density')}> | ||
| <CardWrapperShowcase> | ||
| <ButtonDensity /> | ||
| </CardWrapperShowcase> | ||
| </LinkWrapperShowcase> | ||
| <LinkWrapperShowcase exampleName={getExampleName('variant')}> | ||
| <CardWrapperShowcase> | ||
| <ButtonVariant /> | ||
| </CardWrapperShowcase> | ||
| </LinkWrapperShowcase> | ||
| <LinkWrapperShowcase exampleName={getExampleName('disabled')}> | ||
| <CardWrapperShowcase> | ||
| <ButtonDisabled /> | ||
| </CardWrapperShowcase> | ||
| </LinkWrapperShowcase> | ||
| <LinkWrapperShowcase exampleName={getExampleName('size')}> | ||
| <CardWrapperShowcase> | ||
| <ButtonSize /> | ||
| </CardWrapperShowcase> | ||
| </LinkWrapperShowcase> | ||
| <LinkWrapperShowcase | ||
| exampleName={getExampleName('show-icon-leading')}> | ||
| <CardWrapperShowcase> | ||
| <ButtonShowIconLeading /> | ||
| </CardWrapperShowcase> | ||
| </LinkWrapperShowcase> | ||
| <LinkWrapperShowcase | ||
| exampleName={getExampleName('show-icon-trailing')}> | ||
| <CardWrapperShowcase> | ||
| <ButtonShowIconTrailing /> | ||
| </CardWrapperShowcase> | ||
| </LinkWrapperShowcase> | ||
| <LinkWrapperShowcase exampleName={getExampleName('no-text')}> | ||
| <CardWrapperShowcase> | ||
| <ButtonNoText /> | ||
| </CardWrapperShowcase> | ||
| </LinkWrapperShowcase> | ||
| <LinkWrapperShowcase exampleName={getExampleName('width')}> | ||
| <CardWrapperShowcase> | ||
| <ButtonWidth /> | ||
| </CardWrapperShowcase> | ||
| </LinkWrapperShowcase> | ||
| <LinkWrapperShowcase | ||
| exampleName={getExampleName('multi-line-text')}> | ||
| <CardWrapperShowcase> | ||
| <ButtonMultiLineText /> | ||
| </CardWrapperShowcase> | ||
| </LinkWrapperShowcase> | ||
| </ContainerWrapperShowcase> | ||
| ); | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@michaelmkraus some of those are top-aligned