@stack-spot/portal-components 0.0.18 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/dist/components/BannerWarning.d.ts +6 -0
  2. package/dist/components/BannerWarning.d.ts.map +1 -1
  3. package/dist/components/BannerWarning.js +6 -0
  4. package/dist/components/BannerWarning.js.map +1 -1
  5. package/dist/components/Breadcrumb/index.d.ts +7 -8
  6. package/dist/components/Breadcrumb/index.d.ts.map +1 -1
  7. package/dist/components/Breadcrumb/index.js +7 -6
  8. package/dist/components/Breadcrumb/index.js.map +1 -1
  9. package/dist/components/Breadcrumb/styled.d.ts +1 -1
  10. package/dist/components/Breadcrumb/styled.d.ts.map +1 -1
  11. package/dist/components/Breadcrumb/styled.js +1 -0
  12. package/dist/components/Breadcrumb/styled.js.map +1 -1
  13. package/dist/components/ChatBot.d.ts +7 -0
  14. package/dist/components/ChatBot.d.ts.map +1 -1
  15. package/dist/components/ChatBot.js +13 -6
  16. package/dist/components/ChatBot.js.map +1 -1
  17. package/dist/components/ErrorFeedback.d.ts +23 -0
  18. package/dist/components/ErrorFeedback.d.ts.map +1 -0
  19. package/dist/components/ErrorFeedback.js +73 -0
  20. package/dist/components/ErrorFeedback.js.map +1 -0
  21. package/dist/components/SelectionList.d.ts +123 -0
  22. package/dist/components/SelectionList.d.ts.map +1 -0
  23. package/dist/components/SelectionList.js +149 -0
  24. package/dist/components/SelectionList.js.map +1 -0
  25. package/dist/components/{tour → Tour}/StepContainer.d.ts +16 -0
  26. package/dist/components/Tour/StepContainer.d.ts.map +1 -0
  27. package/dist/components/{tour → Tour}/StepContainer.js +4 -0
  28. package/dist/components/Tour/StepContainer.js.map +1 -0
  29. package/dist/components/Tour/StepNavigation.d.ts +29 -0
  30. package/dist/components/Tour/StepNavigation.d.ts.map +1 -0
  31. package/dist/components/{tour → Tour}/StepNavigation.js +4 -0
  32. package/dist/components/Tour/StepNavigation.js.map +1 -0
  33. package/dist/components/Tour/StepTitle.d.ts +17 -0
  34. package/dist/components/Tour/StepTitle.d.ts.map +1 -0
  35. package/dist/components/{tour → Tour}/StepTitle.js +4 -0
  36. package/dist/components/Tour/StepTitle.js.map +1 -0
  37. package/dist/components/{tour → Tour}/context.d.ts +11 -0
  38. package/dist/components/Tour/context.d.ts.map +1 -0
  39. package/dist/components/{tour → Tour}/context.js +11 -0
  40. package/dist/components/Tour/context.js.map +1 -0
  41. package/dist/components/{tour → Tour}/index.d.ts +1 -1
  42. package/dist/components/Tour/index.d.ts.map +1 -0
  43. package/dist/components/{tour → Tour}/index.js +1 -1
  44. package/dist/components/Tour/index.js.map +1 -0
  45. package/dist/components/Tour/utils.d.ts +51 -0
  46. package/dist/components/Tour/utils.d.ts.map +1 -0
  47. package/dist/components/Tour/utils.js +60 -0
  48. package/dist/components/Tour/utils.js.map +1 -0
  49. package/dist/context/anchor.d.ts +28 -0
  50. package/dist/context/anchor.d.ts.map +1 -0
  51. package/dist/context/anchor.js +23 -0
  52. package/dist/context/anchor.js.map +1 -0
  53. package/dist/hooks/keyboard.d.ts +33 -0
  54. package/dist/hooks/keyboard.d.ts.map +1 -0
  55. package/dist/hooks/keyboard.js +59 -0
  56. package/dist/hooks/keyboard.js.map +1 -0
  57. package/dist/hooks/service-now.d.ts +30 -1
  58. package/dist/hooks/service-now.d.ts.map +1 -1
  59. package/dist/hooks/service-now.js +54 -15
  60. package/dist/hooks/service-now.js.map +1 -1
  61. package/dist/hooks/text.d.ts +10 -0
  62. package/dist/hooks/text.d.ts.map +1 -0
  63. package/dist/hooks/text.js +24 -0
  64. package/dist/hooks/text.js.map +1 -0
  65. package/dist/hooks/title.d.ts +13 -0
  66. package/dist/hooks/title.d.ts.map +1 -1
  67. package/dist/hooks/title.js +13 -0
  68. package/dist/hooks/title.js.map +1 -1
  69. package/dist/index.d.ts +4 -3
  70. package/dist/index.d.ts.map +1 -1
  71. package/dist/index.js +4 -3
  72. package/dist/index.js.map +1 -1
  73. package/dist/svg/AI.d.ts +9 -0
  74. package/dist/svg/AI.d.ts.map +1 -0
  75. package/dist/svg/AI.js +12 -0
  76. package/dist/svg/AI.js.map +1 -0
  77. package/dist/svg/EDP.d.ts +9 -0
  78. package/dist/svg/EDP.d.ts.map +1 -0
  79. package/dist/svg/EDP.js +8 -0
  80. package/dist/svg/EDP.js.map +1 -0
  81. package/dist/svg/Forbidden.d.ts +6 -0
  82. package/dist/svg/Forbidden.d.ts.map +1 -0
  83. package/dist/svg/Forbidden.js +4 -0
  84. package/dist/svg/Forbidden.js.map +1 -0
  85. package/dist/svg/HUB.d.ts +9 -0
  86. package/dist/svg/HUB.d.ts.map +1 -0
  87. package/dist/svg/HUB.js +8 -0
  88. package/dist/svg/HUB.js.map +1 -0
  89. package/dist/svg/Logo.d.ts +5 -0
  90. package/dist/svg/Logo.d.ts.map +1 -0
  91. package/dist/svg/Logo.js +7 -0
  92. package/dist/svg/Logo.js.map +1 -0
  93. package/dist/svg/MiniLogo.d.ts +9 -0
  94. package/dist/svg/MiniLogo.d.ts.map +1 -0
  95. package/dist/{components → svg}/MiniLogo.js +3 -0
  96. package/dist/svg/MiniLogo.js.map +1 -0
  97. package/dist/{components/MiniLogo.d.ts → svg/NotFound.d.ts} +2 -2
  98. package/dist/svg/NotFound.d.ts.map +1 -0
  99. package/dist/svg/NotFound.js +4 -0
  100. package/dist/svg/NotFound.js.map +1 -0
  101. package/dist/svg/ServerError.d.ts +6 -0
  102. package/dist/svg/ServerError.d.ts.map +1 -0
  103. package/dist/svg/ServerError.js +4 -0
  104. package/dist/svg/ServerError.js.map +1 -0
  105. package/dist/svg/Unauthenticated.d.ts +6 -0
  106. package/dist/svg/Unauthenticated.d.ts.map +1 -0
  107. package/dist/svg/Unauthenticated.js +4 -0
  108. package/dist/svg/Unauthenticated.js.map +1 -0
  109. package/dist/svg/index.d.ts +10 -0
  110. package/dist/svg/index.d.ts.map +1 -0
  111. package/dist/svg/index.js +10 -0
  112. package/dist/svg/index.js.map +1 -0
  113. package/dist/utils/accessibility.d.ts +73 -0
  114. package/dist/utils/accessibility.d.ts.map +1 -0
  115. package/dist/utils/accessibility.js +131 -0
  116. package/dist/utils/accessibility.js.map +1 -0
  117. package/dist/utils/cookie.d.ts +34 -0
  118. package/dist/utils/cookie.d.ts.map +1 -0
  119. package/dist/utils/cookie.js +64 -0
  120. package/dist/utils/cookie.js.map +1 -0
  121. package/package.json +23 -12
  122. package/readme.md +58 -13
  123. package/src/components/BannerWarning.tsx +6 -0
  124. package/src/components/Breadcrumb/index.tsx +15 -13
  125. package/src/components/Breadcrumb/styled.ts +2 -1
  126. package/src/components/ChatBot.tsx +15 -7
  127. package/src/components/ErrorFeedback.tsx +135 -0
  128. package/src/components/SelectionList.tsx +361 -0
  129. package/src/components/{tour → Tour}/StepContainer.tsx +16 -0
  130. package/src/components/{tour → Tour}/StepNavigation.tsx +26 -2
  131. package/src/components/{tour → Tour}/StepTitle.tsx +11 -1
  132. package/src/components/{tour → Tour}/context.tsx +11 -0
  133. package/src/components/{tour → Tour}/index.ts +1 -1
  134. package/src/components/Tour/utils.tsx +100 -0
  135. package/src/context/anchor.tsx +37 -0
  136. package/src/hooks/keyboard.tsx +80 -0
  137. package/src/hooks/service-now.tsx +60 -16
  138. package/src/hooks/text.tsx +30 -0
  139. package/src/hooks/title.tsx +13 -0
  140. package/src/index.ts +4 -3
  141. package/src/svg/AI.tsx +41 -0
  142. package/src/svg/EDP.tsx +39 -0
  143. package/src/svg/Forbidden.tsx +22 -0
  144. package/src/svg/HUB.tsx +39 -0
  145. package/src/svg/Logo.tsx +38 -0
  146. package/src/{components → svg}/MiniLogo.tsx +3 -0
  147. package/src/svg/NotFound.tsx +16 -0
  148. package/src/svg/ServerError.tsx +33 -0
  149. package/src/svg/Unauthenticated.tsx +16 -0
  150. package/src/svg/index.ts +9 -0
  151. package/src/utils/accessibility.ts +141 -0
  152. package/src/utils/cookie.ts +66 -0
  153. package/dist/components/Login.d.ts +0 -26
  154. package/dist/components/Login.d.ts.map +0 -1
  155. package/dist/components/Login.js +0 -100
  156. package/dist/components/Login.js.map +0 -1
  157. package/dist/components/MiniLogo.d.ts.map +0 -1
  158. package/dist/components/MiniLogo.js.map +0 -1
  159. package/dist/components/tour/StepContainer.d.ts.map +0 -1
  160. package/dist/components/tour/StepContainer.js.map +0 -1
  161. package/dist/components/tour/StepNavigation.d.ts +0 -13
  162. package/dist/components/tour/StepNavigation.d.ts.map +0 -1
  163. package/dist/components/tour/StepNavigation.js.map +0 -1
  164. package/dist/components/tour/StepTitle.d.ts +0 -7
  165. package/dist/components/tour/StepTitle.d.ts.map +0 -1
  166. package/dist/components/tour/StepTitle.js.map +0 -1
  167. package/dist/components/tour/context.d.ts.map +0 -1
  168. package/dist/components/tour/context.js.map +0 -1
  169. package/dist/components/tour/index.d.ts.map +0 -1
  170. package/dist/components/tour/index.js.map +0 -1
  171. package/dist/components/tour/utils.d.ts +0 -13
  172. package/dist/components/tour/utils.d.ts.map +0 -1
  173. package/dist/components/tour/utils.js +0 -43
  174. package/dist/components/tour/utils.js.map +0 -1
  175. package/src/components/Login.tsx +0 -157
  176. package/src/components/tour/utils.tsx +0 -65
@@ -1,43 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { theme } from '@stack-spot/portal-theme';
3
- import { StepContainer } from './StepContainer.js';
4
- const TOUR_COOKIE = 'guided-tour-global';
5
- const DOMAIN_REGEX = new RegExp(/(\.*(prd|stg|dev)*.stackspot.com)|localhost/);
6
- const portalUrl = new URL(location.href);
7
- const cookieDomain = DOMAIN_REGEX.exec(portalUrl.host)?.[0];
8
- const defaultCookieAttributes = `domain=${cookieDomain}; SameSite=Strict;`;
9
- const getCookies = () => document.cookie.split('; ').reduce((prev, current) => {
10
- const [name, ...value] = current.split('=');
11
- prev[name] = value.join('=');
12
- return prev;
13
- }, {});
14
- const setCookie = (key, value) => {
15
- document.cookie = `${key}=${value}; ${defaultCookieAttributes}`;
16
- };
17
- const getCookie = (key) => getCookies()[key];
18
- const getTourCookie = () => {
19
- const currentTourObject = getCookie(TOUR_COOKIE);
20
- return currentTourObject ? currentTourObject.split(',') : [];
21
- };
22
- export const finishTourStep = (key) => {
23
- const tourObject = getTourCookie();
24
- if (!tourObject.includes(key))
25
- tourObject.push(key);
26
- setCookie(TOUR_COOKIE, tourObject.toString());
27
- };
28
- export const isNewTourStep = (step) => !hasFinishedTourStep(`${step.selector}`);
29
- export const hasFinishedTourStep = (key) => getTourCookie().includes(key);
30
- export const tourStepBuilder = ({ selector, position, title, content, style, customNavigation, ...rest }) => ({
31
- selector,
32
- content: (_jsx(StepContainer, { stepKey: selector, position: position, title: title, customNavigation: customNavigation, children: content })),
33
- position,
34
- style: {
35
- backgroundColor: theme.color.inverse[500],
36
- width: '256px',
37
- padding: 0,
38
- top: ['right', 'left'].includes(position) ? '-3px' : '0',
39
- ...(style || {}),
40
- },
41
- ...(rest || {}),
42
- });
43
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/tour/utils.tsx"],"names":[],"mappings":"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"}
@@ -1,157 +0,0 @@
1
- /* eslint-disable max-len */
2
- import { Button, IconBox, Input, Text } from '@citric/core'
3
- import { Github } from '@citric/icons'
4
- import { LoadingCircular } from '@citric/ui'
5
- import { theme } from '@stack-spot/portal-theme'
6
- import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
7
- import { useState } from 'react'
8
- import { styled } from 'styled-components'
9
- import { BannerWarning } from './BannerWarning'
10
- import { MiniLogo } from './MiniLogo'
11
-
12
- type LoginType = 'sso' | 'idp'
13
-
14
- interface BaseData {
15
- type: LoginType,
16
- }
17
-
18
- interface SSOData extends BaseData {
19
- type: 'sso',
20
- email: string,
21
- }
22
-
23
- interface IDPData extends BaseData {
24
- type: 'idp',
25
- provider: 'external-idp:github',
26
- }
27
-
28
- type LoginData = SSOData | IDPData
29
-
30
- interface Props {
31
- initialValue?: string,
32
- onSubmit: (data: LoginData) => Promise<void>,
33
- welcomeText?: string,
34
- removeLoadingOnSuccess?: boolean,
35
- className?: string,
36
- style?: React.CSSProperties,
37
- bannerData?: React.ReactNode,
38
- }
39
-
40
- const LoginBox = styled.form`
41
- display: flex;
42
- flex-direction: column;
43
- justify-content: center;
44
- gap: 24px;
45
-
46
- header {
47
- display: flex;
48
- flex-direction: column;
49
- align-items: center;
50
- gap: 24px;
51
- }
52
-
53
- .title {
54
- font-size: 1rem;
55
- }
56
-
57
- .separator {
58
- padding: 0 8px;
59
- background-color: ${theme.color.light['400']};
60
- color: ${theme.color.light['700']};
61
- display: flex;
62
- flex-direction: row;
63
- align-items: center;
64
- justify-content: center;
65
- gap: 20px;
66
- margin: 0;
67
-
68
- &:before, &:after {
69
- content: '';
70
- height: 1px;
71
- flex: 1;
72
- background-color: ${theme.color.light['600']};
73
- }
74
- }
75
-
76
- .error {
77
- color: ${theme.color.danger['500']};
78
- line-height: 1.5rem;
79
- }
80
- `
81
-
82
- export const Login = ({ onSubmit, initialValue = '', welcomeText, removeLoadingOnSuccess, className, style, bannerData }: Props) => {
83
- const t = useTranslate(dictionary)
84
- const searchParams = new URLSearchParams(location.search)
85
- const [error, setError] = useState(searchParams.get('error_description') || searchParams.get('error') || '')
86
- const [loading, setLoading] = useState(false)
87
- const [email, setEmail] = useState(initialValue)
88
- const disabled = !email.match(/\w+@\w+/)
89
-
90
- async function login(type: LoginType) {
91
- setError('')
92
- setLoading(true)
93
- try {
94
- const data: LoginData = type === 'sso' ? { type: 'sso', email } : { type: 'idp', provider: 'external-idp:github' }
95
- await onSubmit(data)
96
- if (removeLoadingOnSuccess) setLoading(false)
97
- } catch (error: any) {
98
- setLoading(false)
99
- setError(error.message || error.toString())
100
- }
101
- }
102
-
103
- function submitForm(e: React.FormEvent<HTMLFormElement>) {
104
- e.preventDefault()
105
- if (disabled) return
106
- login('sso')
107
- }
108
-
109
- return (
110
- <>
111
- <LoginBox onSubmit={submitForm} className={className} style={style}>
112
- <header>
113
- <MiniLogo />
114
- <Text className="title">{welcomeText || t.welcome}</Text>
115
- </header>
116
- <Input name="email" value={email} onChange={e => setEmail(e.target.value)} placeholder={t.placeholder} />
117
- <Button colorScheme="primary" disabled={disabled || loading}>
118
- {loading ? <LoadingCircular /> : <Text>{t.continue}</Text>}
119
- </Button>
120
- <p className="separator">{t.or}</p>
121
- <Button colorScheme="light" type="button" onClick={() => login('idp')} disabled={loading}>
122
- {loading ? <LoadingCircular /> : (
123
- <>
124
- <IconBox>
125
- <Github />
126
- </IconBox>
127
- <Text>{t.loginWithGithub}</Text>
128
- </>
129
- )}
130
- </Button>
131
- {error && <Text className="error">{t.error}: {error}</Text>}
132
- </LoginBox>
133
- {bannerData ? <BannerWarning>
134
- {bannerData}
135
- </BannerWarning> : null}
136
- </>
137
- )
138
- }
139
-
140
- const dictionary = {
141
- en: {
142
- welcome: 'Welcome to StackSpot',
143
- placeholder: 'your@email.com',
144
- continue: 'Continue',
145
- or: 'or',
146
- loginWithGithub: 'Login with Github',
147
- error: 'Error while attempting to login',
148
- },
149
- pt: {
150
- welcome: 'Bem vindo à StackSpot',
151
- placeholder: 'nome@email.com',
152
- continue: 'Continuar',
153
- or: 'ou',
154
- loginWithGithub: 'Logar com o GitHub',
155
- error: 'Erro ao fazer login',
156
- },
157
- } satisfies Dictionary
@@ -1,65 +0,0 @@
1
- import { theme } from '@stack-spot/portal-theme'
2
- import { ReactNode } from 'react'
3
- import { ReactourStep } from 'reactour'
4
- import { PointingArrowPosition, StepContainer } from './StepContainer'
5
- import { NavigationProps } from './StepNavigation'
6
-
7
- const TOUR_COOKIE = 'guided-tour-global'
8
- const DOMAIN_REGEX = new RegExp(/(\.*(prd|stg|dev)*.stackspot.com)|localhost/)
9
- const portalUrl = new URL(location.href)
10
- const cookieDomain = DOMAIN_REGEX.exec(portalUrl.host)?.[0]
11
- const defaultCookieAttributes = `domain=${cookieDomain}; SameSite=Strict;`
12
-
13
- const getCookies = (): Record<string, string> => document.cookie.split('; ').reduce((prev, current) => {
14
- const [name, ...value] = current.split('=')
15
- prev[name] = value.join('=')
16
- return prev
17
- }, {} as Record<string, string>)
18
-
19
- const setCookie = (key: string, value: string) => {
20
- document.cookie = `${key}=${value}; ${defaultCookieAttributes}`
21
- }
22
-
23
- const getCookie = (key: string) => getCookies()[key]
24
-
25
- const getTourCookie = () => {
26
- const currentTourObject = getCookie(TOUR_COOKIE)
27
- return currentTourObject ? currentTourObject.split(',') : []
28
- }
29
-
30
- export const finishTourStep = (key: string) => {
31
- const tourObject: string[] = getTourCookie()
32
- if (!tourObject.includes(key)) tourObject.push(key)
33
- setCookie(TOUR_COOKIE, tourObject.toString())
34
- }
35
-
36
- export const isNewTourStep = (step: ReactourStep) => !hasFinishedTourStep(`${step.selector}`)
37
- export const hasFinishedTourStep = (key: string) => getTourCookie().includes(key)
38
-
39
- export const tourStepBuilder = ({
40
- selector,
41
- position,
42
- title,
43
- content,
44
- style,
45
- customNavigation,
46
- ...rest
47
- }: ReactourStep & { title: string, selector: string, content: ReactNode, customNavigation?: NavigationProps }): ReactourStep => ({
48
- selector,
49
- content: (<StepContainer
50
- stepKey={selector}
51
- position={position as PointingArrowPosition}
52
- title={title}
53
- customNavigation={customNavigation}>
54
- {content}
55
- </StepContainer>),
56
- position,
57
- style: {
58
- backgroundColor: theme.color.inverse[500],
59
- width: '256px',
60
- padding: 0,
61
- top: ['right', 'left'].includes(position as PointingArrowPosition) ? '-3px' : '0',
62
- ...(style || {}),
63
- },
64
- ...(rest || {}),
65
- })