-
Notifications
You must be signed in to change notification settings - Fork 616
Tooltip: Tooltip V2 as an experimental/draft with the new popover API #3394
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
Merged
Merged
Changes from all commits
Commits
Show all changes
61 commits
Select commit
Hold shift + click to select a range
2ae8d45
Tooltip remediations as an experimental
broccolinisoup a8aad6e
Update generated/components.json
broccolinisoup c01b61f
fix export path
broccolinisoup 3b65cd2
popover with keith and top layer height experiment to accomodate ::be…
broccolinisoup f846b38
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 13d3aa2
get rid of caret, align styling and update the API
broccolinisoup 43db250
fix after stuff
broccolinisoup 46630d4
add a calculated direction to properly position ::after relatively to…
broccolinisoup 4b0dd7d
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 49b2ca8
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup cd1bd7f
clean up
broccolinisoup 99469e1
add a story for a dotcom usage
broccolinisoup a8b8fb6
re organise stories and remove caret styles for now
broccolinisoup 966bdf8
ewmove unused Box
broccolinisoup 851a6c2
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 1632030
css polyfill issues are resolved - huge thanks to Keith
broccolinisoup beeace0
update tests to reflect default direction s
broccolinisoup 7091285
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 69dbf4e
ActionMenu.Anchor tooltip - not the cleanest code
broccolinisoup 067a09e
ActionMenu.Anchor and ActionMenu.Button with tooltip
broccolinisoup 364d2ea
only type the child
broccolinisoup c64323f
fix type
broccolinisoup 8b6da3e
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 2b3bf14
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 51f738f
use React.forwardRef and clean up impl for action menu anchor buttons
broccolinisoup 8e7d406
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 12e5bde
move tooltip from experimental to drafts
broccolinisoup e65ff6f
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup abddbf5
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 7c24bb0
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 65ed0f9
export tooltip in draft
broccolinisoup 6507faf
SSR friendly polyfill
broccolinisoup 0fd9735
Resolve oddbird-polyfil module resolution issue - huge thanks to Josh
broccolinisoup 7e37448
add e2e stories, clean up
broccolinisoup 70d09dc
test(vrt): update snapshots
broccolinisoup ab7edcd
add changeset
broccolinisoup ed27858
test(vrt): update snapshots
broccolinisoup b2d30fb
update docs
broccolinisoup 78a2f35
to revert later - just adding a test story to sgare
broccolinisoup 14b7ecd
delete snapshots to regenerate them
broccolinisoup f2c4157
test(vrt): update snapshots
broccolinisoup f48a15f
Remove animations delays and noDelay prop
broccolinisoup 782dbdf
reorganise vrt
broccolinisoup 1849f61
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 22a48bb
test(vrt): update snapshots
broccolinisoup ec44813
add threshold to snapshots
broccolinisoup 3e0cb79
delete failed snapshots
broccolinisoup 0c8c5e6
delete failed snapshots
broccolinisoup def9954
ActionMenu.Button children undefined at dotcom
broccolinisoup a9e8019
🔥 snapshots
broccolinisoup 9527ea4
reorganise if logic in actionmenu
broccolinisoup 8cd5ebd
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup 229c527
test(vrt): update snapshots
broccolinisoup 3f29dad
remove always failing or flaky snapshot tests
broccolinisoup ba5d060
reorganise action menu again
broccolinisoup edc0615
add popover polyfill to the esm only modules in rollup
broccolinisoup b56fb96
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup a05474e
add test cases for tooltip on action menu both for v1 and v2
broccolinisoup bb78acc
Merge branch 'main' into bs/experimental-tooltip-with-popover
broccolinisoup a662853
clean up
broccolinisoup 133246d
Update docs/gatsby-config.js
broccolinisoup 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
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,7 @@ | ||
--- | ||
'@primer/react': minor | ||
--- | ||
|
||
Tooltip: Release Tooltip v2 as a draft/experimental | ||
|
||
<!-- Changed components: _none_ --> |
Binary file added
BIN
+10.7 KB
....ts-snapshots/Tooltip--experimental-Anchor-Has-Margin-dark-colorblind-linux.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 added
BIN
+10.6 KB
...test.ts-snapshots/Tooltip--experimental-Anchor-Has-Margin-dark-dimmed-linux.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 added
BIN
+10.6 KB
...-snapshots/Tooltip--experimental-Anchor-Has-Margin-dark-high-contrast-linux.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 added
BIN
+10.6 KB
...mental.test.ts-snapshots/Tooltip--experimental-Anchor-Has-Margin-dark-linux.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 added
BIN
+10.7 KB
....ts-snapshots/Tooltip--experimental-Anchor-Has-Margin-dark-tritanopia-linux.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 added
BIN
+10.5 KB
...ts-snapshots/Tooltip--experimental-Anchor-Has-Margin-light-colorblind-linux.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 added
BIN
+10.6 KB
...snapshots/Tooltip--experimental-Anchor-Has-Margin-light-high-contrast-linux.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 added
BIN
+10.5 KB
...ental.test.ts-snapshots/Tooltip--experimental-Anchor-Has-Margin-light-linux.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 added
BIN
+10.5 KB
...ts-snapshots/Tooltip--experimental-Anchor-Has-Margin-light-tritanopia-linux.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 added
BIN
+11.9 KB
...-snapshots/Tooltip--experimental-Calculated-Direction-dark-colorblind-linux.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 added
BIN
+11.8 KB
...t.ts-snapshots/Tooltip--experimental-Calculated-Direction-dark-dimmed-linux.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 added
BIN
+12 KB
...apshots/Tooltip--experimental-Calculated-Direction-dark-high-contrast-linux.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 added
BIN
+11.9 KB
...tal.test.ts-snapshots/Tooltip--experimental-Calculated-Direction-dark-linux.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 added
BIN
+11.9 KB
...-snapshots/Tooltip--experimental-Calculated-Direction-dark-tritanopia-linux.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 added
BIN
+12 KB
...snapshots/Tooltip--experimental-Calculated-Direction-light-colorblind-linux.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 added
BIN
+12 KB
...pshots/Tooltip--experimental-Calculated-Direction-light-high-contrast-linux.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 added
BIN
+12 KB
...al.test.ts-snapshots/Tooltip--experimental-Calculated-Direction-light-linux.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 added
BIN
+12 KB
...snapshots/Tooltip--experimental-Calculated-Direction-light-tritanopia-linux.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 added
BIN
+8.63 KB
...ental.test.ts-snapshots/Tooltip--experimental-Default-dark-colorblind-linux.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 added
BIN
+8.57 KB
...erimental.test.ts-snapshots/Tooltip--experimental-Default-dark-dimmed-linux.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 added
BIN
+8.69 KB
...al.test.ts-snapshots/Tooltip--experimental-Default-dark-high-contrast-linux.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 added
BIN
+8.62 KB
...ip--experimental.test.ts-snapshots/Tooltip--experimental-Default-dark-linux.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 added
BIN
+8.63 KB
...ental.test.ts-snapshots/Tooltip--experimental-Default-dark-tritanopia-linux.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 added
BIN
+8.66 KB
...ntal.test.ts-snapshots/Tooltip--experimental-Default-light-colorblind-linux.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 added
BIN
+8.63 KB
...l.test.ts-snapshots/Tooltip--experimental-Default-light-high-contrast-linux.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 added
BIN
+8.66 KB
...p--experimental.test.ts-snapshots/Tooltip--experimental-Default-light-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.66 KB
...ntal.test.ts-snapshots/Tooltip--experimental-Default-light-tritanopia-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.81 KB
...ts/Tooltip--experimental-Icon-Button-With-Description-dark-colorblind-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.67 KB
...pshots/Tooltip--experimental-Icon-Button-With-Description-dark-dimmed-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.84 KB
...Tooltip--experimental-Icon-Button-With-Description-dark-high-contrast-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.71 KB
....ts-snapshots/Tooltip--experimental-Icon-Button-With-Description-dark-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.81 KB
...ts/Tooltip--experimental-Icon-Button-With-Description-dark-tritanopia-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.8 KB
...s/Tooltip--experimental-Icon-Button-With-Description-light-colorblind-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.84 KB
...ooltip--experimental-Icon-Button-With-Description-light-high-contrast-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.8 KB
...ts-snapshots/Tooltip--experimental-Icon-Button-With-Description-light-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.8 KB
...s/Tooltip--experimental-Icon-Button-With-Description-light-tritanopia-linux.png
Oops, something went wrong.
Binary file added
BIN
+9.02 KB
...al.test.ts-snapshots/Tooltip--experimental-Label-Type-dark-colorblind-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.92 KB
...mental.test.ts-snapshots/Tooltip--experimental-Label-Type-dark-dimmed-linux.png
Oops, something went wrong.
Binary file added
BIN
+9.1 KB
...test.ts-snapshots/Tooltip--experimental-Label-Type-dark-high-contrast-linux.png
Oops, something went wrong.
Binary file added
BIN
+9.02 KB
...-experimental.test.ts-snapshots/Tooltip--experimental-Label-Type-dark-linux.png
Oops, something went wrong.
Binary file added
BIN
+9.02 KB
...al.test.ts-snapshots/Tooltip--experimental-Label-Type-dark-tritanopia-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.92 KB
...l.test.ts-snapshots/Tooltip--experimental-Label-Type-light-colorblind-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.94 KB
...est.ts-snapshots/Tooltip--experimental-Label-Type-light-high-contrast-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.92 KB
...experimental.test.ts-snapshots/Tooltip--experimental-Label-Type-light-linux.png
Oops, something went wrong.
Binary file added
BIN
+8.92 KB
...l.test.ts-snapshots/Tooltip--experimental-Label-Type-light-tritanopia-linux.png
Oops, something went wrong.
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,76 @@ | ||
--- | ||
componentId: tooltip | ||
title: Tooltip | ||
status: Alpha | ||
--- | ||
|
||
import data from '../../../src/drafts/Tooltip/Tooltip.docs.json' | ||
|
||
The Tooltip component is used to add context to interactive elements on the page. | ||
|
||
**_⚠️ Usage warning! ⚠️_** | ||
|
||
Tooltips as a UI pattern should be our last resort for conveying information because it is hidden by default and often with zero or little visual indicator of its existence. | ||
|
||
Before adding a tooltip, please consider: Is this information essential and necessary? Can the UI be made clearer? Can the information be shown on the page by default? See [Tooltip alternatives](https://primer.style/design/accessibility/tooltip-alternatives) for more accessible alternatives. | ||
|
||
Tooltip should only be used on an element that is interactive such as a button or a link. | ||
|
||
## Examples | ||
|
||
### Default (For additional context) | ||
|
||
Default tooltip is suitable for interactive controls that require additional context. | ||
|
||
```jsx live | ||
<Tooltip text="This change cannot be undone."> | ||
<Button>Delete</Button> | ||
</Tooltip> | ||
``` | ||
|
||
### As a label | ||
|
||
Tooltip can be used to label interactive controls that has no visible text label such as interactive icon links. | ||
|
||
```jsx live | ||
<Tooltip text="Contribution Documentation for 'Primer React'" type="label"> | ||
<Link href="https://github.com/primer/react/contributor-docs/CONTRIBUTING.md" sx={{ml: 1, color: 'fg.muted'}}> | ||
<StyledOcticon icon={BookIcon} sx={{color: 'fg.muted'}} /> | ||
</Link> | ||
</Tooltip> | ||
``` | ||
|
||
### With direction | ||
|
||
```jsx live | ||
<Box sx={{padding: 5, display: 'flex', gap: '8px'}}> | ||
<Tooltip direction="n" text="Supplementary text"> | ||
<Button>North</Button> | ||
</Tooltip> | ||
<Tooltip direction="s" text="Supplementary text"> | ||
<Button>South</Button> | ||
</Tooltip> | ||
<Tooltip direction="e" text="Supplementary text"> | ||
<Button>East</Button> | ||
</Tooltip> | ||
<Tooltip direction="w" text="Supplementary text"> | ||
<Button>West</Button> | ||
</Tooltip> | ||
<Tooltip direction="ne" text="Supplementary text"> | ||
<Button>North East</Button> | ||
</Tooltip> | ||
<Tooltip direction="nw" text="Supplementary text"> | ||
<Button>North West</Button> | ||
</Tooltip> | ||
<Tooltip direction="se" text="Supplementary text"> | ||
<Button>Southeast</Button> | ||
</Tooltip> | ||
<Tooltip direction="sw" text="Supplementary text"> | ||
<Button>Southwest</Button> | ||
</Tooltip> | ||
</Box> | ||
``` | ||
|
||
## Props | ||
|
||
<ComponentProps data={data} /> |
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,175 @@ | ||
import {test, expect} from '@playwright/test' | ||
import {visit} from '../test-helpers/storybook' | ||
import {themes} from '../test-helpers/themes' | ||
|
||
test.describe('Tooltip--experimental', () => { | ||
test.describe('Default', () => { | ||
for (const theme of themes) { | ||
test.describe(theme, () => { | ||
test('default @vrt', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip--default', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
|
||
// Default state | ||
await page.keyboard.press('Tab') | ||
expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( | ||
`Tooltip--experimental.Default.${theme}.png`, | ||
{ | ||
threshold: 0.1, | ||
}, | ||
) | ||
}) | ||
|
||
test('axe @aat', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip--default', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
await expect(page).toHaveNoViolations() | ||
}) | ||
}) | ||
} | ||
}) | ||
|
||
test.describe('Anchor Has Margin', () => { | ||
for (const theme of themes) { | ||
test.describe(theme, () => { | ||
test('default @vrt', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip-features--anchor-has-margin', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
|
||
// Default state | ||
await page.keyboard.press('Tab') | ||
expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( | ||
`Tooltip--experimental.Anchor Has Margin.${theme}.png`, | ||
{ | ||
threshold: 0.1, | ||
}, | ||
) | ||
}) | ||
|
||
test('axe @aat', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip-features--anchor-has-margin', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
await expect(page).toHaveNoViolations() | ||
}) | ||
}) | ||
} | ||
}) | ||
|
||
test.describe('Calculated Direction', () => { | ||
for (const theme of themes) { | ||
test.describe(theme, () => { | ||
test('default @vrt', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip-features--calculated-direction', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
|
||
// Default state | ||
await page.keyboard.press('Tab') | ||
expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( | ||
`Tooltip--experimental.Calculated Direction.${theme}.png`, | ||
{ | ||
threshold: 0.1, | ||
}, | ||
) | ||
}) | ||
|
||
test('axe @aat', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip-features--calculated-direction', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
await expect(page).toHaveNoViolations() | ||
}) | ||
}) | ||
} | ||
}) | ||
|
||
test.describe('Icon Button With Description', () => { | ||
for (const theme of themes) { | ||
test.describe(theme, () => { | ||
test('default @vrt', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip-features--icon-button-with-description', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
|
||
// Default state | ||
await page.keyboard.press('Tab') | ||
expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( | ||
`Tooltip--experimental.Icon Button With Description.${theme}.png`, | ||
{ | ||
threshold: 0.1, | ||
}, | ||
) | ||
}) | ||
|
||
test('axe @aat', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip-features--icon-button-with-description', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
await expect(page).toHaveNoViolations() | ||
}) | ||
}) | ||
} | ||
}) | ||
|
||
test.describe('Label Type', () => { | ||
for (const theme of themes) { | ||
test.describe(theme, () => { | ||
test('default @vrt', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip-features--label-type', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
|
||
// Default state | ||
await page.keyboard.press('Tab') | ||
expect(await page.screenshot({animations: 'disabled'})).toMatchSnapshot( | ||
`Tooltip--experimental.Label Type.${theme}.png`, | ||
{ | ||
threshold: 0.1, | ||
}, | ||
) | ||
}) | ||
|
||
test('axe @aat', async ({page}) => { | ||
await visit(page, { | ||
id: 'drafts-components-tooltip-features--label-type', | ||
globals: { | ||
colorScheme: theme, | ||
}, | ||
}) | ||
await expect(page).toHaveNoViolations() | ||
}) | ||
}) | ||
} | ||
}) | ||
}) |
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
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
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
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.
Uh oh!
There was an error while loading. Please reload this page.