diff --git a/Makefile b/Makefile index e5f07113..3f0c37ce 100644 --- a/Makefile +++ b/Makefile @@ -21,7 +21,7 @@ LDFLAGS ?= $(BASE_LDFLAGS) $\ -X "$(PACKAGE)/cmd/plural.Date=$(APP_DATE)" $\ -X "$(PACKAGE)/pkg/scm.GitlabClientSecret=${GITLAB_CLIENT_SECRET}" $\ -X "$(PACKAGE)/pkg/scm.BitbucketClientSecret=${BITBUCKET_CLIENT_SECRET}" -WAILS_TAGS ?= desktop,production,ui +WAILS_TAGS ?= desktop,production,ui,debug WAILS_BINDINGS_TAGS ?= bindings,generate WAILS_BINDINGS_BINARY_NAME ?= wailsbindings TAGS ?= $(WAILS_TAGS) diff --git a/cmd/plural/ui.go b/cmd/plural/ui.go index f84c3846..fc14ea14 100644 --- a/cmd/plural/ui.go +++ b/cmd/plural/ui.go @@ -5,18 +5,35 @@ package plural import ( "github.com/urfave/cli" + "github.com/pluralsh/plural/pkg/manifest" "github.com/pluralsh/plural/pkg/ui" + "github.com/pluralsh/plural/pkg/wkspace" ) func (p *Plural) uiCommands() cli.Command { return cli.Command{ Name: "install", Usage: "opens installer UI that simplifies application configuration", - Action: p.run, + Action: tracked(rooted(p.run), "cli.install"), } } func (p *Plural) run(c *cli.Context) error { + _, err := wkspace.Preflight() + if err != nil { + return err + } + + _, err = manifest.FetchProject() + if err != nil { + return err + } + + _, err = manifest.FetchContext() + if err != nil { + return err + } + p.InitPluralClient() return ui.Run(p.Client, c) } diff --git a/go.sum b/go.sum index 5f162cec..eaa05905 100644 --- a/go.sum +++ b/go.sum @@ -920,10 +920,6 @@ github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pluralsh/controller-reconcile-helper v0.0.4 h1:1o+7qYSyoeqKFjx+WgQTxDz4Q2VMpzprJIIKShxqG0E= github.com/pluralsh/controller-reconcile-helper v0.0.4/go.mod h1:AfY0gtteD6veBjmB6jiRx/aR4yevEf6K0M13/pGan/s= -github.com/pluralsh/gqlclient v1.3.11 h1:58vSsD4xur9isk4WncN9Q9CRENogSeUPv5sThRmpPQI= -github.com/pluralsh/gqlclient v1.3.11/go.mod h1:z1qHnvPeqIN/a+5OzFs40e6HI6tDxzh1+yJuEpvqGy4= -github.com/pluralsh/gqlclient v1.3.14 h1:MX3odnIfPSYT9PysegKkC31w/Vn8PZhrT/rZXZck/yU= -github.com/pluralsh/gqlclient v1.3.14/go.mod h1:z1qHnvPeqIN/a+5OzFs40e6HI6tDxzh1+yJuEpvqGy4= github.com/pluralsh/gqlclient v1.3.15 h1:QA6VEMDxeG0/e+qXvr7xgorHl45o4/Qg9CwsPyVn2gE= github.com/pluralsh/gqlclient v1.3.15/go.mod h1:z1qHnvPeqIN/a+5OzFs40e6HI6tDxzh1+yJuEpvqGy4= github.com/pluralsh/oauth v0.9.2 h1:tM9hBK4tCnJUeCOgX0ctxBBCS3hiCDPoxkJLODtedmQ= diff --git a/pkg/bundle/oidc.go b/pkg/bundle/oidc.go index d23d3d48..9d8f538a 100644 --- a/pkg/bundle/oidc.go +++ b/pkg/bundle/oidc.go @@ -116,6 +116,10 @@ func formatRedirectUris(settings *api.OIDCSettings, ctx map[string]interface{}) } func confirmOidc(confirm *bool) (bool, error) { + if confirm != nil && *confirm { + oidcConfirmed = true + } + if oidcConfirmed { return true, nil } @@ -132,8 +136,5 @@ func confirmOidc(confirm *bool) (bool, error) { } } - if *confirm { - oidcConfirmed = true - } return *confirm, nil } diff --git a/pkg/ui/client.go b/pkg/ui/client.go index b574ebbd..9ec91426 100644 --- a/pkg/ui/client.go +++ b/pkg/ui/client.go @@ -86,6 +86,15 @@ func (this *Client) Context() *manifest.Context { return context } +func (this *Client) Provider() string { + project, err := manifest.FetchProject() + if err != nil { + return "" + } + + return api.NormalizeProvider(project.Provider) +} + func (this *Client) Install(applications []Application, domains, buckets []string) error { path := manifest.ContextPath() context, err := manifest.ReadContext(path) @@ -104,14 +113,14 @@ func (this *Client) Install(applications []Application, domains, buckets []strin return app.IsDependency }) - for _, dep := range dependencies { - if err = this.doInstall(dep, context); err != nil { + for _, app := range installableApplications { + if err = this.doInstall(app, context); err != nil { return err } } - for _, app := range installableApplications { - if err = this.doInstall(app, context); err != nil { + for _, dep := range dependencies { + if err = this.doInstall(dep, context); err != nil { return err } } @@ -153,7 +162,7 @@ func (this *Client) doInstall(application Application, context *manifest.Context // Configure OIDC if enabled if oidc { - confirm := false + confirm := true err = bundle.ConfigureOidc(repoName, this.client, recipe, configuration, &confirm) if err != nil { return err diff --git a/pkg/ui/web/package.json b/pkg/ui/web/package.json index a45d3caa..27d037e9 100644 --- a/pkg/ui/web/package.json +++ b/pkg/ui/web/package.json @@ -22,7 +22,8 @@ "@apollo/client": "3.7.10", "@emotion/react": "11.10.6", "@emotion/styled": "11.10.6", - "@pluralsh/design-system": "1.330.1", + "@pluralsh/design-system": "1.334.0", + "grommet": "2.31.0", "honorable": "0.194.0", "honorable-theme-default": "0.77.0", "lodash": "4.17.21", diff --git a/pkg/ui/web/package.json.md5 b/pkg/ui/web/package.json.md5 index 18f1a207..3582d694 100755 --- a/pkg/ui/web/package.json.md5 +++ b/pkg/ui/web/package.json.md5 @@ -1 +1 @@ -c6011e947047bb5121351cb21621b0c0 \ No newline at end of file +97ea82012b5185fffbbfdf3e3f33f8f9 \ No newline at end of file diff --git a/pkg/ui/web/src/Plural.tsx b/pkg/ui/web/src/Plural.tsx index 40084811..c655a27a 100644 --- a/pkg/ui/web/src/Plural.tsx +++ b/pkg/ui/web/src/Plural.tsx @@ -1,44 +1,52 @@ -import { theme } from '@pluralsh/design-system' -import { HonorableTheme, ThemeProvider as HonorableThemeProvider } from 'honorable' -import React, { useCallback, useMemo } from 'react' +import { theme as honorableTheme } from '@pluralsh/design-system' +import { Grommet } from 'grommet' +import { ThemeProvider as HonorableThemeProvider } from 'honorable' +import React, { useMemo } from 'react' import { RouterProvider } from 'react-router-dom' import { ThemeProvider } from 'styled-components' import Loader from './components/loader/Loader' import { WailsContext, WailsContextProps } from './context/wails' +import { Provider } from './graphql/generated/graphql' +import { grommetTheme } from './grommet/theme' import { useWailsQuery } from './hooks/useWails' import { router } from './routes/router' import { Binding } from './services/wails' import { FontStyles } from './styled/fonts' import { GlobalStyles } from './styled/global' import { ScrollbarStyles } from './styled/scrollbar' -import { theme as styledTheme } from './styled/theme' +import { styledTheme } from './styled/theme' import { PluralProject } from './types/client' function Plural(): React.ReactElement { const { data: context } = useWailsQuery(Binding.Context) const { data: project = {} as PluralProject } = useWailsQuery(Binding.Project) + const { data: provider } = useWailsQuery(Binding.Provider) const { data: token } = useWailsQuery(Binding.Token) const isReady = useMemo(() => !!context && !!project && !!token, [context, project, token]) - const fixProjectProvider = useCallback((project: PluralProject) => ({ ...project, provider: project.provider?.toUpperCase() }), []) const wailsContext = useMemo(() => ({ context, - project: fixProjectProvider(project), + project: { ...project, provider }, token, - } as WailsContextProps), [context, fixProjectProvider, project, token]) + } as WailsContextProps), [context, project, provider, token]) return ( - - - - - - - {isReady && } - {!isReady && } - - + + + + + + + + {isReady && } + {!isReady && } + + + ) } diff --git a/pkg/ui/web/src/grommet/fileInputTheme.tsx b/pkg/ui/web/src/grommet/fileInputTheme.tsx index d36c647c..21d0fb7a 100644 --- a/pkg/ui/web/src/grommet/fileInputTheme.tsx +++ b/pkg/ui/web/src/grommet/fileInputTheme.tsx @@ -1,11 +1,12 @@ import { CloseIcon } from '@pluralsh/design-system' +import { DefaultTheme } from 'styled-components' export const fileInputTheme = ({ selected = false, error = false, theme, }: { selected?: boolean; error?: boolean; - theme: any; + theme: DefaultTheme; }) => ({ fileInput: { message: { diff --git a/pkg/ui/web/src/grommet/theme.ts b/pkg/ui/web/src/grommet/theme.ts new file mode 100644 index 00000000..c80d88a0 --- /dev/null +++ b/pkg/ui/web/src/grommet/theme.ts @@ -0,0 +1,234 @@ +import { css } from 'styled-components' + +const boxStyle = css` + outline: none; +` + +export const PLURAL_THEME = { + 'plural-blk': '#000b11', + 'plrl-black': '#000b11', + 'tone-dark': '#01131a', + 'tone-dark-2': '#1a2b31', + 'tone-dark-3': '#2f3b41', + 'tone-medium': '#c9d1d3', + 'tone-light': '#edf1f2', + 'plrl-white': '#fff', + 'key-dark': '#001b8c', + 'key-light': '#5C77FF', + blue: '#0022b2', + 'blue-light': '#3351f2', + 'blue-light-2': '#e1ebff', + 'blue-dark': '#001b8c', + 'blue-dark-2': '#002068', + 'alt-dark': '#006e96', + 'alt-light': '#0090c4', + 'plrl-red': '#dd2c39', + 'red-dark': '#b52d31', + 'red-dark-2': '#7f0009', + 'red-light': '#ff2756', + 'red-light-2': '#ffd9df', + 'status-warning': 'orange', + green: '#008e47', + 'green-dark': '#23422b', + 'green-dark-2': '#004422', + 'green-light': '#00ed76', + 'green-light-2': '#ccffe5', + teal: '#00e5a3', + 'teal-dark': '#00b57d', + 'teal-dark-2': '#009362', + 'teal-light': '#00ffb0', + 'teal-light-2': '#ccffee', + orange: '#ef9300', + 'orange-dark': '#e88900', + 'orange-dark-2': '#b76800', + 'orange-light': '#ff9d00', + 'orange-light-2': '#ffeacc', + purple: '#960ea5', + 'purple-dark': '#830096', + 'purple-dark-2': '#650077', + 'purple-light': '#df00ff', + 'purple-light-2': '#f7ccff', + 'fill-zero': 'grey.900', + 'fill-zero-hover': 'grey.875', + 'fill-zero-selected': 'grey.825', + 'fill-one': 'grey.850', + 'fill-one-hover': 'grey.825', + 'fill-one-selected': 'grey.775', + 'fill-two': 'grey.800', + 'fill-two-hover': 'grey.775', + 'fill-two-selected': 'grey.725', + 'fill-three': 'grey.750', + 'grey.950': '#0E1015', + 'grey.900': '#171A21', + 'grey.875': '#1C2026', + 'grey.850': '#1E2229', + 'grey.825': '#23272E', + 'grey.800': '#2A2E37', + 'grey.775': '#303540', + 'grey.750': '#363B45', + 'grey.725': '#3C414D', + 'grey.700': '#434956', + 'grey.600': '#555C68', + 'grey.500': '#757D8A', + 'grey.400': '#9096A2', + 'grey.300': '#A9B0BC', + 'grey.200': '#C4CAD4', + 'grey.100': '#DEE2E8', + 'grey.50': '#E9ECF0', +} + +export const DEFAULT_COLOR_THEME = { + brand: 'key-light', + // action: '#007a5a', + action: 'key-light', + sidebar: 'plural-blk', + card: '#222732', + hover: { dark: 'fill-two-hover', light: 'tone-light' }, + sidebarActive: 'tone-dark-3', + focus: 'key-light', + progress: '#007bff', + tagMedium: 'key-light', + tagLight: 'key-light', + backgroundColor: 'sidebarBackground', + sidebarBackground: '#0d1215', + // @ts-expect-error + orange: '#d7722c', + presence: '#39E500', + link: '#3366BB', + notif: 'error', + good: '#00ac46', + low: 'orange-light', + medium: 'orange', + high: 'red-dark', + critical: 'red-dark-2', + label: 'light-2', + 'input-border': 'border', + primary: '#0639FF', + 'action-primary': '#293EFF', + background: { + light: 'transparent', + dark: 'transparent', + }, + 'background-light': { + light: '#f5f7f9', + dark: '#22293b', + }, + text: { + light: 'inherit', + dark: 'inherit', + }, + 'text-light': { + light: 'lighten(text, 15)', + dark: 'darken(text, 15)', + }, + border: { + light: '#CCCCCC', + dark: '#303340', + }, + shadow: { + light: 'rgba(0, 0, 0, 0.2)', + dark: 'rgba(64, 64, 64, 0.2)', + }, + success: '#07E5A7', + error: '#E03E43', + warning: '#EF931D', + secondary: '#222534', + 'background-middle': { + light: '#EEEEEE', + dark: '#222534', + }, + 'background-top': { + light: 'white', + dark: '#323643', + }, + 'text-strong': { + light: '#000000', + dark: 'white', + }, + 'text-weak': { + light: '#444444', + dark: '#CCCCCC', + }, + 'text-xweak': { + light: '#666666', + dark: '#999999', + }, + 'background-success': '#07E5A733', + 'background-warning': '#EF931D66', + 'background-error': '#E03E4366', + 'background-info': '#0190C266', + 'accent-blue': { + dark: '#0190C2', + light: '#0190C2', + }, + 'accent-purple': { + dark: '#9510A1', + light: '#9510A1', + }, + 'accent-green': { + dark: '#058E4B', + light: '#058E4B', + }, + ...PLURAL_THEME, +} + +export const DEFAULT_THEME = { + anchor: { + color: '#9095A2', + hover: { + textDecoration: 'underline', + extend: 'color: #EBEFF0', + }, + fontWeight: 400, + }, + button: { + padding: { + horizontal: '6px', + vertical: '2px', + }, + }, + checkBox: { + size: '20px', + toggle: { radius: '20px', size: '40px' }, + }, + box: { + extend: boxStyle, + }, + textField: { extend: { fontWeight: 400 } }, + select: { + options: { + text: { size: 'small' }, + }, + }, + layer: { + background: 'background', + }, + global: { + colors: DEFAULT_COLOR_THEME, + focus: { shadow: 'none', border: { color: 'brand' } }, + control: { border: { radius: '2px' } }, + drop: { + background: 'fill-two', + border: { radius: '4px' }, + zIndex: 2000, + extend: css` + box-shadow: 0px 0px 4px 4px rgba(0, 0, 0, 0.2); + `, + }, + box: { extend: boxStyle }, + checkBox: { toggle: { color: 'brand' } }, + active: { background: { color: '#1E2229' } }, + elevation: { + light: { + medium: '0px 3px 8px rgba(100, 100, 100, 0.50)', + }, + }, + font: { + family: 'Inter', + size: '14px', + height: '20px', + }, + }, +} + +export { DEFAULT_THEME as grommetTheme } diff --git a/pkg/ui/web/src/routes/installer/ConfigurationFileInput.tsx b/pkg/ui/web/src/routes/installer/ConfigurationFileInput.tsx index ac3948ac..55cf43b6 100644 --- a/pkg/ui/web/src/routes/installer/ConfigurationFileInput.tsx +++ b/pkg/ui/web/src/routes/installer/ConfigurationFileInput.tsx @@ -1,6 +1,7 @@ -import { ComponentProps, useCallback, useState } from 'react' +import { FileInput } from 'grommet' +import { ThemeContext } from 'grommet/contexts' import { Span } from 'honorable' -import { FileInput, ThemeContext } from 'grommet' +import { ComponentProps, useCallback, useState } from 'react' import { useTheme } from 'styled-components' import { fileInputTheme } from '../../grommet/fileInputTheme' diff --git a/pkg/ui/web/src/routes/installer/Installer.tsx b/pkg/ui/web/src/routes/installer/Installer.tsx index 28147984..c64efe94 100644 --- a/pkg/ui/web/src/routes/installer/Installer.tsx +++ b/pkg/ui/web/src/routes/installer/Installer.tsx @@ -18,7 +18,12 @@ import styled from 'styled-components' import Loader from '../../components/loader/Loader' import { WailsContext } from '../../context/wails' -import { ListRepositoriesDocument, ListRepositoriesQueryVariables, RootQueryType } from '../../graphql/generated/graphql' +import { + ListRepositoriesDocument, + ListRepositoriesQueryVariables, + Provider, + RootQueryType, +} from '../../graphql/generated/graphql' import { Routes } from '../routes' import { buildSteps, install, toDefaultSteps } from './helpers' diff --git a/pkg/ui/web/src/routes/root.tsx b/pkg/ui/web/src/routes/root.tsx index dd818656..87964500 100644 --- a/pkg/ui/web/src/routes/root.tsx +++ b/pkg/ui/web/src/routes/root.tsx @@ -1,17 +1,12 @@ import { ApolloProvider } from '@apollo/client' -import { LoadingSpinner } from '@pluralsh/design-system' -import React, { Suspense, useContext, useMemo } from 'react' -import { - DataRouteObject, - Outlet, - RouteObject, - useNavigate, -} from 'react-router-dom' +import { GraphQLToast, LoadingSpinner } from '@pluralsh/design-system' +import React, { Suspense, useContext } from 'react' +import { DataRouteObject, Outlet, RouteObject } from 'react-router-dom' import styled from 'styled-components' import { WailsContext } from '../context/wails' import Header from '../layout/Header' -import { newApolloClient } from '../services/apollo' +import { useApolloClient } from '../services/apollo' import { Routes } from './routes' @@ -30,13 +25,21 @@ const Root = styled(RootUnstyled)(({ theme }) => ({ function RootUnstyled({ ...props }): React.ReactElement { const { token } = useContext(WailsContext) - const client = useMemo(() => newApolloClient(token), [token]) + const { client, error } = useApolloClient(token) return (
+ {error && ( + + )}
) diff --git a/pkg/ui/web/src/services/apollo.ts b/pkg/ui/web/src/services/apollo.tsx similarity index 53% rename from pkg/ui/web/src/services/apollo.ts rename to pkg/ui/web/src/services/apollo.tsx index 6159c00a..c16bf5fe 100644 --- a/pkg/ui/web/src/services/apollo.ts +++ b/pkg/ui/web/src/services/apollo.tsx @@ -1,3 +1,5 @@ +import { GraphQLErrors } from '@apollo/client/errors' +import { useMemo, useState } from 'react' import { create } from '@absinthe/socket' import { createAbsintheSocketLink } from '@absinthe/socket-apollo-link' import { @@ -8,6 +10,7 @@ import { NormalizedCacheObject, } from '@apollo/client' import { setContext } from '@apollo/client/link/context' +import { onError } from '@apollo/client/link/error' import { RetryLink } from '@apollo/client/link/retry' import { Socket as PhoenixSocket } from 'phoenix' @@ -26,12 +29,27 @@ const WS_URI = `wss://${API_HOST}/socket` // socketLink, // retryLink.concat(resetToken).concat(httpLink),) -export function newApolloClient(token: string): ApolloClient { +interface ApolloClientHook { + client: ApolloClient + error: GraphQLErrors | undefined +} + +export function useApolloClient(token: string): ApolloClientHook { + const [error, setError] = useState() + const authLink = setContext(() => ({ headers: token ? { authorization: `Bearer ${token}` } : {} })) - const httpLink = new HttpLink({ uri: GQL_URL }) + const httpLink = useMemo(() => new HttpLink({ uri: GQL_URL }), []) const absintheSocket = create(new PhoenixSocket(WS_URI, { params: () => (token ? { Authorization: `Bearer ${token}` } : {}) })) - const socketLink = createAbsintheSocketLink(absintheSocket) - const retryLink = new RetryLink({ + const errorLink = onError(({ graphQLErrors }) => { + if (!error && graphQLErrors) { + const clearDelay = 15000 + + setError(graphQLErrors) + setTimeout(() => setError(undefined), clearDelay) + } + }) + const _socketLink = createAbsintheSocketLink(absintheSocket) + const _retryLink = new RetryLink({ delay: { initial: 200 }, attempts: { max: Infinity, @@ -39,8 +57,11 @@ export function newApolloClient(token: string): ApolloClient({ - link: ApolloLink.from([authLink, httpLink]), - cache: new InMemoryCache(), - }) + return useMemo(() => ({ + client: new ApolloClient({ + link: ApolloLink.from([authLink, errorLink, httpLink]), + cache: new InMemoryCache(), + }), + error, + }), [authLink, error, httpLink, errorLink]) } diff --git a/pkg/ui/web/src/services/wails.ts b/pkg/ui/web/src/services/wails.ts index d8d273bb..ddf06bb1 100644 --- a/pkg/ui/web/src/services/wails.ts +++ b/pkg/ui/web/src/services/wails.ts @@ -5,9 +5,11 @@ import { Context, Install, Project, + Provider, Token, } from '../../wailsjs/go/ui/Client' import { SetClipboard } from '../../wailsjs/go/ui/Window' +import { Provider as APIProvider } from '../graphql/generated/graphql' import { Client, ClientBinding, @@ -24,6 +26,7 @@ import Application = ui.Application; enum Binding { Token = 'Token', Project = 'Project', + Provider = 'Provider', Context = 'Context', Install = 'Install', SetClipboard = 'SetClipboard', @@ -38,6 +41,7 @@ enum Binding { const Plural: Client = { [Binding.Token]: (): Promise => Token(), [Binding.Project]: (): Promise => Project() as Promise, + [Binding.Provider]: (): Promise => Provider() as Promise, [Binding.Context]: (): Promise => Context() as Promise, [Binding.Install]: (apps: Array, domains: Array, buckets: Array): Promise => Install(apps as Array, domains, buckets) as Promise, [Binding.SetClipboard]: (text: string): Promise => SetClipboard(text), diff --git a/pkg/ui/web/src/styled/theme.ts b/pkg/ui/web/src/styled/theme.ts index d0ef4f2a..cb9b7acd 100644 --- a/pkg/ui/web/src/styled/theme.ts +++ b/pkg/ui/web/src/styled/theme.ts @@ -8,4 +8,4 @@ const theme = { }, } -export { theme } +export { theme as styledTheme } diff --git a/pkg/ui/web/src/types/styled.d.ts b/pkg/ui/web/src/types/styled.d.ts index fe94d823..828f19c8 100644 --- a/pkg/ui/web/src/types/styled.d.ts +++ b/pkg/ui/web/src/types/styled.d.ts @@ -1,10 +1,9 @@ // import original module declarations import 'styled-components' -import { theme } from '../styled/theme' -import { DEFAULT_THEME } from '../theme' +import { styledTheme } from '../styled/theme' -type StyledTheme = typeof theme & typeof DEFAULT_THEME +type StyledTheme = typeof styledTheme // and extend them! declare module 'styled-components' { diff --git a/pkg/ui/web/wailsjs/go/ui/Client.d.ts b/pkg/ui/web/wailsjs/go/ui/Client.d.ts index 90dacd19..b7a026b8 100755 --- a/pkg/ui/web/wailsjs/go/ui/Client.d.ts +++ b/pkg/ui/web/wailsjs/go/ui/Client.d.ts @@ -8,4 +8,6 @@ export function Install(arg1:Array,arg2:Array,arg3:Array export function Project():Promise; +export function Provider():Promise; + export function Token():Promise; diff --git a/pkg/ui/web/wailsjs/go/ui/Client.js b/pkg/ui/web/wailsjs/go/ui/Client.js index 88c3440e..ca1299c0 100755 --- a/pkg/ui/web/wailsjs/go/ui/Client.js +++ b/pkg/ui/web/wailsjs/go/ui/Client.js @@ -14,6 +14,10 @@ export function Project() { return window['go']['ui']['Client']['Project'](); } +export function Provider() { + return window['go']['ui']['Client']['Provider'](); +} + export function Token() { return window['go']['ui']['Client']['Token'](); } diff --git a/pkg/ui/web/yarn.lock b/pkg/ui/web/yarn.lock index 4f2b311b..c4f6be4a 100644 --- a/pkg/ui/web/yarn.lock +++ b/pkg/ui/web/yarn.lock @@ -2937,9 +2937,9 @@ __metadata: languageName: node linkType: hard -"@pluralsh/design-system@npm:1.330.1": - version: 1.330.1 - resolution: "@pluralsh/design-system@npm:1.330.1" +"@pluralsh/design-system@npm:1.334.0": + version: 1.334.0 + resolution: "@pluralsh/design-system@npm:1.334.0" dependencies: "@floating-ui/react-dom-interactions": 0.13.3 "@monaco-editor/react": 4.4.6 @@ -2996,7 +2996,7 @@ __metadata: react-dom: ">=16.0.0" react-transition-group: ">=4.4.2" styled-components: ">=5.3.5" - checksum: 66c28d9ce652d6a16095b56bee9a6aa6559400e839079df9fd7aae9811adb0866f3420d1209c208aba85c6e96360e5cf97d9527f2229ab614b4a5e5d52426e15 + checksum: 9e8ffb14590473ad3c1d4b4871ecf6eb00cd4d82d5559b5e5b37980c468a4164a104c46d96bd537e626ef7f26c060cc0161813e2c81248d28c085d6d8de10559 languageName: node linkType: hard @@ -6772,7 +6772,7 @@ __metadata: "@graphql-codegen/typescript": 3.0.2 "@graphql-codegen/typescript-operations": 3.0.2 "@graphql-codegen/typescript-react-apollo": 3.3.7 - "@pluralsh/design-system": 1.330.1 + "@pluralsh/design-system": 1.334.0 "@pluralsh/eslint-config-typescript": 2.5.41 "@types/absinthe__socket": 0.2.3 "@types/absinthe__socket-apollo-link": 0.2.1 @@ -6788,6 +6788,7 @@ __metadata: eslint-plugin-jsx-a11y: 6.7.1 eslint-plugin-react: 7.32.2 eslint-plugin-react-hooks: 4.6.0 + grommet: 2.31.0 honorable: 0.194.0 honorable-theme-default: 0.77.0 lodash: 4.17.21 @@ -7110,7 +7111,7 @@ __metadata: languageName: node linkType: hard -"grommet-icons@npm:^4.8.0": +"grommet-icons@npm:^4.10.0, grommet-icons@npm:^4.8.0": version: 4.10.0 resolution: "grommet-icons@npm:4.10.0" dependencies: @@ -7150,6 +7151,22 @@ __metadata: languageName: node linkType: hard +"grommet@npm:2.31.0": + version: 2.31.0 + resolution: "grommet@npm:2.31.0" + dependencies: + grommet-icons: ^4.10.0 + hoist-non-react-statics: ^3.2.0 + markdown-to-jsx: ^7.2.0 + prop-types: ^15.8.1 + peerDependencies: + react: ^16.6.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.6.1 || ^17.0.0 || ^18.0.0 + styled-components: ">= 5.1" + checksum: a15b8834ecd352713a1a4ad997f210db21f5eac2b9ba0917f8f7a14d9f0efaaac8e35e539694efba1c656fb775f4ab52c7f464d640fd0272fe8e1d0131537a29 + languageName: node + linkType: hard + "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" @@ -8283,7 +8300,7 @@ __metadata: languageName: node linkType: hard -"markdown-to-jsx@npm:^7.1.5": +"markdown-to-jsx@npm:^7.1.5, markdown-to-jsx@npm:^7.2.0": version: 7.2.0 resolution: "markdown-to-jsx@npm:7.2.0" peerDependencies: