@stack-spot/portal-components 2.27.1 → 2.27.2
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.
- package/CHANGELOG.md +635 -628
- package/dist/components/AnimatedHeight.d.ts +1 -1
- package/dist/components/AnimatedHeight.js +26 -26
- package/dist/components/AsyncContent.d.ts +1 -1
- package/dist/components/AsyncContent.js +1 -1
- package/dist/components/BannerWarning.d.ts +1 -1
- package/dist/components/BannerWarning.js +1 -1
- package/dist/components/Breadcrumb/index.d.ts +2 -2
- package/dist/components/Breadcrumb/index.js +1 -1
- package/dist/components/Breadcrumb/styled.js +31 -31
- package/dist/components/ButtonLoading.d.ts +1 -1
- package/dist/components/ButtonLoading.js +1 -1
- package/dist/components/ChatBot.d.ts +1 -1
- package/dist/components/ChatBot.js +1 -1
- package/dist/components/ContentValidateFilter.d.ts +1 -1
- package/dist/components/ContentValidateFilter.js +1 -1
- package/dist/components/FadingOverflow.d.ts +1 -1
- package/dist/components/FadingOverflow.js +69 -69
- package/dist/components/FileTreeView/More.d.ts +1 -1
- package/dist/components/FileTreeView/More.js +1 -1
- package/dist/components/FileTreeView/index.d.ts +1 -1
- package/dist/components/FileTreeView/index.js +1 -1
- package/dist/components/InfiniteScroll.d.ts +1 -1
- package/dist/components/InfiniteScroll.js +1 -1
- package/dist/components/InfoMaintenanceBanner.d.ts +1 -1
- package/dist/components/InfoMaintenanceBanner.js +2 -2
- package/dist/components/LazyMarkdown/BlockquoteMd.d.ts +1 -1
- package/dist/components/LazyMarkdown/BlockquoteMd.js +1 -1
- package/dist/components/LazyMarkdown/CodeViewer.d.ts +1 -1
- package/dist/components/LazyMarkdown/CodeViewer.js +76 -76
- package/dist/components/LazyMarkdown/Markdown.d.ts +1 -1
- package/dist/components/LazyMarkdown/Markdown.js +1 -1
- package/dist/components/LazyMarkdown/MarkdownButton.d.ts +1 -1
- package/dist/components/LazyMarkdown/MarkdownButton.js +1 -1
- package/dist/components/LazyMarkdown/Video.d.ts +1 -1
- package/dist/components/LazyMarkdown/Video.js +1 -1
- package/dist/components/LazyMarkdown/index.d.ts +1 -1
- package/dist/components/LazyMarkdown/index.js +1 -1
- package/dist/components/Placeholder.d.ts +7 -3
- package/dist/components/Placeholder.d.ts.map +1 -1
- package/dist/components/Placeholder.js +3 -3
- package/dist/components/Placeholder.js.map +1 -1
- package/dist/components/ScrollView.js +16 -16
- package/dist/components/Select/BadgeItem.d.ts +1 -1
- package/dist/components/Select/BadgeItem.js +1 -1
- package/dist/components/Select/ClearInput.d.ts +1 -1
- package/dist/components/Select/ClearInput.js +1 -1
- package/dist/components/Select/CloseItem.d.ts +1 -1
- package/dist/components/Select/CloseItem.js +1 -1
- package/dist/components/Select/CreatableSelect.js +1 -1
- package/dist/components/Select/CustomMenu.d.ts +1 -1
- package/dist/components/Select/CustomMenu.js +1 -1
- package/dist/components/Select/LabelItem.d.ts +1 -1
- package/dist/components/Select/LabelItem.js +1 -1
- package/dist/components/Select/MultiValue.d.ts +1 -1
- package/dist/components/Select/MultiValue.js +1 -1
- package/dist/components/Select/SelectInfiniteScroll.d.ts +1 -1
- package/dist/components/Select/SelectInfiniteScroll.js +1 -1
- package/dist/components/Select/SelectSearch.d.ts +1 -1
- package/dist/components/Select/SelectSearch.js +1 -1
- package/dist/components/SelectionList.d.ts +1 -1
- package/dist/components/SelectionList.js +61 -61
- package/dist/components/StatusCircle.d.ts +1 -1
- package/dist/components/StatusCircle.js +6 -6
- package/dist/components/Stepper/Navigation.js +4 -4
- package/dist/components/Stepper/Step.js +3 -3
- package/dist/components/Stepper/Stepper.js +6 -6
- package/dist/components/Stepper/headers.js +22 -22
- package/dist/components/Table/HeaderItem.js +1 -1
- package/dist/components/Table/SettingsVerticalMenu.d.ts +1 -1
- package/dist/components/Table/SettingsVerticalMenu.js +1 -1
- package/dist/components/Table/StyledLinkTable.d.ts +1 -1
- package/dist/components/Table/StyledLinkTable.js +5 -5
- package/dist/components/Table/TableData.d.ts +1 -1
- package/dist/components/Table/TableData.js +25 -25
- package/dist/components/TimelineSection.d.ts +1 -1
- package/dist/components/TimelineSection.js +14 -14
- package/dist/components/error/ErrorFeedback.d.ts +1 -1
- package/dist/components/error/ErrorFeedback.js +35 -35
- package/dist/components/error/NotFound.d.ts +1 -1
- package/dist/components/error/NotFound.js +1 -1
- package/dist/components/error/UnderMaintenance.d.ts +1 -1
- package/dist/components/error/UnderMaintenance.js +1 -1
- package/dist/components/form/Form/Form.d.ts +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/FormGroup.d.ts +2 -2
- package/dist/components/form/Form/FormGroup.js +1 -1
- package/dist/components/form/SearchInput.d.ts +1 -1
- package/dist/components/form/SearchInput.js +1 -1
- package/dist/components/form/Select/CustomSelect.d.ts +1 -1
- package/dist/components/form/Select/CustomSelect.js +1 -1
- package/dist/components/form/Select/DetailedSelect.d.ts +1 -1
- package/dist/components/form/Select/DetailedSelect.js +1 -1
- package/dist/components/form/Select/Select.d.ts +1 -1
- package/dist/components/form/Select/Select.js +1 -1
- package/dist/components/form/Select/styled.js +161 -161
- package/dist/components/form/Select/utils.js +1 -1
- package/dist/components/notification/NotificationComponent.d.ts +1 -1
- package/dist/components/notification/NotificationComponent.js +54 -54
- package/dist/components/notification/NotificationItem.d.ts +1 -1
- package/dist/components/notification/NotificationItem.d.ts.map +1 -1
- package/dist/components/notification/NotificationItem.js +8 -2
- package/dist/components/notification/NotificationItem.js.map +1 -1
- package/dist/components/notification/NotificationList.d.ts +1 -1
- package/dist/components/notification/NotificationList.d.ts.map +1 -1
- package/dist/components/notification/NotificationList.js +44 -44
- package/dist/components/notification/NotificationList.js.map +1 -1
- package/dist/components/notification/NotificationPlaceholder.d.ts +1 -1
- package/dist/components/notification/NotificationPlaceholder.d.ts.map +1 -1
- package/dist/components/notification/NotificationPlaceholder.js +2 -2
- package/dist/components/notification/NotificationPlaceholder.js.map +1 -1
- package/dist/containers/NotificationsPage.d.ts +1 -1
- package/dist/containers/NotificationsPage.js +10 -10
- package/dist/context/anchor.d.ts +1 -1
- package/dist/context/anchor.js +1 -1
- package/dist/context/loading.d.ts +1 -1
- package/dist/context/loading.js +1 -1
- package/dist/context/notification/context.d.ts +1 -1
- package/dist/context/notification/context.js +1 -1
- package/dist/hooks/date.js +1 -1
- package/dist/hooks/service-now.js +28 -28
- package/dist/svg/AI.d.ts +1 -1
- package/dist/svg/AI.js +1 -1
- package/dist/svg/CS.d.ts +1 -1
- package/dist/svg/CS.js +1 -1
- package/dist/svg/EDP.d.ts +1 -1
- package/dist/svg/EDP.js +1 -1
- package/dist/svg/Forbidden.d.ts +1 -1
- package/dist/svg/Forbidden.js +1 -1
- package/dist/svg/GenericPlaceholder.d.ts +4 -2
- package/dist/svg/GenericPlaceholder.d.ts.map +1 -1
- package/dist/svg/GenericPlaceholder.js +2 -2
- package/dist/svg/GenericPlaceholder.js.map +1 -1
- package/dist/svg/HUB.d.ts +1 -1
- package/dist/svg/HUB.js +1 -1
- package/dist/svg/Logo.d.ts +1 -1
- package/dist/svg/Logo.js +1 -1
- package/dist/svg/MiniLogo.d.ts +1 -1
- package/dist/svg/MiniLogo.js +1 -1
- package/dist/svg/NotFound.d.ts +1 -1
- package/dist/svg/NotFound.js +1 -1
- package/dist/svg/ServerError.d.ts +1 -1
- package/dist/svg/ServerError.js +1 -1
- package/dist/svg/Unauthenticated.d.ts +1 -1
- package/dist/svg/Unauthenticated.js +1 -1
- package/package.json +80 -80
- package/readme.md +66 -66
- package/src/components/AnimatedHeight.tsx +174 -174
- package/src/components/AsyncContent.tsx +78 -78
- package/src/components/BannerWarning.tsx +91 -91
- package/src/components/Breadcrumb/index.tsx +76 -76
- package/src/components/Breadcrumb/styled.ts +37 -37
- package/src/components/ButtonLoading.tsx +29 -29
- package/src/components/ChatBot.tsx +82 -82
- package/src/components/ContentValidateFilter.tsx +15 -15
- package/src/components/FadingOverflow.tsx +265 -265
- package/src/components/FileTreeView/More.tsx +114 -114
- package/src/components/FileTreeView/index.tsx +186 -186
- package/src/components/InfiniteScroll.tsx +24 -24
- package/src/components/InfoMaintenanceBanner.tsx +29 -29
- package/src/components/LazyMarkdown/BlockquoteMd.tsx +107 -107
- package/src/components/LazyMarkdown/CodeViewer.tsx +161 -161
- package/src/components/LazyMarkdown/Markdown.tsx +122 -122
- package/src/components/LazyMarkdown/MarkdownButton.tsx +24 -24
- package/src/components/LazyMarkdown/Video.tsx +13 -13
- package/src/components/LazyMarkdown/index.tsx +21 -21
- package/src/components/Placeholder.tsx +123 -118
- package/src/components/ScrollView.tsx +57 -57
- package/src/components/Select/BadgeItem.tsx +58 -58
- package/src/components/Select/ClearInput.tsx +24 -24
- package/src/components/Select/CloseItem.tsx +38 -38
- package/src/components/Select/CreatableSelect.tsx +155 -155
- package/src/components/Select/CustomMenu.tsx +16 -16
- package/src/components/Select/LabelItem.tsx +8 -8
- package/src/components/Select/MultiValue.tsx +49 -49
- package/src/components/Select/SelectInfiniteScroll.tsx +82 -82
- package/src/components/Select/SelectSearch.tsx +195 -195
- package/src/components/Select/index.tsx +7 -7
- package/src/components/Select/types.ts +8 -8
- package/src/components/SelectionList.tsx +427 -427
- package/src/components/StatusCircle.tsx +67 -67
- package/src/components/Stepper/Navigation.tsx +97 -97
- package/src/components/Stepper/Step.tsx +30 -30
- package/src/components/Stepper/Stepper.tsx +113 -113
- package/src/components/Stepper/headers.tsx +64 -64
- package/src/components/Stepper/index.ts +3 -3
- package/src/components/Table/HeaderItem.tsx +52 -52
- package/src/components/Table/SettingsVerticalMenu.tsx +50 -50
- package/src/components/Table/StyledLinkTable.tsx +22 -22
- package/src/components/Table/TableData.tsx +251 -251
- package/src/components/Table/index.tsx +2 -2
- package/src/components/TimelineSection.tsx +66 -66
- package/src/components/error/ErrorFeedback.tsx +217 -217
- package/src/components/error/NotFound.tsx +24 -24
- package/src/components/error/UnderMaintenance.tsx +30 -30
- package/src/components/error/index.ts +4 -4
- package/src/components/form/Form/Form.tsx +101 -101
- package/src/components/form/Form/FormGroup.tsx +221 -221
- package/src/components/form/Form/index.ts +2 -2
- package/src/components/form/SearchInput.tsx +69 -69
- package/src/components/form/Select/CustomSelect.tsx +232 -232
- package/src/components/form/Select/DetailedSelect.tsx +85 -85
- package/src/components/form/Select/Select.tsx +67 -67
- package/src/components/form/Select/index.ts +4 -4
- package/src/components/form/Select/styled.ts +165 -165
- package/src/components/form/Select/types.ts +112 -112
- package/src/components/form/Select/utils.tsx +28 -28
- package/src/components/notification/NotificationComponent.tsx +340 -340
- package/src/components/notification/NotificationItem.tsx +345 -337
- package/src/components/notification/NotificationList.tsx +179 -178
- package/src/components/notification/NotificationPlaceholder.tsx +44 -43
- package/src/components/notification/types.ts +72 -72
- package/src/containers/NotificationsPage.tsx +119 -119
- package/src/context/anchor.tsx +37 -37
- package/src/context/loading.tsx +36 -36
- package/src/context/notification/LazyNotificationList.ts +103 -103
- package/src/context/notification/NotificationController.ts +104 -104
- package/src/context/notification/context.tsx +23 -23
- package/src/context/notification/hooks.ts +98 -98
- package/src/context/notification/types.ts +66 -66
- package/src/hooks/date.ts +31 -31
- package/src/hooks/keyboard.tsx +128 -128
- package/src/hooks/manual-render.tsx +10 -10
- package/src/hooks/service-now.tsx +233 -233
- package/src/hooks/text.tsx +30 -30
- package/src/hooks/title.tsx +28 -28
- package/src/hooks/use-effect-once.tsx +43 -43
- package/src/index.ts +19 -19
- package/src/notifications.ts +11 -11
- package/src/svg/AI.tsx +41 -41
- package/src/svg/CS.tsx +48 -48
- package/src/svg/EDP.tsx +31 -31
- package/src/svg/Forbidden.tsx +22 -22
- package/src/svg/GenericPlaceholder.tsx +20 -20
- package/src/svg/HUB.tsx +48 -48
- package/src/svg/Logo.tsx +16 -16
- package/src/svg/MiniLogo.tsx +12 -12
- package/src/svg/NotFound.tsx +16 -16
- package/src/svg/ServerError.tsx +33 -33
- package/src/svg/Unauthenticated.tsx +16 -16
- package/src/svg/index.ts +11 -11
- package/src/utils/accessibility.ts +135 -135
- package/src/utils/cookie.ts +73 -73
- package/src/utils/promise.ts +5 -5
- package/src/utils/read-file.ts +16 -16
- package/tsconfig.json +10 -10
|
@@ -1,67 +1,67 @@
|
|
|
1
|
-
import { OneOfColorSchemesWithVariants, OneOfPalettesWithVariants, Theme } from '@citric/core'
|
|
2
|
-
import { getColor } from '@citric/core/dist/utils/theme'
|
|
3
|
-
import { Tooltip } from '@citric/ui'
|
|
4
|
-
import styled from 'styled-components'
|
|
5
|
-
|
|
6
|
-
type Color = OneOfColorSchemesWithVariants | OneOfPalettesWithVariants
|
|
7
|
-
|
|
8
|
-
export type Status = 'success' | 'warning' | 'danger' | 'unknown' | 'progress'
|
|
9
|
-
|
|
10
|
-
interface Props {
|
|
11
|
-
/** The status of the component which determines its color */
|
|
12
|
-
status?: Status,
|
|
13
|
-
/** Tooltip text to be displayed on hover */
|
|
14
|
-
tooltip?: string,
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const statusToColor: Record<Status, Color> = {
|
|
18
|
-
success: 'success.500',
|
|
19
|
-
warning: 'warning.500',
|
|
20
|
-
danger: 'danger.500',
|
|
21
|
-
progress: 'secondary.500',
|
|
22
|
-
unknown: 'light.contrastText',
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Get the color corresponding to the status.
|
|
27
|
-
*
|
|
28
|
-
* @param {Theme} theme - The theme object.
|
|
29
|
-
* @param {Status} [status] - The status of the component.
|
|
30
|
-
* @returns {string} The color corresponding to the status.
|
|
31
|
-
*/
|
|
32
|
-
function getColorFromStatus(theme: Theme, status?: Status) {
|
|
33
|
-
const colorName = status && status in statusToColor ? statusToColor[status] : statusToColor.unknown
|
|
34
|
-
return getColor(theme, colorName)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
interface WithTooltip {
|
|
38
|
-
/** Tooltip text to be displayed on hover */
|
|
39
|
-
tooltip?: string,
|
|
40
|
-
/** Additional class names for the component */
|
|
41
|
-
className?: string,
|
|
42
|
-
/** Inline styles for the component */
|
|
43
|
-
style?: React.CSSProperties,
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* CircleWithTooltip component that displays a circle with an optional tooltip.
|
|
48
|
-
*
|
|
49
|
-
* @param props the component's props {@link WithTooltip}.
|
|
50
|
-
*/
|
|
51
|
-
const CircleWithTooltip = ({ tooltip, className, style }: WithTooltip) => {
|
|
52
|
-
const circle = <div style={style} className={className}></div>
|
|
53
|
-
return tooltip && tooltip.length ? <Tooltip text={tooltip}>{circle}</Tooltip> : circle
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Renders a component that displays a colored circle based on the status.
|
|
58
|
-
* It also supports an optional tooltip.
|
|
59
|
-
*
|
|
60
|
-
* @param props the component's props {@link Props}.
|
|
61
|
-
*/
|
|
62
|
-
export const StatusCircle = styled(CircleWithTooltip)<Props>`
|
|
63
|
-
background-color: ${({ status, theme }) => getColorFromStatus(theme as any, status)};
|
|
64
|
-
width: 12px;
|
|
65
|
-
height: 12px;
|
|
66
|
-
border-radius: 50%;
|
|
67
|
-
`
|
|
1
|
+
import { OneOfColorSchemesWithVariants, OneOfPalettesWithVariants, Theme } from '@citric/core'
|
|
2
|
+
import { getColor } from '@citric/core/dist/utils/theme'
|
|
3
|
+
import { Tooltip } from '@citric/ui'
|
|
4
|
+
import styled from 'styled-components'
|
|
5
|
+
|
|
6
|
+
type Color = OneOfColorSchemesWithVariants | OneOfPalettesWithVariants
|
|
7
|
+
|
|
8
|
+
export type Status = 'success' | 'warning' | 'danger' | 'unknown' | 'progress'
|
|
9
|
+
|
|
10
|
+
interface Props {
|
|
11
|
+
/** The status of the component which determines its color */
|
|
12
|
+
status?: Status,
|
|
13
|
+
/** Tooltip text to be displayed on hover */
|
|
14
|
+
tooltip?: string,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const statusToColor: Record<Status, Color> = {
|
|
18
|
+
success: 'success.500',
|
|
19
|
+
warning: 'warning.500',
|
|
20
|
+
danger: 'danger.500',
|
|
21
|
+
progress: 'secondary.500',
|
|
22
|
+
unknown: 'light.contrastText',
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get the color corresponding to the status.
|
|
27
|
+
*
|
|
28
|
+
* @param {Theme} theme - The theme object.
|
|
29
|
+
* @param {Status} [status] - The status of the component.
|
|
30
|
+
* @returns {string} The color corresponding to the status.
|
|
31
|
+
*/
|
|
32
|
+
function getColorFromStatus(theme: Theme, status?: Status) {
|
|
33
|
+
const colorName = status && status in statusToColor ? statusToColor[status] : statusToColor.unknown
|
|
34
|
+
return getColor(theme, colorName)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
interface WithTooltip {
|
|
38
|
+
/** Tooltip text to be displayed on hover */
|
|
39
|
+
tooltip?: string,
|
|
40
|
+
/** Additional class names for the component */
|
|
41
|
+
className?: string,
|
|
42
|
+
/** Inline styles for the component */
|
|
43
|
+
style?: React.CSSProperties,
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* CircleWithTooltip component that displays a circle with an optional tooltip.
|
|
48
|
+
*
|
|
49
|
+
* @param props the component's props {@link WithTooltip}.
|
|
50
|
+
*/
|
|
51
|
+
const CircleWithTooltip = ({ tooltip, className, style }: WithTooltip) => {
|
|
52
|
+
const circle = <div style={style} className={className}></div>
|
|
53
|
+
return tooltip && tooltip.length ? <Tooltip text={tooltip}>{circle}</Tooltip> : circle
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Renders a component that displays a colored circle based on the status.
|
|
58
|
+
* It also supports an optional tooltip.
|
|
59
|
+
*
|
|
60
|
+
* @param props the component's props {@link Props}.
|
|
61
|
+
*/
|
|
62
|
+
export const StatusCircle = styled(CircleWithTooltip)<Props>`
|
|
63
|
+
background-color: ${({ status, theme }) => getColorFromStatus(theme as any, status)};
|
|
64
|
+
width: 12px;
|
|
65
|
+
height: 12px;
|
|
66
|
+
border-radius: 50%;
|
|
67
|
+
`
|
|
@@ -1,97 +1,97 @@
|
|
|
1
|
-
import { Button, Flex, Text } from '@citric/core'
|
|
2
|
-
import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
|
|
3
|
-
import { FC, useContext } from 'react'
|
|
4
|
-
import { styled } from 'styled-components'
|
|
5
|
-
import { ButtonProps } from '@citric/core/dist/Button'
|
|
6
|
-
import { useLoadingComponent } from '../../context/loading'
|
|
7
|
-
import { StepperContext } from './Stepper'
|
|
8
|
-
|
|
9
|
-
export interface StepperNavigationProps extends ButtonProps{
|
|
10
|
-
/**
|
|
11
|
-
* Prop used to pass specific text to the next button.
|
|
12
|
-
*/
|
|
13
|
-
nextButtonText?: string,
|
|
14
|
-
/**
|
|
15
|
-
* Function that is rendered when pressing the skip button.
|
|
16
|
-
*/
|
|
17
|
-
onSkip?: () => void,
|
|
18
|
-
/**
|
|
19
|
-
* Boolean that is used as a conditional to appear the skip button.
|
|
20
|
-
*/
|
|
21
|
-
canSkip?: boolean,
|
|
22
|
-
/**
|
|
23
|
-
* Boolean that is used as a conditional to appear the loading icon in next button.
|
|
24
|
-
*/
|
|
25
|
-
isLoading?: boolean,
|
|
26
|
-
/**
|
|
27
|
-
* Function that is rendered when pressing the back button.
|
|
28
|
-
*/
|
|
29
|
-
onGoBack?: () => void,
|
|
30
|
-
/**
|
|
31
|
-
* Function that is rendered when pressing the next button.
|
|
32
|
-
*/
|
|
33
|
-
onSubmit?: () => void,
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const Wrapper = styled(Flex)`
|
|
37
|
-
width: 100%;
|
|
38
|
-
justify-content: space-between;
|
|
39
|
-
`
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Renders a component that represents the stepper component's navigation buttons, containing the button options (back, skip, and next).
|
|
43
|
-
*
|
|
44
|
-
* The component stepper wraps this component.
|
|
45
|
-
*/
|
|
46
|
-
|
|
47
|
-
export const StepperNavigation: FC<Omit<StepperNavigationProps, 'children'>> = (
|
|
48
|
-
{ nextButtonText, onSkip, onGoBack, canSkip = false, isLoading, disabled, onSubmit }) => {
|
|
49
|
-
const t = useTranslate(dictionary)
|
|
50
|
-
const { goToNextStep, goToPreviousStep } = useContext(StepperContext)
|
|
51
|
-
const Loading = useLoadingComponent()
|
|
52
|
-
|
|
53
|
-
return (
|
|
54
|
-
<Wrapper>
|
|
55
|
-
<Button
|
|
56
|
-
appearance="contained"
|
|
57
|
-
colorScheme="inverse"
|
|
58
|
-
onClick={() => {
|
|
59
|
-
onGoBack && onGoBack()
|
|
60
|
-
goToPreviousStep()
|
|
61
|
-
}}
|
|
62
|
-
>
|
|
63
|
-
{t.back}
|
|
64
|
-
</Button>
|
|
65
|
-
<Flex>
|
|
66
|
-
{canSkip && (
|
|
67
|
-
<Button
|
|
68
|
-
appearance="text"
|
|
69
|
-
colorScheme="inverse"
|
|
70
|
-
onClick={() => {
|
|
71
|
-
onSkip && onSkip()
|
|
72
|
-
goToNextStep()
|
|
73
|
-
}}
|
|
74
|
-
>
|
|
75
|
-
{t.skip}
|
|
76
|
-
</Button>
|
|
77
|
-
)}
|
|
78
|
-
<Button type="submit" onClick={onSubmit} sx={{ position: 'relative' }} disabled={isLoading || disabled}>
|
|
79
|
-
<Text as="span" sx={{ visibility: isLoading ? 'hidden' : 'visible' }}>{nextButtonText ?? t.next}</Text>
|
|
80
|
-
{isLoading && Loading}
|
|
81
|
-
</Button>
|
|
82
|
-
</Flex>
|
|
83
|
-
</Wrapper>
|
|
84
|
-
)}
|
|
85
|
-
|
|
86
|
-
const dictionary = {
|
|
87
|
-
en: {
|
|
88
|
-
back: 'Back',
|
|
89
|
-
skip: 'Skip',
|
|
90
|
-
next: 'Next',
|
|
91
|
-
},
|
|
92
|
-
pt: {
|
|
93
|
-
back: 'Voltar',
|
|
94
|
-
skip: 'Pular',
|
|
95
|
-
next: 'Próximo',
|
|
96
|
-
},
|
|
97
|
-
} satisfies Dictionary
|
|
1
|
+
import { Button, Flex, Text } from '@citric/core'
|
|
2
|
+
import { Dictionary, useTranslate } from '@stack-spot/portal-translate'
|
|
3
|
+
import { FC, useContext } from 'react'
|
|
4
|
+
import { styled } from 'styled-components'
|
|
5
|
+
import { ButtonProps } from '@citric/core/dist/Button'
|
|
6
|
+
import { useLoadingComponent } from '../../context/loading'
|
|
7
|
+
import { StepperContext } from './Stepper'
|
|
8
|
+
|
|
9
|
+
export interface StepperNavigationProps extends ButtonProps{
|
|
10
|
+
/**
|
|
11
|
+
* Prop used to pass specific text to the next button.
|
|
12
|
+
*/
|
|
13
|
+
nextButtonText?: string,
|
|
14
|
+
/**
|
|
15
|
+
* Function that is rendered when pressing the skip button.
|
|
16
|
+
*/
|
|
17
|
+
onSkip?: () => void,
|
|
18
|
+
/**
|
|
19
|
+
* Boolean that is used as a conditional to appear the skip button.
|
|
20
|
+
*/
|
|
21
|
+
canSkip?: boolean,
|
|
22
|
+
/**
|
|
23
|
+
* Boolean that is used as a conditional to appear the loading icon in next button.
|
|
24
|
+
*/
|
|
25
|
+
isLoading?: boolean,
|
|
26
|
+
/**
|
|
27
|
+
* Function that is rendered when pressing the back button.
|
|
28
|
+
*/
|
|
29
|
+
onGoBack?: () => void,
|
|
30
|
+
/**
|
|
31
|
+
* Function that is rendered when pressing the next button.
|
|
32
|
+
*/
|
|
33
|
+
onSubmit?: () => void,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const Wrapper = styled(Flex)`
|
|
37
|
+
width: 100%;
|
|
38
|
+
justify-content: space-between;
|
|
39
|
+
`
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Renders a component that represents the stepper component's navigation buttons, containing the button options (back, skip, and next).
|
|
43
|
+
*
|
|
44
|
+
* The component stepper wraps this component.
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
export const StepperNavigation: FC<Omit<StepperNavigationProps, 'children'>> = (
|
|
48
|
+
{ nextButtonText, onSkip, onGoBack, canSkip = false, isLoading, disabled, onSubmit }) => {
|
|
49
|
+
const t = useTranslate(dictionary)
|
|
50
|
+
const { goToNextStep, goToPreviousStep } = useContext(StepperContext)
|
|
51
|
+
const Loading = useLoadingComponent()
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<Wrapper>
|
|
55
|
+
<Button
|
|
56
|
+
appearance="contained"
|
|
57
|
+
colorScheme="inverse"
|
|
58
|
+
onClick={() => {
|
|
59
|
+
onGoBack && onGoBack()
|
|
60
|
+
goToPreviousStep()
|
|
61
|
+
}}
|
|
62
|
+
>
|
|
63
|
+
{t.back}
|
|
64
|
+
</Button>
|
|
65
|
+
<Flex>
|
|
66
|
+
{canSkip && (
|
|
67
|
+
<Button
|
|
68
|
+
appearance="text"
|
|
69
|
+
colorScheme="inverse"
|
|
70
|
+
onClick={() => {
|
|
71
|
+
onSkip && onSkip()
|
|
72
|
+
goToNextStep()
|
|
73
|
+
}}
|
|
74
|
+
>
|
|
75
|
+
{t.skip}
|
|
76
|
+
</Button>
|
|
77
|
+
)}
|
|
78
|
+
<Button type="submit" onClick={onSubmit} sx={{ position: 'relative' }} disabled={isLoading || disabled}>
|
|
79
|
+
<Text as="span" sx={{ visibility: isLoading ? 'hidden' : 'visible' }}>{nextButtonText ?? t.next}</Text>
|
|
80
|
+
{isLoading && Loading}
|
|
81
|
+
</Button>
|
|
82
|
+
</Flex>
|
|
83
|
+
</Wrapper>
|
|
84
|
+
)}
|
|
85
|
+
|
|
86
|
+
const dictionary = {
|
|
87
|
+
en: {
|
|
88
|
+
back: 'Back',
|
|
89
|
+
skip: 'Skip',
|
|
90
|
+
next: 'Next',
|
|
91
|
+
},
|
|
92
|
+
pt: {
|
|
93
|
+
back: 'Voltar',
|
|
94
|
+
skip: 'Pular',
|
|
95
|
+
next: 'Próximo',
|
|
96
|
+
},
|
|
97
|
+
} satisfies Dictionary
|
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import { Box } from '@citric/core'
|
|
2
|
-
import { FC, PropsWithChildren } from 'react'
|
|
3
|
-
import { styled } from 'styled-components'
|
|
4
|
-
|
|
5
|
-
export interface StepProps extends PropsWithChildren {
|
|
6
|
-
/**
|
|
7
|
-
* Name given to the step.
|
|
8
|
-
*/
|
|
9
|
-
name: string,
|
|
10
|
-
/**
|
|
11
|
-
* Title given to the step.
|
|
12
|
-
*/
|
|
13
|
-
title: string,
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const Wrapper = styled(Box)`
|
|
17
|
-
width: 100%;
|
|
18
|
-
`
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Renders a component that represents the body of a step within the stepper component.
|
|
22
|
-
*
|
|
23
|
-
* The component stepper wraps this component.
|
|
24
|
-
*/
|
|
25
|
-
|
|
26
|
-
export const Step: FC<StepProps> = ({ children }) => (
|
|
27
|
-
<Wrapper>
|
|
28
|
-
{children}
|
|
29
|
-
</Wrapper>
|
|
30
|
-
)
|
|
1
|
+
import { Box } from '@citric/core'
|
|
2
|
+
import { FC, PropsWithChildren } from 'react'
|
|
3
|
+
import { styled } from 'styled-components'
|
|
4
|
+
|
|
5
|
+
export interface StepProps extends PropsWithChildren {
|
|
6
|
+
/**
|
|
7
|
+
* Name given to the step.
|
|
8
|
+
*/
|
|
9
|
+
name: string,
|
|
10
|
+
/**
|
|
11
|
+
* Title given to the step.
|
|
12
|
+
*/
|
|
13
|
+
title: string,
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const Wrapper = styled(Box)`
|
|
17
|
+
width: 100%;
|
|
18
|
+
`
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Renders a component that represents the body of a step within the stepper component.
|
|
22
|
+
*
|
|
23
|
+
* The component stepper wraps this component.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
export const Step: FC<StepProps> = ({ children }) => (
|
|
27
|
+
<Wrapper>
|
|
28
|
+
{children}
|
|
29
|
+
</Wrapper>
|
|
30
|
+
)
|
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
import { Box, Flex } from '@citric/core'
|
|
2
|
-
import { FC, ReactElement, createContext, useState } from 'react'
|
|
3
|
-
import { styled } from 'styled-components'
|
|
4
|
-
import { StepperHeaders } from './headers'
|
|
5
|
-
import { StepProps } from './Step'
|
|
6
|
-
|
|
7
|
-
export interface StepperContextProps {
|
|
8
|
-
/**
|
|
9
|
-
* Informs the index of the active step.
|
|
10
|
-
*/
|
|
11
|
-
activeIndex: number,
|
|
12
|
-
/**
|
|
13
|
-
* Informs data for all steps.
|
|
14
|
-
* @default 0
|
|
15
|
-
*/
|
|
16
|
-
stepsData: Record<string, any>,
|
|
17
|
-
/**
|
|
18
|
-
* Saves data for a given steps.
|
|
19
|
-
*/
|
|
20
|
-
setStepData: (name: string, data: any) => void,
|
|
21
|
-
/**
|
|
22
|
-
* Takes data from a given step.
|
|
23
|
-
*/
|
|
24
|
-
getStepData: (name: string) => any | null | undefined,
|
|
25
|
-
/**
|
|
26
|
-
* Navigate to the next step.
|
|
27
|
-
*/
|
|
28
|
-
goToNextStep: () => void,
|
|
29
|
-
/**
|
|
30
|
-
* Navigate to the previous step.
|
|
31
|
-
*/
|
|
32
|
-
goToPreviousStep: () => void,
|
|
33
|
-
/**
|
|
34
|
-
* Navigate to the provided step.
|
|
35
|
-
*/
|
|
36
|
-
goToStep: (step: number) => void,
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const StepperContext = createContext<StepperContextProps>({
|
|
40
|
-
activeIndex: 0,
|
|
41
|
-
stepsData: {},
|
|
42
|
-
setStepData: () => {},
|
|
43
|
-
getStepData: () => {},
|
|
44
|
-
goToNextStep: () => {},
|
|
45
|
-
goToPreviousStep: () => {},
|
|
46
|
-
goToStep: () => {},
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
export interface StepperProps {
|
|
50
|
-
children: ReactElement<StepProps>[],
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const Wrapper = styled(Box)`
|
|
54
|
-
width: 100%;
|
|
55
|
-
gap: 1.5rem;
|
|
56
|
-
`
|
|
57
|
-
|
|
58
|
-
const ContentWrapper = styled(Flex)`
|
|
59
|
-
width: 100%;
|
|
60
|
-
`
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Renders a component that provides an interface of steps for creating some content.
|
|
64
|
-
*
|
|
65
|
-
* The component wraps the Step component.
|
|
66
|
-
*/
|
|
67
|
-
|
|
68
|
-
const Stepper: FC<StepperProps> = ({ children }) => {
|
|
69
|
-
const [activeIndex, setActiveIndex] = useState<number>(0)
|
|
70
|
-
const [stepsData, setStepsData] = useState<Record<string, any>>({})
|
|
71
|
-
const headers = children.map((child) => ({ title: child.props.title }))
|
|
72
|
-
|
|
73
|
-
const setStepData = (name: string, data: any) => {
|
|
74
|
-
setStepsData({ ...stepsData, ...{ [name]: data } })
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
const getStepData = (name: string) => stepsData[name]
|
|
78
|
-
|
|
79
|
-
const setNextStep = () => {
|
|
80
|
-
if (activeIndex < (children.length - 1)) {
|
|
81
|
-
setActiveIndex(activeIndex + 1)
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const setPreviousStep = () => {
|
|
86
|
-
if (activeIndex > 0) {
|
|
87
|
-
setActiveIndex(activeIndex - 1)
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const contextValue: StepperContextProps = {
|
|
92
|
-
activeIndex,
|
|
93
|
-
stepsData,
|
|
94
|
-
setStepData,
|
|
95
|
-
getStepData,
|
|
96
|
-
goToNextStep: setNextStep,
|
|
97
|
-
goToPreviousStep: setPreviousStep,
|
|
98
|
-
goToStep: setActiveIndex,
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
return (
|
|
102
|
-
<StepperContext.Provider value={contextValue}>
|
|
103
|
-
<Wrapper>
|
|
104
|
-
<StepperHeaders {...{ headers }} />
|
|
105
|
-
<ContentWrapper>
|
|
106
|
-
{children[activeIndex]}
|
|
107
|
-
</ContentWrapper>
|
|
108
|
-
</Wrapper>
|
|
109
|
-
</StepperContext.Provider>
|
|
110
|
-
)
|
|
111
|
-
}
|
|
112
|
-
export { StepperContext, Stepper }
|
|
113
|
-
|
|
1
|
+
import { Box, Flex } from '@citric/core'
|
|
2
|
+
import { FC, ReactElement, createContext, useState } from 'react'
|
|
3
|
+
import { styled } from 'styled-components'
|
|
4
|
+
import { StepperHeaders } from './headers'
|
|
5
|
+
import { StepProps } from './Step'
|
|
6
|
+
|
|
7
|
+
export interface StepperContextProps {
|
|
8
|
+
/**
|
|
9
|
+
* Informs the index of the active step.
|
|
10
|
+
*/
|
|
11
|
+
activeIndex: number,
|
|
12
|
+
/**
|
|
13
|
+
* Informs data for all steps.
|
|
14
|
+
* @default 0
|
|
15
|
+
*/
|
|
16
|
+
stepsData: Record<string, any>,
|
|
17
|
+
/**
|
|
18
|
+
* Saves data for a given steps.
|
|
19
|
+
*/
|
|
20
|
+
setStepData: (name: string, data: any) => void,
|
|
21
|
+
/**
|
|
22
|
+
* Takes data from a given step.
|
|
23
|
+
*/
|
|
24
|
+
getStepData: (name: string) => any | null | undefined,
|
|
25
|
+
/**
|
|
26
|
+
* Navigate to the next step.
|
|
27
|
+
*/
|
|
28
|
+
goToNextStep: () => void,
|
|
29
|
+
/**
|
|
30
|
+
* Navigate to the previous step.
|
|
31
|
+
*/
|
|
32
|
+
goToPreviousStep: () => void,
|
|
33
|
+
/**
|
|
34
|
+
* Navigate to the provided step.
|
|
35
|
+
*/
|
|
36
|
+
goToStep: (step: number) => void,
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const StepperContext = createContext<StepperContextProps>({
|
|
40
|
+
activeIndex: 0,
|
|
41
|
+
stepsData: {},
|
|
42
|
+
setStepData: () => {},
|
|
43
|
+
getStepData: () => {},
|
|
44
|
+
goToNextStep: () => {},
|
|
45
|
+
goToPreviousStep: () => {},
|
|
46
|
+
goToStep: () => {},
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
export interface StepperProps {
|
|
50
|
+
children: ReactElement<StepProps>[],
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const Wrapper = styled(Box)`
|
|
54
|
+
width: 100%;
|
|
55
|
+
gap: 1.5rem;
|
|
56
|
+
`
|
|
57
|
+
|
|
58
|
+
const ContentWrapper = styled(Flex)`
|
|
59
|
+
width: 100%;
|
|
60
|
+
`
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Renders a component that provides an interface of steps for creating some content.
|
|
64
|
+
*
|
|
65
|
+
* The component wraps the Step component.
|
|
66
|
+
*/
|
|
67
|
+
|
|
68
|
+
const Stepper: FC<StepperProps> = ({ children }) => {
|
|
69
|
+
const [activeIndex, setActiveIndex] = useState<number>(0)
|
|
70
|
+
const [stepsData, setStepsData] = useState<Record<string, any>>({})
|
|
71
|
+
const headers = children.map((child) => ({ title: child.props.title }))
|
|
72
|
+
|
|
73
|
+
const setStepData = (name: string, data: any) => {
|
|
74
|
+
setStepsData({ ...stepsData, ...{ [name]: data } })
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const getStepData = (name: string) => stepsData[name]
|
|
78
|
+
|
|
79
|
+
const setNextStep = () => {
|
|
80
|
+
if (activeIndex < (children.length - 1)) {
|
|
81
|
+
setActiveIndex(activeIndex + 1)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const setPreviousStep = () => {
|
|
86
|
+
if (activeIndex > 0) {
|
|
87
|
+
setActiveIndex(activeIndex - 1)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const contextValue: StepperContextProps = {
|
|
92
|
+
activeIndex,
|
|
93
|
+
stepsData,
|
|
94
|
+
setStepData,
|
|
95
|
+
getStepData,
|
|
96
|
+
goToNextStep: setNextStep,
|
|
97
|
+
goToPreviousStep: setPreviousStep,
|
|
98
|
+
goToStep: setActiveIndex,
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return (
|
|
102
|
+
<StepperContext.Provider value={contextValue}>
|
|
103
|
+
<Wrapper>
|
|
104
|
+
<StepperHeaders {...{ headers }} />
|
|
105
|
+
<ContentWrapper>
|
|
106
|
+
{children[activeIndex]}
|
|
107
|
+
</ContentWrapper>
|
|
108
|
+
</Wrapper>
|
|
109
|
+
</StepperContext.Provider>
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
export { StepperContext, Stepper }
|
|
113
|
+
|