-
Notifications
You must be signed in to change notification settings - Fork 9
Frontend 8/14 milestone #45
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 146 commits
Commits
Show all changes
148 commits
Select commit
Hold shift + click to select a range
4011a4b
add tailwind
ken-zlai f46c568
format code w/ prettier
ken-zlai 6a05ff7
add shadcn
ken-zlai 2a9aad1
add shadcn button
ken-zlai f96c4fe
use button on home page for simple counter
ken-zlai 570ba5d
npm run format
ken-zlai 2b2bddc
modify typescript rules to ignore specific errors in shadcn components
ken-zlai 53e759e
configure tailwind typography
ken-zlai 8dab5f7
Merge branch 'ken-websvc' into ken-frontend
ken-zlai 71895c7
basic dark mode config
ken-zlai d0b55ea
ignore warnings from node_modules folder
ken-zlai 1e11bc2
configure testing stuff
ken-zlai 3205caa
readme
ken-zlai afb9aea
move tests
ken-zlai 05bce39
dark mode should be applied in the app.html
ken-zlai 1c31f4a
create a reusable echart component
ken-zlai 8f5bd92
basic heatmap to start testing
ken-zlai 201dc8e
install echarts
ken-zlai 251a052
fix type issues
ken-zlai a77da82
add sheet component
ken-zlai 6d3a1e9
use resizeobserver on my echart
ken-zlai 7462ed4
refactor echart for clarity
ken-zlai b2270f6
use proper type
ken-zlai cf8c8e6
svelte 5 state
ken-zlai ea4ba7b
create SplitView.svelte
ken-zlai db32508
use SplitView to show heatmap/sidebar
ken-zlai f8060b1
Merge branch 'piyush--apis' into ken-frontend
ken-zlai fffd0ed
add table component
ken-zlai ea0cd3c
index to export table elements
ken-zlai fd3702b
add basic api
ken-zlai 7eb1bea
type for model
ken-zlai 00f3807
format code
ken-zlai dc76a03
add ModelsResponse
ken-zlai 998956a
render a basic table with models data
ken-zlai 7ab1d5d
change route structure
ken-zlai 79268df
add preview of timeseries data
ken-zlai 8e9327c
add avatar
ken-zlai 1855d2e
zipline logo
ken-zlai 3d76751
Wire up Play frontend + server in docker setup
piyush-zlai c3f728a
create a layout for the app w/ top and left bar
ken-zlai 578ed5b
move model code to model route
ken-zlai a284edb
add loading indication on nav
ken-zlai 114511f
Merge branch 'main' into ken-frontend
ken-zlai 7e7d697
Fix based on coder rabbit suggestions
piyush-zlai 557555b
Address feedback
piyush-zlai 5691a3c
Merge remote-tracking branch 'origin/piyush/docker-play' into ken-fro…
ken-zlai 34da3a4
configure frontend to build using nodejs
ken-zlai 811cb65
create a custom build for docker to use that env file
ken-zlai 6b27bd3
add a quick coming soon to the / route
ken-zlai 115faa3
zipline logo routes to / route
ken-zlai 9e63629
quick header for timeseries data
ken-zlai c7cb4a4
Merge branch 'main' into ken-frontend
ken-zlai cf2e418
remove old frontend stuff from build.sbt
ken-zlai 463eefe
update docker readme
ken-zlai 5ade424
format
ken-zlai b26c672
add link to the heatmap preview
ken-zlai 6a75611
add instructions for how to start the backend server first for dev work
ken-zlai f84133a
add tests for core api functionality
ken-zlai 6c52f28
.env files were ignored in the .gitignore - remove this
ken-zlai 4750136
cleaner way to run docker build
ken-zlai 045858f
Merge branch 'ken-frontend' into frontend-tests
ken-zlai eb11d7b
create tests that verify backend types for model
ken-zlai a6b1a47
remove comments
ken-zlai 1f7426a
Merge branch 'main' into frontend-tests
ken-zlai 5eb7ccb
delete old test file
ken-zlai 2c58662
delete old model file
ken-zlai 83f97d6
fix import
ken-zlai 735cd00
layout has left nav and main content for children
ken-zlai d67ecdb
add breadcrumb component
ken-zlai b1bfe04
basic breadcrumb implementation
ken-zlai 42da51f
use slash for breadcrumb separator
ken-zlai 7b038a3
format
ken-zlai ee70ba8
componentize stuff for reusability
ken-zlai 3a5186f
add command and dialog component
ken-zlai 3acadbb
swap colors of navbar and content
ken-zlai 1e22b0c
match the sidebar tabs a bit more to the figma
ken-zlai 1990a3e
basic search bar/dialog
ken-zlai 8cf2523
create functions for our api calls
ken-zlai 62fe84b
api code to search
ken-zlai ef2d709
basic search implementation
ken-zlai 875e178
create a basic coming soon page and show it on groupbys and joins page
ken-zlai c933ce1
add badge component
ken-zlai 25d40ba
show more content in the table
ken-zlai d4df9cd
update package-lock.json versions
ken-zlai 1f564c9
inject env variable from node server
ken-zlai 229889d
add back the .env to gitignore until they are needed
ken-zlai ef91a4c
cors config for local dev and node docker dev
ken-zlai c71555a
remove the --force
ken-zlai 10624d1
Merge branch 'cors-env-fix' into frontend-8/4-milestone
ken-zlai 050c6e4
Update compose.yaml
ken-zlai 3bcef16
Merge branch 'cors-env-fix' into frontend-8/4-milestone
ken-zlai 6b72d52
fix test
ken-zlai c21731d
Merge branch 'cors-env-fix' into frontend-8/4-milestone
ken-zlai 435dd43
note about echarts
ken-zlai b9b1c7c
route to proper link on click on search result
ken-zlai 9086595
fix data not updating
ken-zlai 38210d2
close dialog on click of button
ken-zlai def0089
change to onclick
ken-zlai 02e5cd1
make full search result button clickable
ken-zlai e6db76d
Merge branch 'main' into frontend-8/4-milestone
ken-zlai 8e7a261
cleanup debounce on component destroy
ken-zlai d1a4d9e
Merge remote-tracking branch 'origin/frontend-8/4-milestone' into fro…
ken-zlai d67b964
Merge branch 'main' into frontend-8/4-milestone
ken-zlai 9f5c1bf
Merge branch 'main' into frontend-8/4-milestone
ken-zlai c3894a0
create a model performance chart
ken-zlai 040e81d
use dark mode in echarts
ken-zlai df1c9c2
add select component
ken-zlai b51a0ec
date selector to change graphs
ken-zlai d6e0bbf
fix ts issues
ken-zlai 5a39284
add collabsible component
ken-zlai f82084d
make model performance collabsible
ken-zlai 30dff77
add tabs component
ken-zlai eb2eaaa
add a section for feature monitoring
ken-zlai d1511d2
create reusable collabsible component
ken-zlai 4e7a057
format code
ken-zlai 4cdc767
fix value type
ken-zlai 4c7cdb7
use svelte 5 concepts
ken-zlai 1ec77f1
make breadcrumbs fixed at top
ken-zlai aa04f19
observability page title
ken-zlai 01c4f5c
mock for performance vs drift
ken-zlai f31fbf7
remove placeholder
ken-zlai cdfe18b
add dropdown menu
ken-zlai a5e1fe4
cleaner ux for logged in user in nav bar
ken-zlai b089ebc
connect the two charts
ken-zlai 7566666
use chart instance here
ken-zlai f644fec
chart for each groupby w/ sync
ken-zlai 6f7704c
chart axis from 0-1
ken-zlai 87df29d
highlight the line that was hovered in the groupby charts
ken-zlai e8ed826
rename stuff
ken-zlai 171656c
dont show smooth lines
ken-zlai a75c82b
update favicon
ken-zlai b04e046
add scroll area
ken-zlai a832d43
open sheet when point is clicked
ken-zlai 8c7c403
add logic to show all points that are overlapping
ken-zlai e9a1906
scroll on sheet content
ken-zlai 5e36233
use scroll area
ken-zlai 7eacd77
put each groupby chart in a collabsible section
ken-zlai ffe177c
click and drag chart area to zoom
ken-zlai 40ead78
create a derived store for all charts
ken-zlai bf4d972
only show reset zoom if chart is zoomed
ken-zlai b7a3465
change cursor to pointer if they move the mouse over a data point
ken-zlai 67a779c
no animation for right sheet
ken-zlai a252dd1
scale dots to click on
ken-zlai 0c185ea
ensure chart zoom works after changing date range
ken-zlai 5d57400
Merge branch 'main' into frontend-8/14-milestone
ken-zlai 163c505
remove redundant slash
ken-zlai 228a3ba
use lodash merge
ken-zlai 5582156
Merge branch 'main' into frontend-8/14-milestone
ken-zlai 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
27 changes: 27 additions & 0 deletions
27
frontend/src/lib/components/CollapsibleSection/CollapsibleSection.svelte
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,27 @@ | ||
| <script lang="ts"> | ||
| import { | ||
| Collapsible, | ||
| CollapsibleContent, | ||
| CollapsibleTrigger | ||
| } from '$lib/components/ui/collapsible'; | ||
| import type { Snippet } from 'svelte'; | ||
| import { ChevronDown } from 'svelte-radix'; | ||
|
|
||
| let { | ||
| children, | ||
| title, | ||
| open = $bindable(true) | ||
| }: { children: Snippet; title: string; open: boolean } = $props(); | ||
| </script> | ||
|
|
||
| <Collapsible bind:open class="mt-4"> | ||
| <CollapsibleTrigger class="flex items-center w-full"> | ||
| <ChevronDown | ||
| class="w-5 h-5 mr-2 transition-transform duration-200 {open ? '' : 'rotate-180'}" | ||
| /> | ||
| <h2 class="text-xl">{title}</h2> | ||
| </CollapsibleTrigger> | ||
| <CollapsibleContent> | ||
| {@render children()} | ||
| </CollapsibleContent> | ||
| </Collapsible> |
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
14 changes: 14 additions & 0 deletions
14
frontend/src/lib/components/ui/collapsible/collapsible-content.svelte
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,14 @@ | ||
| <script lang="ts"> | ||
| import { Collapsible as CollapsiblePrimitive } from 'bits-ui'; | ||
| import { slide } from 'svelte/transition'; | ||
| type $$Props = CollapsiblePrimitive.ContentProps; | ||
|
|
||
| export let transition: $$Props['transition'] = slide; | ||
| export let transitionConfig: $$Props['transitionConfig'] = { | ||
| duration: 150 | ||
| }; | ||
| </script> | ||
|
|
||
| <CollapsiblePrimitive.Content {transition} {transitionConfig} {...$$restProps}> | ||
| <slot /> | ||
| </CollapsiblePrimitive.Content> |
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,15 @@ | ||
| import { Collapsible as CollapsiblePrimitive } from 'bits-ui'; | ||
| import Content from './collapsible-content.svelte'; | ||
|
|
||
| const Root = CollapsiblePrimitive.Root; | ||
| const Trigger = CollapsiblePrimitive.Trigger; | ||
|
|
||
| export { | ||
| Root, | ||
| Content, | ||
| Trigger, | ||
| // | ||
| Root as Collapsible, | ||
| Content as CollapsibleContent, | ||
| Trigger as CollapsibleTrigger | ||
| }; |
35 changes: 35 additions & 0 deletions
35
frontend/src/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte
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,35 @@ | ||
| <script lang="ts"> | ||
| import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; | ||
| import Check from "svelte-radix/Check.svelte"; | ||
| import { cn } from "$lib/utils.js"; | ||
|
|
||
| type $$Props = DropdownMenuPrimitive.CheckboxItemProps; | ||
| type $$Events = DropdownMenuPrimitive.CheckboxItemEvents; | ||
|
|
||
| let className: $$Props["class"] = undefined; | ||
| export let checked: $$Props["checked"] = undefined; | ||
| export { className as class }; | ||
| </script> | ||
|
|
||
| <DropdownMenuPrimitive.CheckboxItem | ||
| bind:checked | ||
| class={cn( | ||
| "data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50", | ||
| className | ||
| )} | ||
| {...$$restProps} | ||
| on:click | ||
| on:keydown | ||
| on:focusin | ||
| on:focusout | ||
| on:pointerdown | ||
| on:pointerleave | ||
| on:pointermove | ||
| > | ||
| <span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> | ||
| <DropdownMenuPrimitive.CheckboxIndicator> | ||
| <Check class="h-4 w-4" /> | ||
| </DropdownMenuPrimitive.CheckboxIndicator> | ||
| </span> | ||
| <slot /> | ||
| </DropdownMenuPrimitive.CheckboxItem> |
26 changes: 26 additions & 0 deletions
26
frontend/src/lib/components/ui/dropdown-menu/dropdown-menu-content.svelte
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,26 @@ | ||
| <script lang="ts"> | ||
| import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; | ||
| import { cn, flyAndScale } from "$lib/utils.js"; | ||
|
|
||
| type $$Props = DropdownMenuPrimitive.ContentProps; | ||
|
|
||
| let className: $$Props["class"] = undefined; | ||
| export let sideOffset: $$Props["sideOffset"] = 4; | ||
| export let transition: $$Props["transition"] = flyAndScale; | ||
| export let transitionConfig: $$Props["transitionConfig"] = undefined; | ||
| export { className as class }; | ||
| </script> | ||
|
|
||
| <DropdownMenuPrimitive.Content | ||
| {transition} | ||
| {transitionConfig} | ||
| {sideOffset} | ||
| class={cn( | ||
| "bg-popover text-popover-foreground z-50 min-w-[8rem] rounded-md border p-1 shadow-md focus:outline-none", | ||
| className | ||
| )} | ||
| {...$$restProps} | ||
| on:keydown | ||
| > | ||
| <slot /> | ||
| </DropdownMenuPrimitive.Content> |
31 changes: 31 additions & 0 deletions
31
frontend/src/lib/components/ui/dropdown-menu/dropdown-menu-item.svelte
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,31 @@ | ||
| <script lang="ts"> | ||
| import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; | ||
| import { cn } from "$lib/utils.js"; | ||
|
|
||
| type $$Props = DropdownMenuPrimitive.ItemProps & { | ||
| inset?: boolean; | ||
| }; | ||
| type $$Events = DropdownMenuPrimitive.ItemEvents; | ||
|
|
||
| let className: $$Props["class"] = undefined; | ||
| export let inset: $$Props["inset"] = undefined; | ||
| export { className as class }; | ||
| </script> | ||
|
|
||
| <DropdownMenuPrimitive.Item | ||
| class={cn( | ||
| "data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50", | ||
| inset && "pl-8", | ||
| className | ||
| )} | ||
| on:click | ||
| on:keydown | ||
| on:focusin | ||
| on:focusout | ||
| on:pointerdown | ||
| on:pointerleave | ||
| on:pointermove | ||
| {...$$restProps} | ||
| > | ||
| <slot /> | ||
| </DropdownMenuPrimitive.Item> |
19 changes: 19 additions & 0 deletions
19
frontend/src/lib/components/ui/dropdown-menu/dropdown-menu-label.svelte
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 @@ | ||
| <script lang="ts"> | ||
| import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; | ||
| import { cn } from "$lib/utils.js"; | ||
|
|
||
| type $$Props = DropdownMenuPrimitive.LabelProps & { | ||
| inset?: boolean; | ||
| }; | ||
|
|
||
| let className: $$Props["class"] = undefined; | ||
| export let inset: $$Props["inset"] = undefined; | ||
| export { className as class }; | ||
| </script> | ||
|
|
||
| <DropdownMenuPrimitive.Label | ||
| class={cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className)} | ||
| {...$$restProps} | ||
| > | ||
| <slot /> | ||
| </DropdownMenuPrimitive.Label> |
11 changes: 11 additions & 0 deletions
11
frontend/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte
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 @@ | ||
| <script lang="ts"> | ||
| import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; | ||
|
|
||
| type $$Props = DropdownMenuPrimitive.RadioGroupProps; | ||
|
|
||
| export let value: $$Props["value"] = undefined; | ||
| </script> | ||
|
|
||
| <DropdownMenuPrimitive.RadioGroup {...$$restProps} bind:value> | ||
| <slot /> | ||
| </DropdownMenuPrimitive.RadioGroup> |
35 changes: 35 additions & 0 deletions
35
frontend/src/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte
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,35 @@ | ||
| <script lang="ts"> | ||
| import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; | ||
| import DotFilled from "svelte-radix/DotFilled.svelte"; | ||
| import { cn } from "$lib/utils.js"; | ||
| type $$Props = DropdownMenuPrimitive.RadioItemProps; | ||
| type $$Events = DropdownMenuPrimitive.RadioItemEvents; | ||
ken-zlai marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| let className: $$Props["class"] = undefined; | ||
| export let value: DropdownMenuPrimitive.RadioItemProps["value"]; | ||
| export { className as class }; | ||
ken-zlai marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| </script> | ||
|
|
||
| <DropdownMenuPrimitive.RadioItem | ||
| class={cn( | ||
| "data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50", | ||
| className | ||
| )} | ||
| {value} | ||
| {...$$restProps} | ||
| on:click | ||
| on:keydown | ||
| on:focusin | ||
| on:focusout | ||
| on:pointerdown | ||
| on:pointerleave | ||
| on:pointermove | ||
ken-zlai marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| > | ||
| <span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center"> | ||
| <DropdownMenuPrimitive.RadioIndicator> | ||
| <DotFilled class="h-4 w-4 fill-current" /> | ||
| </DropdownMenuPrimitive.RadioIndicator> | ||
| </span> | ||
| <slot /> | ||
| </DropdownMenuPrimitive.RadioItem> | ||
14 changes: 14 additions & 0 deletions
14
frontend/src/lib/components/ui/dropdown-menu/dropdown-menu-separator.svelte
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,14 @@ | ||
| <script lang="ts"> | ||
| import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; | ||
| import { cn } from "$lib/utils.js"; | ||
|
|
||
| type $$Props = DropdownMenuPrimitive.SeparatorProps; | ||
|
|
||
| let className: $$Props["class"] = undefined; | ||
| export { className as class }; | ||
| </script> | ||
|
|
||
| <DropdownMenuPrimitive.Separator | ||
| class={cn("bg-muted -mx-1 my-1 h-px", className)} | ||
| {...$$restProps} | ||
| /> |
13 changes: 13 additions & 0 deletions
13
frontend/src/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte
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 @@ | ||
| <script lang="ts"> | ||
| import type { HTMLAttributes } from "svelte/elements"; | ||
| import { cn } from "$lib/utils.js"; | ||
|
|
||
| type $$Props = HTMLAttributes<HTMLSpanElement>; | ||
|
|
||
| let className: $$Props["class"] = undefined; | ||
| export { className as class }; | ||
| </script> | ||
|
|
||
| <span class={cn("ml-auto text-xs tracking-widest opacity-60", className)} {...$$restProps}> | ||
| <slot /> | ||
| </span> |
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.