diff --git a/apps/builder/components/analytics/StatsCards.tsx b/apps/builder/components/analytics/StatsCards.tsx
index f77a3a6c8d..feeb5ca3e7 100644
--- a/apps/builder/components/analytics/StatsCards.tsx
+++ b/apps/builder/components/analytics/StatsCards.tsx
@@ -6,7 +6,7 @@ import {
StatLabel,
StatNumber,
} from '@chakra-ui/react'
-import { Stats } from 'bot-engine'
+import { Stats } from 'models'
import React from 'react'
export const StatsCards = ({
diff --git a/apps/builder/components/analytics/graph/AnalyticsGraph.tsx b/apps/builder/components/analytics/graph/AnalyticsGraph.tsx
index cd7fb57af1..7b52a6cc53 100644
--- a/apps/builder/components/analytics/graph/AnalyticsGraph.tsx
+++ b/apps/builder/components/analytics/graph/AnalyticsGraph.tsx
@@ -3,7 +3,6 @@ import { useAnalyticsGraph } from 'contexts/AnalyticsGraphProvider'
import React, { useMemo, useRef } from 'react'
import { AnswersCount } from 'services/analytics'
import { BlockNode } from './blocks/BlockNode'
-import { StartBlockNode } from './blocks/StartBlockNode'
import { Edges } from './Edges'
const AnalyticsGraph = ({
@@ -49,9 +48,8 @@ const AnalyticsGraph = ({
}}
>
- {typebot.startBlock && }
- {(typebot.blocks ?? []).map((block) => (
-
+ {typebot.blocks.allIds.map((blockId) => (
+
))}
diff --git a/apps/builder/components/analytics/graph/Edges/DropOffEdge.tsx b/apps/builder/components/analytics/graph/Edges/DropOffEdge.tsx
index 7bb7459fb8..430568d4aa 100644
--- a/apps/builder/components/analytics/graph/Edges/DropOffEdge.tsx
+++ b/apps/builder/components/analytics/graph/Edges/DropOffEdge.tsx
@@ -7,11 +7,12 @@ type Props = {
}
export const DropOffEdge = ({ blockId }: Props) => {
const { typebot } = useAnalyticsGraph()
+
const path = useMemo(() => {
if (!typebot) return
- const block = (typebot?.blocks ?? []).find((b) => b.id === blockId)
+ const block = typebot.blocks.byId[blockId]
if (!block) return ''
- return computeDropOffPath(block.graphCoordinates, block.steps.length - 1)
+ return computeDropOffPath(block.graphCoordinates, block.stepIds.length - 1)
}, [blockId, typebot])
return
diff --git a/apps/builder/components/analytics/graph/Edges/Edge.tsx b/apps/builder/components/analytics/graph/Edges/Edge.tsx
index a8e0f98677..8567eac729 100644
--- a/apps/builder/components/analytics/graph/Edges/Edge.tsx
+++ b/apps/builder/components/analytics/graph/Edges/Edge.tsx
@@ -1,5 +1,3 @@
-import { Block } from 'bot-engine'
-import { StepWithTarget } from 'components/board/graph/Edges/Edge'
import { useAnalyticsGraph } from 'contexts/AnalyticsGraphProvider'
import React, { useMemo } from 'react'
import {
@@ -7,42 +5,37 @@ import {
computeFlowChartConnectorPath,
} from 'services/graph'
-export const Edge = ({ step }: { step: StepWithTarget }) => {
+type Props = { stepId: string }
+
+export const Edge = ({ stepId }: Props) => {
const { typebot } = useAnalyticsGraph()
- const { blocks, startBlock } = typebot ?? {}
const { sourceBlock, targetBlock, targetStepIndex } = useMemo(() => {
- const targetBlock = blocks?.find(
- (b) => b?.id === step.target.blockId
- ) as Block
+ if (!typebot) return {}
+ const step = typebot.steps.byId[stepId]
+ if (!step.target) return {}
+ const targetBlock = typebot.blocks.byId[step.target.blockId]
const targetStepIndex = step.target.stepId
- ? targetBlock.steps.findIndex((s) => s.id === step.target.stepId)
+ ? targetBlock.stepIds.indexOf(step.target.stepId)
: undefined
+ const sourceBlock = typebot.blocks.byId[step.blockId]
return {
- sourceBlock: [startBlock, ...(blocks ?? [])].find(
- (b) => b?.id === step.blockId
- ),
+ sourceBlock,
targetBlock,
targetStepIndex,
}
- }, [
- blocks,
- startBlock,
- step.blockId,
- step.target.blockId,
- step.target.stepId,
- ])
+ }, [stepId, typebot])
const path = useMemo(() => {
if (!sourceBlock || !targetBlock) return ``
const anchorsPosition = getAnchorsPosition(
sourceBlock,
targetBlock,
- sourceBlock.steps.findIndex((s) => s.id === step.id),
+ sourceBlock.stepIds.indexOf(stepId),
targetStepIndex
)
return computeFlowChartConnectorPath(anchorsPosition)
- }, [sourceBlock, step.id, targetBlock, targetStepIndex])
+ }, [sourceBlock, stepId, targetBlock, targetStepIndex])
return (
{
const { typebot } = useAnalyticsGraph()
- const { blocks, startBlock } = typebot ?? {}
- const stepsWithTarget: StepWithTarget[] = useMemo(() => {
- if (!startBlock) return []
- return [
- ...(startBlock.steps.filter((s) => s.target) as StepWithTarget[]),
- ...((blocks ?? [])
- .flatMap((b) => b.steps)
- .filter((s) => s.target) as StepWithTarget[]),
- ]
- }, [blocks, startBlock])
+
+ const stepIdsWithTarget: string[] = useMemo(() => {
+ if (!typebot) return []
+ return typebot.steps.allIds.filter((stepId) =>
+ isDefined(typebot.steps.byId[stepId].target)
+ )
+ }, [typebot])
return (
<>
@@ -32,8 +29,8 @@ export const Edges = ({ answersCounts }: Props) => {
left="0"
top="0"
>
- {stepsWithTarget.map((step) => (
-
+ {stepIdsWithTarget.map((stepId) => (
+
))}
{
-
+
)
}
diff --git a/apps/builder/components/analytics/graph/blocks/DropOffBlock.tsx b/apps/builder/components/analytics/graph/blocks/DropOffBlock.tsx
index e791091875..ca5665d548 100644
--- a/apps/builder/components/analytics/graph/blocks/DropOffBlock.tsx
+++ b/apps/builder/components/analytics/graph/blocks/DropOffBlock.tsx
@@ -1,5 +1,4 @@
import { Tag, Text, VStack } from '@chakra-ui/react'
-import { Block } from 'bot-engine'
import { useAnalyticsGraph } from 'contexts/AnalyticsGraphProvider'
import React, { useMemo } from 'react'
import { AnswersCount } from 'services/analytics'
@@ -21,13 +20,13 @@ export const DropOffBlock = ({ answersCounts, blockId }: Props) => {
const { totalDroppedUser, dropOffRate } = useMemo(() => {
if (!typebot || totalAnswers === undefined)
return { previousTotal: undefined, dropOffRate: undefined }
- const previousTotal = answersCounts
- .filter(
- (a) =>
- [typebot.startBlock, ...typebot.blocks].find((b) =>
- (b as Block).steps.find((s) => s.target?.blockId === blockId)
- )?.id === a.blockId
+ const previousBlockIds = typebot.blocks.allIds.filter(() =>
+ typebot.steps.allIds.find(
+ (sId) => typebot.steps.byId[sId].target?.blockId === blockId
)
+ )
+ const previousTotal = answersCounts
+ .filter((a) => previousBlockIds.includes(a.blockId))
.reduce((prev, acc) => acc.totalAnswers + prev, 0)
if (previousTotal === 0)
return { previousTotal: undefined, dropOffRate: undefined }
@@ -41,11 +40,11 @@ export const DropOffBlock = ({ answersCounts, blockId }: Props) => {
const labelCoordinates = useMemo(() => {
if (!typebot) return { x: 0, y: 0 }
- const sourceBlock = typebot?.blocks.find((b) => b.id === blockId)
+ const sourceBlock = typebot?.blocks.byId[blockId]
if (!sourceBlock) return
return computeSourceCoordinates(
sourceBlock?.graphCoordinates,
- sourceBlock?.steps.length - 1
+ sourceBlock?.stepIds.length - 1
)
}, [blockId, typebot])
diff --git a/apps/builder/components/analytics/graph/blocks/StartBlockNode.tsx b/apps/builder/components/analytics/graph/blocks/StartBlockNode.tsx
deleted file mode 100644
index c00619085c..0000000000
--- a/apps/builder/components/analytics/graph/blocks/StartBlockNode.tsx
+++ /dev/null
@@ -1,62 +0,0 @@
-import {
- Editable,
- EditableInput,
- EditablePreview,
- Stack,
- useEventListener,
-} from '@chakra-ui/react'
-import React, { useState } from 'react'
-import { StartBlock } from 'bot-engine'
-import { useAnalyticsGraph } from 'contexts/AnalyticsGraphProvider'
-import { StepsList } from './StepsList'
-
-type Props = {
- block: StartBlock
-}
-
-export const StartBlockNode = ({ block }: Props) => {
- const { updateBlockPosition } = useAnalyticsGraph()
- const [isMouseDown, setIsMouseDown] = useState(false)
-
- const handleMouseDown = () => {
- setIsMouseDown(true)
- }
- const handleMouseUp = () => {
- setIsMouseDown(false)
- }
-
- const handleMouseMove = (event: MouseEvent) => {
- if (!isMouseDown) return
- const { movementX, movementY } = event
-
- updateBlockPosition(block.id, {
- x: block.graphCoordinates.x + movementX,
- y: block.graphCoordinates.y + movementY,
- })
- }
-
- useEventListener('mousemove', handleMouseMove)
-
- return (
-
-
-
-
-
-
-
- )
-}
diff --git a/apps/builder/components/analytics/graph/blocks/StepsList.tsx b/apps/builder/components/analytics/graph/blocks/StepsList.tsx
index 3a0eb180f1..30e094253f 100644
--- a/apps/builder/components/analytics/graph/blocks/StepsList.tsx
+++ b/apps/builder/components/analytics/graph/blocks/StepsList.tsx
@@ -1,27 +1,24 @@
import { Flex, Stack } from '@chakra-ui/react'
-import { StartStep, Step } from 'bot-engine'
import { StepNodeOverlay } from 'components/board/graph/BlockNode/StepNode'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
-export const StepsList = ({
- steps,
-}: {
- blockId: string
- steps: Step[] | [StartStep]
-}) => {
+export const StepsList = ({ stepIds }: { stepIds: string[] }) => {
+ const { typebot } = useTypebot()
return (
- {steps.map((step) => (
-
-
-
-
- ))}
+ {typebot &&
+ stepIds.map((stepId) => (
+
+
+
+
+ ))}
)
}
diff --git a/apps/builder/components/board/StepTypesList/StepCard.tsx b/apps/builder/components/board/StepTypesList/StepCard.tsx
index e5274fdf9d..8d32cc8c22 100644
--- a/apps/builder/components/board/StepTypesList/StepCard.tsx
+++ b/apps/builder/components/board/StepTypesList/StepCard.tsx
@@ -1,5 +1,5 @@
import { Button, ButtonProps, Flex, HStack } from '@chakra-ui/react'
-import { StepType } from 'bot-engine'
+import { StepType } from 'models'
import { useDnd } from 'contexts/DndContext'
import React, { useEffect, useState } from 'react'
import { StepIcon } from './StepIcon'
diff --git a/apps/builder/components/board/StepTypesList/StepIcon.tsx b/apps/builder/components/board/StepTypesList/StepIcon.tsx
index 90d30ce37b..8ae8f3db01 100644
--- a/apps/builder/components/board/StepTypesList/StepIcon.tsx
+++ b/apps/builder/components/board/StepTypesList/StepIcon.tsx
@@ -1,5 +1,5 @@
import { ChatIcon, FlagIcon, TextIcon } from 'assets/icons'
-import { StepType } from 'bot-engine'
+import { StepType } from 'models'
import React from 'react'
type StepIconProps = { type: StepType }
diff --git a/apps/builder/components/board/StepTypesList/StepLabel.tsx b/apps/builder/components/board/StepTypesList/StepLabel.tsx
index 8679fc56c7..4be13c6781 100644
--- a/apps/builder/components/board/StepTypesList/StepLabel.tsx
+++ b/apps/builder/components/board/StepTypesList/StepLabel.tsx
@@ -1,5 +1,5 @@
import { Text } from '@chakra-ui/react'
-import { StepType } from 'bot-engine'
+import { StepType } from 'models'
import React from 'react'
type Props = { type: StepType }
diff --git a/apps/builder/components/board/StepTypesList/StepTypesList.tsx b/apps/builder/components/board/StepTypesList/StepTypesList.tsx
index ea9ab7606c..cdf654483a 100644
--- a/apps/builder/components/board/StepTypesList/StepTypesList.tsx
+++ b/apps/builder/components/board/StepTypesList/StepTypesList.tsx
@@ -5,7 +5,7 @@ import {
SimpleGrid,
useEventListener,
} from '@chakra-ui/react'
-import { StepType } from 'bot-engine'
+import { StepType } from 'models'
import { useDnd } from 'contexts/DndContext'
import React, { useState } from 'react'
import { StepCard, StepCardOverlay } from './StepCard'
diff --git a/apps/builder/components/board/graph/BlockNode/BlockNode.tsx b/apps/builder/components/board/graph/BlockNode/BlockNode.tsx
index 81164e7381..c80ff6822b 100644
--- a/apps/builder/components/board/graph/BlockNode/BlockNode.tsx
+++ b/apps/builder/components/board/graph/BlockNode/BlockNode.tsx
@@ -6,12 +6,12 @@ import {
useEventListener,
} from '@chakra-ui/react'
import React, { useEffect, useMemo, useState } from 'react'
-import { Block } from 'bot-engine'
+import { Block } from 'models'
import { useGraph } from 'contexts/GraphContext'
import { useDnd } from 'contexts/DndContext'
import { StepsList } from './StepsList'
-import { isDefined } from 'utils'
-import { useTypebot } from 'contexts/TypebotContext'
+import { filterTable, isDefined } from 'utils'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import { ContextMenu } from 'components/shared/ContextMenu'
import { BlockNodeContextMenu } from './BlockNodeContextMenu'
@@ -21,7 +21,7 @@ type Props = {
export const BlockNode = ({ block }: Props) => {
const { connectingIds, setConnectingIds, previewingIds } = useGraph()
- const { updateBlockPosition, addStepToBlock } = useTypebot()
+ const { typebot, updateBlock, createStep } = useTypebot()
const { draggedStep, draggedStepType, setDraggedStepType, setDraggedStep } =
useDnd()
const [isMouseDown, setIsMouseDown] = useState(false)
@@ -55,9 +55,11 @@ export const BlockNode = ({ block }: Props) => {
if (!isMouseDown) return
const { movementX, movementY } = event
- updateBlockPosition(block.id, {
- x: block.graphCoordinates.x + movementX,
- y: block.graphCoordinates.y + movementY,
+ updateBlock(block.id, {
+ graphCoordinates: {
+ x: block.graphCoordinates.x + movementX,
+ y: block.graphCoordinates.y + movementY,
+ },
})
}
@@ -77,11 +79,11 @@ export const BlockNode = ({ block }: Props) => {
const handleStepDrop = (index: number) => {
setShowSortPlaceholders(false)
if (draggedStepType) {
- addStepToBlock(block.id, draggedStepType, index)
+ createStep(block.id, draggedStepType, index)
setDraggedStepType(undefined)
}
if (draggedStep) {
- addStepToBlock(block.id, draggedStep, index)
+ createStep(block.id, draggedStep, index)
setDraggedStep(undefined)
}
}
@@ -119,12 +121,14 @@ export const BlockNode = ({ block }: Props) => {
/>
-
+ {typebot && (
+
+ )}
)}
diff --git a/apps/builder/components/board/graph/BlockNode/BlockNodeContextMenu.tsx b/apps/builder/components/board/graph/BlockNode/BlockNodeContextMenu.tsx
index be95a922f0..8e404b55ca 100644
--- a/apps/builder/components/board/graph/BlockNode/BlockNodeContextMenu.tsx
+++ b/apps/builder/components/board/graph/BlockNode/BlockNodeContextMenu.tsx
@@ -1,13 +1,12 @@
import { MenuList, MenuItem } from '@chakra-ui/react'
import { TrashIcon } from 'assets/icons'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
export const BlockNodeContextMenu = ({ blockId }: { blockId: string }) => {
- const { removeBlock } = useTypebot()
+ const { deleteBlock } = useTypebot()
+
+ const handleDeleteClick = () => deleteBlock(blockId)
- const handleDeleteClick = () => {
- removeBlock(blockId)
- }
return (
} onClick={handleDeleteClick}>
diff --git a/apps/builder/components/board/graph/BlockNode/StartBlockNode.tsx b/apps/builder/components/board/graph/BlockNode/StartBlockNode.tsx
deleted file mode 100644
index 728da7c26f..0000000000
--- a/apps/builder/components/board/graph/BlockNode/StartBlockNode.tsx
+++ /dev/null
@@ -1,75 +0,0 @@
-import {
- Editable,
- EditableInput,
- EditablePreview,
- Stack,
- useEventListener,
-} from '@chakra-ui/react'
-import React, { useMemo, useState } from 'react'
-import { StartBlock } from 'bot-engine'
-import { StepNode } from './StepNode'
-import { useTypebot } from 'contexts/TypebotContext'
-import { useGraph } from 'contexts/GraphContext'
-
-type Props = {
- block: StartBlock
-}
-export const StartBlockNode = ({ block }: Props) => {
- const { previewingIds } = useGraph()
- const [isMouseDown, setIsMouseDown] = useState(false)
- const [titleValue, setTitleValue] = useState(block.title)
- const { updateBlockPosition } = useTypebot()
- const isPreviewing = useMemo(
- () => previewingIds.sourceId === block.id,
- [block.id, previewingIds.sourceId]
- )
-
- const handleTitleChange = (title: string) => setTitleValue(title)
-
- const handleMouseDown = () => {
- setIsMouseDown(true)
- }
- const handleMouseUp = () => {
- setIsMouseDown(false)
- }
-
- const handleMouseMove = (event: MouseEvent) => {
- if (!isMouseDown) return
- const { movementX, movementY } = event
-
- updateBlockPosition(block.id, {
- x: block.graphCoordinates.x + movementX,
- y: block.graphCoordinates.y + movementY,
- })
- }
- useEventListener('mousemove', handleMouseMove)
-
- return (
-
-
-
-
-
-
-
- )
-}
diff --git a/apps/builder/components/board/graph/BlockNode/StepNode/RightClickMenu.tsx b/apps/builder/components/board/graph/BlockNode/StepNode/RightClickMenu.tsx
index c522a33b65..a50d3860be 100644
--- a/apps/builder/components/board/graph/BlockNode/StepNode/RightClickMenu.tsx
+++ b/apps/builder/components/board/graph/BlockNode/StepNode/RightClickMenu.tsx
@@ -1,19 +1,12 @@
import { MenuList, MenuItem } from '@chakra-ui/react'
import { TrashIcon } from 'assets/icons'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
-export const StepNodeContextMenu = ({
- blockId,
- stepId,
-}: {
- blockId: string
- stepId: string
-}) => {
- const { removeStepFromBlock } = useTypebot()
+export const StepNodeContextMenu = ({ stepId }: { stepId: string }) => {
+ const { deleteStep } = useTypebot()
+
+ const handleDeleteClick = () => deleteStep(stepId)
- const handleDeleteClick = () => {
- removeStepFromBlock(blockId, stepId)
- }
return (
} onClick={handleDeleteClick}>
diff --git a/apps/builder/components/board/graph/BlockNode/StepNode/StepContent.tsx b/apps/builder/components/board/graph/BlockNode/StepNode/StepContent.tsx
index bbc2e2f922..e09e90f9ff 100644
--- a/apps/builder/components/board/graph/BlockNode/StepNode/StepContent.tsx
+++ b/apps/builder/components/board/graph/BlockNode/StepNode/StepContent.tsx
@@ -1,5 +1,5 @@
import { Flex, Text } from '@chakra-ui/react'
-import { Step, StartStep, StepType } from 'bot-engine'
+import { Step, StartStep, StepType } from 'models'
export const StepContent = (props: Step | StartStep) => {
switch (props.type) {
diff --git a/apps/builder/components/board/graph/BlockNode/StepNode/StepNode.tsx b/apps/builder/components/board/graph/BlockNode/StepNode/StepNode.tsx
index c94e40956c..88909f820f 100644
--- a/apps/builder/components/board/graph/BlockNode/StepNode/StepNode.tsx
+++ b/apps/builder/components/board/graph/BlockNode/StepNode/StepNode.tsx
@@ -1,6 +1,6 @@
import { Box, Flex, HStack, useEventListener } from '@chakra-ui/react'
import React, { useEffect, useMemo, useState } from 'react'
-import { Block, StartStep, Step, StepType } from 'bot-engine'
+import { Block, Step, StepType } from 'models'
import { SourceEndpoint } from './SourceEndpoint'
import { useGraph } from 'contexts/GraphContext'
import { StepIcon } from 'components/board/StepTypesList/StepIcon'
@@ -8,7 +8,7 @@ import { isDefined } from 'utils'
import { Coordinates } from '@dnd-kit/core/dist/types'
import { TextEditor } from './TextEditor/TextEditor'
import { StepContent } from './StepContent'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import { ContextMenu } from 'components/shared/ContextMenu'
import { StepNodeContextMenu } from './RightClickMenu'
@@ -19,7 +19,7 @@ export const StepNode = ({
onMouseMoveTopOfElement,
onMouseDown,
}: {
- step: Step | StartStep
+ step: Step
isConnectable: boolean
onMouseMoveBottomOfElement?: () => void
onMouseMoveTopOfElement?: () => void
@@ -29,8 +29,7 @@ export const StepNode = ({
) => void
}) => {
const { setConnectingIds, connectingIds } = useGraph()
- const { removeStepFromBlock, typebot } = useTypebot()
- const { blocks, startBlock } = typebot ?? {}
+ const { deleteStep, typebot } = useTypebot()
const [isConnecting, setIsConnecting] = useState(false)
const [mouseDownEvent, setMouseDownEvent] =
useState<{ absolute: Coordinates; relative: Coordinates }>()
@@ -59,9 +58,8 @@ export const StepNode = ({
})
}
- const handleConnectionDragStart = () => {
- setConnectingIds({ blockId: step.blockId, stepId: step.id })
- }
+ const handleConnectionDragStart = () =>
+ setConnectingIds({ source: { blockId: step.blockId, stepId: step.id } })
const handleMouseDown = (e: React.MouseEvent) => {
if (!onMouseDown) return
@@ -95,7 +93,7 @@ export const StepNode = ({
(event.movementX > 0 || event.movementY > 0)
if (isMovingAndIsMouseDown) {
onMouseDown(mouseDownEvent, step as Step)
- removeStepFromBlock(step.blockId, step.id)
+ deleteStep(step.id)
setMouseDownEvent(undefined)
}
const element = event.currentTarget as HTMLDivElement
@@ -110,18 +108,15 @@ export const StepNode = ({
}
const connectedStubPosition: 'right' | 'left' | undefined = useMemo(() => {
- const currentBlock = [startBlock, ...(blocks ?? [])].find(
- (b) => b?.id === step.blockId
- )
+ if (!typebot) return
+ const currentBlock = typebot.blocks?.byId[step.blockId]
const isDragginConnectorFromCurrentBlock =
- connectingIds?.blockId === currentBlock?.id &&
+ connectingIds?.source.blockId === currentBlock?.id &&
connectingIds?.target?.blockId
const targetBlockId = isDragginConnectorFromCurrentBlock
? connectingIds.target?.blockId
: step.target?.blockId
- const targetedBlock = targetBlockId
- ? (blocks ?? []).find((b) => b.id === targetBlockId)
- : undefined
+ const targetedBlock = targetBlockId && typebot.blocks.byId[targetBlockId]
return targetedBlock
? targetedBlock.graphCoordinates.x <
(currentBlock as Block).graphCoordinates.x
@@ -129,27 +124,24 @@ export const StepNode = ({
: 'right'
: undefined
}, [
- blocks,
- connectingIds?.blockId,
- connectingIds?.target?.blockId,
+ typebot,
step.blockId,
step.target?.blockId,
- startBlock,
+ connectingIds?.source.blockId,
+ connectingIds?.target?.blockId,
])
return step.type === StepType.TEXT &&
(isEditing ||
(isEditing === undefined && step.content.plainText === '')) ? (
) : (
- renderMenu={() => (
-
- )}
+ renderMenu={() => }
>
{(ref, isOpened) => (
void
}
-export const TextEditor = ({ initialValue, ids, onClose }: TextEditorProps) => {
+export const TextEditor = ({
+ initialValue,
+ stepId,
+ onClose,
+}: TextEditorProps) => {
const editor = useMemo(
- () => withPlate(createEditor(), { id: ids.stepId, plugins: platePlugins }),
+ () => withPlate(createEditor(), { id: stepId, plugins: platePlugins }),
// eslint-disable-next-line react-hooks/exhaustive-deps
[]
)
@@ -48,13 +53,13 @@ export const TextEditor = ({ initialValue, ids, onClose }: TextEditorProps) => {
const html = serializeHtml(editor, {
nodes: value,
})
- updateStep(ids, {
+ updateStep(stepId, {
content: {
html,
richText: value,
plainText: parseHtmlStringToPlainText(html),
},
- })
+ } as TextStep)
}
const handleMouseDown = (e: React.MouseEvent) => {
@@ -72,7 +77,7 @@ export const TextEditor = ({ initialValue, ids, onClose }: TextEditorProps) => {
>
showSortPlaceholders: boolean
onMouseUp: (index: number) => void
}) => {
@@ -88,12 +88,12 @@ export const StepsList = ({
rounded="lg"
transition={showSortPlaceholders ? 'height 200ms' : 'none'}
/>
- {steps.map((step, idx) => (
-
+ {steps.allIds.map((stepId, idx) => (
+
handleMouseOnTopOfStep(idx)}
onMouseMoveBottomOfElement={() => {
handleMouseOnBottomOfStep(idx)
diff --git a/apps/builder/components/board/graph/Edges/DrawingEdge.tsx b/apps/builder/components/board/graph/Edges/DrawingEdge.tsx
index 1f7624ba39..d5f0f9d670 100644
--- a/apps/builder/components/board/graph/Edges/DrawingEdge.tsx
+++ b/apps/builder/components/board/graph/Edges/DrawingEdge.tsx
@@ -1,6 +1,5 @@
import { useEventListener } from '@chakra-ui/hooks'
import { Coordinates } from '@dnd-kit/core/dist/types'
-import { Block } from 'bot-engine'
import { headerHeight } from 'components/shared/TypebotHeader/TypebotHeader'
import {
blockWidth,
@@ -9,7 +8,7 @@ import {
stubLength,
useGraph,
} from 'contexts/GraphContext'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import React, { useMemo, useState } from 'react'
import {
computeFlowChartConnectorPath,
@@ -19,34 +18,30 @@ import { roundCorners } from 'svg-round-corners'
export const DrawingEdge = () => {
const { graphPosition, setConnectingIds, connectingIds } = useGraph()
- const { typebot, updateTarget } = useTypebot()
- const { startBlock, blocks } = typebot ?? {}
+ const { typebot, updateStep } = useTypebot()
const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 })
const sourceBlock = useMemo(
- () =>
- [startBlock, ...(blocks ?? [])].find(
- (b) => b?.id === connectingIds?.blockId
- ),
+ () => connectingIds && typebot?.blocks.byId[connectingIds.source.blockId],
// eslint-disable-next-line react-hooks/exhaustive-deps
[connectingIds]
)
const path = useMemo(() => {
- if (!sourceBlock) return ``
+ if (!sourceBlock || !typebot) return ``
if (connectingIds?.target) {
- const targetedBlock = blocks?.find(
- (b) => b.id === connectingIds.target?.blockId
- ) as Block
+ const targetedBlock = typebot?.blocks.byId[connectingIds.target.blockId]
const targetedStepIndex = connectingIds.target.stepId
- ? targetedBlock.steps.findIndex(
- (s) => s.id === connectingIds.target?.stepId
+ ? targetedBlock.stepIds.findIndex(
+ (stepId) => stepId === connectingIds.target?.stepId
)
: undefined
const anchorsPosition = getAnchorsPosition(
sourceBlock,
targetedBlock,
- sourceBlock?.steps.findIndex((s) => s.id === connectingIds?.stepId),
+ sourceBlock?.stepIds.findIndex(
+ (stepId) => stepId === connectingIds?.source.stepId
+ ),
targetedStepIndex
)
return computeFlowChartConnectorPath(anchorsPosition)
@@ -54,7 +49,9 @@ export const DrawingEdge = () => {
return computeConnectingEdgePath(
sourceBlock?.graphCoordinates,
mousePosition,
- sourceBlock.steps.findIndex((s) => s.id === connectingIds?.stepId)
+ sourceBlock.stepIds.findIndex(
+ (stepId) => stepId === connectingIds?.source.stepId
+ )
)
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [sourceBlock, mousePosition])
@@ -67,7 +64,8 @@ export const DrawingEdge = () => {
}
useEventListener('mousemove', handleMouseMove)
useEventListener('mouseup', () => {
- if (connectingIds?.target) updateTarget(connectingIds)
+ if (connectingIds?.target)
+ updateStep(connectingIds.source.stepId, { target: connectingIds.target })
setConnectingIds(null)
})
diff --git a/apps/builder/components/board/graph/Edges/Edge.tsx b/apps/builder/components/board/graph/Edges/Edge.tsx
index 0694883350..94ba80d8c0 100644
--- a/apps/builder/components/board/graph/Edges/Edge.tsx
+++ b/apps/builder/components/board/graph/Edges/Edge.tsx
@@ -1,6 +1,5 @@
-import { Block, StartStep, Step, Target } from 'bot-engine'
import { Coordinates, useGraph } from 'contexts/GraphContext'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import React, { useMemo } from 'react'
import {
getAnchorsPosition,
@@ -14,58 +13,43 @@ export type AnchorsPositionProps = {
totalSegments: number
}
-export type StepWithTarget = Omit & {
- target: Target
-}
-
-export const Edge = ({ step }: { step: StepWithTarget }) => {
+export const Edge = ({ stepId }: { stepId: string }) => {
const { typebot } = useTypebot()
const { previewingIds } = useGraph()
+ const step = typebot?.steps.byId[stepId]
const isPreviewing = useMemo(
() =>
- previewingIds.sourceId === step.blockId &&
- previewingIds.targetId === step.target.blockId,
- [
- previewingIds.sourceId,
- previewingIds.targetId,
- step.blockId,
- step.target.blockId,
- ]
+ previewingIds.sourceId === step?.blockId &&
+ previewingIds.targetId === step?.target?.blockId,
+ [previewingIds.sourceId, previewingIds.targetId, step]
)
- const { blocks, startBlock } = typebot ?? {}
const { sourceBlock, targetBlock, targetStepIndex } = useMemo(() => {
- const targetBlock = blocks?.find(
- (b) => b?.id === step.target.blockId
- ) as Block
+ if (!typebot) return {}
+ const step = typebot.steps.byId[stepId]
+ if (!step.target) return {}
+ const sourceBlock = typebot.blocks.byId[step.blockId]
+ const targetBlock = typebot.blocks.byId[step.target.blockId]
const targetStepIndex = step.target.stepId
- ? targetBlock.steps.findIndex((s) => s.id === step.target.stepId)
+ ? targetBlock.stepIds.indexOf(step.target.stepId)
: undefined
return {
- sourceBlock: [startBlock, ...(blocks ?? [])].find(
- (b) => b?.id === step.blockId
- ),
+ sourceBlock,
targetBlock,
targetStepIndex,
}
- }, [
- blocks,
- startBlock,
- step.blockId,
- step.target.blockId,
- step.target.stepId,
- ])
+ }, [stepId, typebot])
const path = useMemo(() => {
if (!sourceBlock || !targetBlock) return ``
const anchorsPosition = getAnchorsPosition(
sourceBlock,
targetBlock,
- sourceBlock.steps.findIndex((s) => s.id === step.id),
+ sourceBlock.stepIds.indexOf(stepId),
targetStepIndex
)
return computeFlowChartConnectorPath(anchorsPosition)
- }, [sourceBlock, step.id, targetBlock, targetStepIndex])
+ }, [sourceBlock, stepId, targetBlock, targetStepIndex])
return (
{
const { typebot } = useTypebot()
- const { blocks, startBlock } = typebot ?? {}
- const stepsWithTarget: StepWithTarget[] = useMemo(() => {
- if (!startBlock) return []
- return [
- ...(startBlock.steps.filter((s) => s.target) as StepWithTarget[]),
- ...((blocks ?? [])
- .flatMap((b) => b.steps)
- .filter((s) => s.target) as StepWithTarget[]),
- ]
- }, [blocks, startBlock])
+ const stepIdsWithTarget: string[] = useMemo(() => {
+ if (!typebot) return []
+ return typebot.steps.allIds.filter((stepId) =>
+ isDefined(typebot.steps.byId[stepId].target)
+ )
+ }, [typebot])
return (
{
top="0"
>
- {stepsWithTarget.map((step) => (
-
+ {stepIdsWithTarget.map((stepId) => (
+
))}
{
const { draggedStepType, setDraggedStepType, draggedStep, setDraggedStep } =
useDnd()
const graphContainerRef = useRef(null)
- const { addNewBlock, typebot } = useTypebot()
+ const { createBlock, typebot } = useTypebot()
const { graphPosition, setGraphPosition } = useGraph()
const transform = useMemo(
() =>
@@ -41,11 +41,10 @@ const Graph = ({ ...props }: FlexProps) => {
const handleMouseUp = (e: MouseEvent) => {
if (!draggedStep && !draggedStepType) return
- addNewBlock({
- step: draggedStep,
- type: draggedStepType,
+ createBlock({
x: e.clientX - graphPosition.x - blockWidth / 3,
y: e.clientY - graphPosition.y - 20 - headerHeight,
+ step: draggedStep ?? (draggedStepType as StepType),
})
setDraggedStep(undefined)
setDraggedStepType(undefined)
@@ -71,9 +70,8 @@ const Graph = ({ ...props }: FlexProps) => {
>
{props.children}
- {typebot.startBlock && }
- {(typebot.blocks ?? []).map((block) => (
-
+ {typebot.blocks.allIds.map((blockId) => (
+
))}
diff --git a/apps/builder/components/board/preview/PreviewDrawer.tsx b/apps/builder/components/board/preview/PreviewDrawer.tsx
index 97befc31df..c64ea2883b 100644
--- a/apps/builder/components/board/preview/PreviewDrawer.tsx
+++ b/apps/builder/components/board/preview/PreviewDrawer.tsx
@@ -12,7 +12,7 @@ import { TypebotViewer } from 'bot-engine'
import { headerHeight } from 'components/shared/TypebotHeader'
import { useEditor } from 'contexts/EditorContext'
import { useGraph } from 'contexts/GraphContext'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import React, { useMemo, useState } from 'react'
import { parseTypebotToPublicTypebot } from 'services/publicTypebot'
diff --git a/apps/builder/components/dashboard/FolderContent.tsx b/apps/builder/components/dashboard/FolderContent.tsx
index 454f1ae5f6..2bd0449c5c 100644
--- a/apps/builder/components/dashboard/FolderContent.tsx
+++ b/apps/builder/components/dashboard/FolderContent.tsx
@@ -1,5 +1,5 @@
import { DashboardFolder } from '.prisma/client'
-import { Typebot } from 'bot-engine'
+import { Typebot } from 'models'
import {
Button,
Flex,
diff --git a/apps/builder/components/dashboard/FolderContent/TypebotButton.tsx b/apps/builder/components/dashboard/FolderContent/TypebotButton.tsx
index 14da6bcca2..3b7a83fe6c 100644
--- a/apps/builder/components/dashboard/FolderContent/TypebotButton.tsx
+++ b/apps/builder/components/dashboard/FolderContent/TypebotButton.tsx
@@ -16,7 +16,7 @@ import { MoreButton } from 'components/MoreButton'
import { ConfirmModal } from 'components/modals/ConfirmModal'
import { GlobeIcon, ToolIcon } from 'assets/icons'
import { deleteTypebot, duplicateTypebot } from 'services/typebots'
-import { Typebot } from 'bot-engine'
+import { Typebot } from 'models'
type ChatbotCardProps = {
typebot: Typebot
diff --git a/apps/builder/components/dashboard/FolderContent/TypebotButtonOverlay.tsx b/apps/builder/components/dashboard/FolderContent/TypebotButtonOverlay.tsx
index b40529a37e..e18261a53a 100644
--- a/apps/builder/components/dashboard/FolderContent/TypebotButtonOverlay.tsx
+++ b/apps/builder/components/dashboard/FolderContent/TypebotButtonOverlay.tsx
@@ -1,6 +1,6 @@
import { Button, Flex, Text, VStack } from '@chakra-ui/react'
import { GlobeIcon, ToolIcon } from 'assets/icons'
-import { Typebot } from 'bot-engine'
+import { Typebot } from 'models'
type Props = {
typebot: Typebot
diff --git a/apps/builder/components/results/SubmissionsTable/SubmissionsTable.tsx b/apps/builder/components/results/SubmissionsTable/SubmissionsTable.tsx
index 66ed2ae208..b2bb0ca33c 100644
--- a/apps/builder/components/results/SubmissionsTable/SubmissionsTable.tsx
+++ b/apps/builder/components/results/SubmissionsTable/SubmissionsTable.tsx
@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable react/jsx-key */
import { Box, Checkbox, Flex } from '@chakra-ui/react'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import React, { useEffect, useMemo, useRef } from 'react'
import { Hooks, useFlexLayout, useRowSelect, useTable } from 'react-table'
import { parseSubmissionsColumns } from 'services/publicTypebot'
diff --git a/apps/builder/components/settings/SettingsContent.tsx b/apps/builder/components/settings/SettingsContent.tsx
index c138c545fc..adf6091a74 100644
--- a/apps/builder/components/settings/SettingsContent.tsx
+++ b/apps/builder/components/settings/SettingsContent.tsx
@@ -1,17 +1,17 @@
import { Flex, Stack } from '@chakra-ui/react'
-import { TypingEmulationSettings } from 'bot-engine'
-import { useTypebot } from 'contexts/TypebotContext'
+import { TypingEmulationSettings } from 'models'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import React from 'react'
import { TypingEmulation } from './TypingEmulation'
export const SettingsContent = () => {
- const { typebot, updateSettings } = useTypebot()
+ const { typebot, updateTypebot } = useTypebot()
const handleTypingEmulationUpdate = (
typingEmulation: TypingEmulationSettings
) => {
if (!typebot) return
- updateSettings({ ...typebot.settings, typingEmulation })
+ updateTypebot({ settings: { ...typebot.settings, typingEmulation } })
}
return (
diff --git a/apps/builder/components/settings/TypingEmulation.tsx b/apps/builder/components/settings/TypingEmulation.tsx
index df64afc9ea..41a6c35f0e 100644
--- a/apps/builder/components/settings/TypingEmulation.tsx
+++ b/apps/builder/components/settings/TypingEmulation.tsx
@@ -1,5 +1,5 @@
import { Flex, Stack, Switch, Text } from '@chakra-ui/react'
-import { TypingEmulationSettings } from 'bot-engine'
+import { TypingEmulationSettings } from 'models'
import React from 'react'
import { SmartNumberInput } from './SmartNumberInput'
diff --git a/apps/builder/components/share/ShareContent.tsx b/apps/builder/components/share/ShareContent.tsx
index b03b57e6d0..3650521681 100644
--- a/apps/builder/components/share/ShareContent.tsx
+++ b/apps/builder/components/share/ShareContent.tsx
@@ -1,15 +1,15 @@
import { Flex, Heading, Stack } from '@chakra-ui/react'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import React from 'react'
import { parseDefaultPublicId } from 'services/typebots'
import { EditableUrl } from './EditableUrl'
export const ShareContent = () => {
- const { typebot, updatePublicId } = useTypebot()
+ const { typebot, updateTypebot } = useTypebot()
const handlePublicIdChange = (publicId: string) => {
if (publicId === typebot?.publicId) return
- updatePublicId(publicId)
+ updateTypebot({ publicId })
}
return (
diff --git a/apps/builder/components/shared/TypebotHeader/SaveButton.tsx b/apps/builder/components/shared/TypebotHeader/SaveButton.tsx
index 3dd6a352b0..6b77957f43 100644
--- a/apps/builder/components/shared/TypebotHeader/SaveButton.tsx
+++ b/apps/builder/components/shared/TypebotHeader/SaveButton.tsx
@@ -1,6 +1,6 @@
import { IconButton, Text, Tooltip } from '@chakra-ui/react'
import { CheckIcon, SaveIcon } from 'assets/icons'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import React from 'react'
export const SaveButton = () => {
diff --git a/apps/builder/components/shared/TypebotHeader/TypebotHeader.tsx b/apps/builder/components/shared/TypebotHeader/TypebotHeader.tsx
index 241e4b48b8..7eabf2bd8a 100644
--- a/apps/builder/components/shared/TypebotHeader/TypebotHeader.tsx
+++ b/apps/builder/components/shared/TypebotHeader/TypebotHeader.tsx
@@ -2,7 +2,7 @@ import { Flex, HStack, Button, IconButton } from '@chakra-ui/react'
import { ChevronLeftIcon } from 'assets/icons'
import { NextChakraLink } from 'components/nextChakra/NextChakraLink'
import { RightPanel, useEditor } from 'contexts/EditorContext'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import { useRouter } from 'next/router'
import React from 'react'
import { PublishButton } from '../buttons/PublishButton'
diff --git a/apps/builder/components/shared/buttons/PublishButton.tsx b/apps/builder/components/shared/buttons/PublishButton.tsx
index a3346c38be..f5dbaa76b7 100644
--- a/apps/builder/components/shared/buttons/PublishButton.tsx
+++ b/apps/builder/components/shared/buttons/PublishButton.tsx
@@ -1,5 +1,5 @@
import { Button } from '@chakra-ui/react'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
export const PublishButton = () => {
const { isPublishing, isPublished, publishTypebot } = useTypebot()
diff --git a/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundContent.tsx b/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundContent.tsx
index c647abe94a..1f85e423bb 100644
--- a/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundContent.tsx
+++ b/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundContent.tsx
@@ -1,5 +1,5 @@
import { Flex, Text } from '@chakra-ui/react'
-import { Background, BackgroundType } from 'bot-engine'
+import { Background, BackgroundType } from 'models'
import React from 'react'
import { ColorPicker } from '../ColorPicker'
diff --git a/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundSelector.tsx b/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundSelector.tsx
index 8dd3cd4b42..6715cd2c5b 100644
--- a/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundSelector.tsx
+++ b/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundSelector.tsx
@@ -1,5 +1,5 @@
import { Stack, Text } from '@chakra-ui/react'
-import { Background, BackgroundType } from 'bot-engine'
+import { Background, BackgroundType } from 'models'
import { deepEqual } from 'fast-equals'
import React, { useEffect, useState } from 'react'
import { BackgroundContent } from './BackgroundContent'
diff --git a/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundTypeRadioButtons.tsx b/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundTypeRadioButtons.tsx
index dd43736b32..f171fa59eb 100644
--- a/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundTypeRadioButtons.tsx
+++ b/apps/builder/components/theme/GeneralContent/BackgroundSelector/BackgroundTypeRadioButtons.tsx
@@ -6,7 +6,7 @@ import {
useRadioGroup,
UseRadioProps,
} from '@chakra-ui/react'
-import { BackgroundType } from 'bot-engine'
+import { BackgroundType } from 'models'
import { ReactNode } from 'react'
type Props = {
diff --git a/apps/builder/components/theme/GeneralContent/GeneralContent.tsx b/apps/builder/components/theme/GeneralContent/GeneralContent.tsx
index 9539555536..31f7571d56 100644
--- a/apps/builder/components/theme/GeneralContent/GeneralContent.tsx
+++ b/apps/builder/components/theme/GeneralContent/GeneralContent.tsx
@@ -8,28 +8,32 @@ import {
Stack,
} from '@chakra-ui/react'
import { PencilIcon } from 'assets/icons'
-import { Background } from 'bot-engine'
-import { useTypebot } from 'contexts/TypebotContext'
+import { Background } from 'models'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import React from 'react'
import { BackgroundSelector } from './BackgroundSelector'
import { FontSelector } from './FontSelector'
export const GeneralContent = () => {
- const { typebot, updateTheme } = useTypebot()
+ const { typebot, updateTypebot } = useTypebot()
const handleSelectFont = (font: string) => {
if (!typebot) return
- updateTheme({
- ...typebot.theme,
- general: { ...typebot.theme.general, font },
+ updateTypebot({
+ theme: {
+ ...typebot.theme,
+ general: { ...typebot.theme.general, font },
+ },
})
}
const handleBackgroundChange = (background: Background) => {
if (!typebot) return
- updateTheme({
- ...typebot.theme,
- general: { ...typebot.theme.general, background },
+ updateTypebot({
+ theme: {
+ ...typebot.theme,
+ general: { ...typebot.theme.general, background },
+ },
})
}
return (
diff --git a/apps/builder/components/theme/ThemeContent.tsx b/apps/builder/components/theme/ThemeContent.tsx
index 50613fe879..f1fb0d14ac 100644
--- a/apps/builder/components/theme/ThemeContent.tsx
+++ b/apps/builder/components/theme/ThemeContent.tsx
@@ -1,6 +1,6 @@
import { Flex } from '@chakra-ui/react'
import { TypebotViewer } from 'bot-engine'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import React, { useMemo } from 'react'
import { parseTypebotToPublicTypebot } from 'services/publicTypebot'
import { SideMenu } from './SideMenu'
diff --git a/apps/builder/contexts/AnalyticsGraphProvider.tsx b/apps/builder/contexts/AnalyticsGraphProvider.tsx
index 71d0db0863..723454a29c 100644
--- a/apps/builder/contexts/AnalyticsGraphProvider.tsx
+++ b/apps/builder/contexts/AnalyticsGraphProvider.tsx
@@ -1,4 +1,4 @@
-import { Block, PublicTypebot } from 'bot-engine'
+import { PublicTypebot } from 'models'
import {
createContext,
Dispatch,
@@ -8,6 +8,7 @@ import {
useState,
} from 'react'
import { Coordinates } from './GraphContext'
+import produce from 'immer'
type Position = Coordinates & { scale: number }
@@ -35,31 +36,13 @@ export const AnalyticsGraphProvider = ({
const [graphPosition, setGraphPosition] = useState(graphPositionDefaultValue)
- const updateBlocks = (blocks: Block[]) => {
- if (!typebot) return
- setTypebot({
- ...typebot,
- blocks: [...blocks],
- })
- }
-
const updateBlockPosition = (blockId: string, newPosition: Coordinates) => {
if (!typebot) return
- blockId === 'start-block'
- ? setTypebot({
- ...typebot,
- startBlock: {
- ...typebot.startBlock,
- graphCoordinates: newPosition,
- },
- })
- : updateBlocks(
- typebot.blocks.map((block) =>
- block.id === blockId
- ? { ...block, graphCoordinates: newPosition }
- : block
- )
- )
+ setTypebot(
+ produce(typebot, (nextTypebot) => {
+ nextTypebot.blocks.byId[blockId].graphCoordinates = newPosition
+ })
+ )
}
return (
diff --git a/apps/builder/contexts/DndContext.tsx b/apps/builder/contexts/DndContext.tsx
index 8def57824b..7a324b6895 100644
--- a/apps/builder/contexts/DndContext.tsx
+++ b/apps/builder/contexts/DndContext.tsx
@@ -1,4 +1,4 @@
-import { Step, StepType } from 'bot-engine'
+import { Step, StepType } from 'models'
import {
createContext,
Dispatch,
diff --git a/apps/builder/contexts/GraphContext.tsx b/apps/builder/contexts/GraphContext.tsx
index 4d7412b23b..0f3137e2ae 100644
--- a/apps/builder/contexts/GraphContext.tsx
+++ b/apps/builder/contexts/GraphContext.tsx
@@ -1,4 +1,4 @@
-import { Block, Step, StepType, Target } from 'bot-engine'
+import { Block, Step, Target } from 'models'
import {
createContext,
Dispatch,
@@ -41,26 +41,22 @@ export type Node = Omit & {
})[]
}
-export type NewBlockPayload = {
- x: number
- y: number
- type?: StepType
- step?: Step
-}
-
const graphPositionDefaultValue = { x: 400, y: 100, scale: 1 }
+type ConnectingIdsProps = {
+ source: { blockId: string; stepId: string }
+ target?: Target
+} | null
+
+type PreviewingIdsProps = { sourceId?: string; targetId?: string }
+
const graphContext = createContext<{
graphPosition: Position
setGraphPosition: Dispatch>
- connectingIds: { blockId: string; stepId: string; target?: Target } | null
- setConnectingIds: Dispatch<
- SetStateAction<{ blockId: string; stepId: string; target?: Target } | null>
- >
- previewingIds: { sourceId?: string; targetId?: string }
- setPreviewingIds: Dispatch<
- SetStateAction<{ sourceId?: string; targetId?: string }>
- >
+ connectingIds: ConnectingIdsProps
+ setConnectingIds: Dispatch>
+ previewingIds: PreviewingIdsProps
+ setPreviewingIds: Dispatch>
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
//@ts-ignore
}>({
@@ -70,15 +66,8 @@ const graphContext = createContext<{
export const GraphProvider = ({ children }: { children: ReactNode }) => {
const [graphPosition, setGraphPosition] = useState(graphPositionDefaultValue)
- const [connectingIds, setConnectingIds] = useState<{
- blockId: string
- stepId: string
- target?: Target
- } | null>(null)
- const [previewingIds, setPreviewingIds] = useState<{
- sourceId?: string
- targetId?: string
- }>({})
+ const [connectingIds, setConnectingIds] = useState(null)
+ const [previewingIds, setPreviewingIds] = useState({})
return (
void
- updateStep: (
- ids: { stepId: string; blockId: string },
- updates: Partial
- ) => void
- addNewBlock: (props: NewBlockPayload) => void
- updateBlockPosition: (blockId: string, newPositon: Coordinates) => void
- removeBlock: (blockId: string) => void
- addStepToBlock: (
- blockId: string,
- step: StepType | Step,
- index: number
- ) => void
- removeStepFromBlock: (blockId: string, stepId: string) => void
- updateTarget: (connectingIds: {
- blockId: string
- stepId: string
- target?: Target
- }) => void
- undo: () => void
- updateTheme: (theme: Theme) => void
- updateSettings: (settings: Settings) => void
- updatePublicId: (publicId: string) => void
- publishTypebot: () => void
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
- //@ts-ignore
-}>({})
-
-export const TypebotContext = ({
- children,
- typebotId,
-}: {
- children: ReactNode
- typebotId?: string
-}) => {
- const router = useRouter()
- const toast = useToast({
- position: 'top-right',
- status: 'error',
- })
- const [undoStack, setUndoStack] = useState([])
- const { typebot, publishedTypebot, isLoading, mutate } = useFetchedTypebot({
- typebotId,
- onError: (error) =>
- toast({
- title: 'Error while fetching typebot',
- description: error.message,
- }),
- })
- const [localTypebot, setLocalTypebot] = useState()
- const [localPublishedTypebot, setLocalPublishedTypebot] =
- useState()
- const [isSavingLoading, setIsSavingLoading] = useState(false)
- const [isPublishing, setIsPublishing] = useState(false)
-
- const hasUnsavedChanges = useMemo(
- () =>
- isDefined(typebot) &&
- isDefined(localTypebot) &&
- !deepEqual(localTypebot, typebot),
- [typebot, localTypebot]
- )
- const isPublished = useMemo(
- () =>
- isDefined(typebot) &&
- isDefined(publishedTypebot) &&
- checkIfPublished(typebot, publishedTypebot),
- [typebot, publishedTypebot]
- )
-
- useEffect(() => {
- if (!localTypebot || !typebot) return
- if (!checkIfTypebotsAreEqual(localTypebot, typebot)) {
- pushNewTypebotInUndoStack(localTypebot)
- window.removeEventListener('beforeunload', preventUserFromRefreshing)
- window.addEventListener('beforeunload', preventUserFromRefreshing)
- } else {
- window.removeEventListener('beforeunload', preventUserFromRefreshing)
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [localTypebot])
-
- useEffect(() => {
- if (isLoading) return
- if (!typebot) {
- toast({ status: 'info', description: "Couldn't find typebot" })
- router.replace('/typebots')
- return
- }
- setLocalTypebot({ ...typebot })
- if (publishedTypebot) setLocalPublishedTypebot({ ...publishedTypebot })
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [isLoading])
-
- const pushNewTypebotInUndoStack = (typebot: Typebot) => {
- setUndoStack([...undoStack, typebot])
- }
-
- const undo = () => {
- const lastTypebot = [...undoStack].pop()
- setUndoStack(undoStack.slice(0, -1))
- setLocalTypebot(lastTypebot)
- }
-
- const saveTypebot = async () => {
- if (!localTypebot) return
- setIsSavingLoading(true)
- const { error } = await updateTypebot(localTypebot.id, localTypebot)
- setIsSavingLoading(false)
- if (error) return toast({ title: error.name, description: error.message })
- mutate({ typebot: localTypebot })
- window.removeEventListener('beforeunload', preventUserFromRefreshing)
- }
-
- const updateBlocks = (blocks: Block[]) => {
- if (!localTypebot) return
- setLocalTypebot({
- ...localTypebot,
- blocks: [...blocks],
- })
- }
-
- const updateStep = (
- { blockId, stepId }: { blockId: string; stepId: string },
- updates: Partial>
- ) => {
- if (!localTypebot) return
- setLocalTypebot({
- ...localTypebot,
- blocks: localTypebot.blocks.map((block) =>
- block.id === blockId
- ? {
- ...block,
- steps: block.steps.map((step) =>
- step.id === stepId ? { ...step, ...updates } : step
- ),
- }
- : block
- ),
- })
- }
-
- const addNewBlock = ({ x, y, type, step }: NewBlockPayload) => {
- if (!localTypebot) return
- updateBlocks([
- ...localTypebot.blocks.filter((block) => block.steps.length > 0),
- parseNewBlock({
- step,
- type,
- totalBlocks: localTypebot.blocks.length,
- initialCoordinates: {
- x,
- y,
- },
- }),
- ])
- }
-
- const updateBlockPosition = (blockId: string, newPosition: Coordinates) => {
- if (!localTypebot) return
- blockId === 'start-block'
- ? setLocalTypebot({
- ...localTypebot,
- startBlock: {
- ...localTypebot.startBlock,
- graphCoordinates: newPosition,
- },
- })
- : updateBlocks(
- localTypebot.blocks.map((block) =>
- block.id === blockId
- ? { ...block, graphCoordinates: newPosition }
- : block
- )
- )
- }
-
- const addStepToBlock = (
- blockId: string,
- step: StepType | Step,
- index: number
- ) => {
- if (!localTypebot) return
- updateBlocks(
- localTypebot.blocks
- .map((block) =>
- block.id === blockId
- ? {
- ...block,
- steps: insertItemInList(
- block.steps,
- index,
- typeof step === 'string'
- ? parseNewStep(step as StepType, block.id)
- : { ...step, blockId: block.id }
- ),
- }
- : block
- )
- .filter((block) => block.steps.length > 0)
- )
- }
-
- const removeStepFromBlock = (blockId: string, stepId: string) => {
- if (!localTypebot) return
- updateBlocks(
- localTypebot.blocks.map((block) =>
- block.id === blockId
- ? {
- ...block,
- steps: [...block.steps.filter((step) => step.id !== stepId)],
- }
- : block
- )
- )
- }
-
- const updateTarget = ({
- blockId,
- stepId,
- target,
- }: {
- blockId: string
- stepId: string
- target?: Target
- }) => {
- if (!localTypebot) return
- blockId === 'start-block'
- ? setLocalTypebot({
- ...localTypebot,
- startBlock: {
- ...localTypebot.startBlock,
- steps: [{ ...localTypebot.startBlock.steps[0], target }],
- },
- })
- : updateBlocks(
- localTypebot.blocks.map((block) =>
- block.id === blockId
- ? {
- ...block,
- steps: [
- ...block.steps.map((step) =>
- step.id === stepId ? { ...step, target } : step
- ),
- ],
- }
- : block
- )
- )
- }
-
- const removeBlock = (blockId: string) => {
- if (!localTypebot) return
- const blocks = [...localTypebot.blocks.filter((b) => b.id !== blockId)]
- setLocalTypebot({ ...localTypebot, blocks })
- }
-
- const updateTheme = (theme: Theme) => {
- if (!localTypebot) return
- setLocalTypebot({ ...localTypebot, theme })
- }
-
- const updateSettings = (settings: Settings) => {
- if (!localTypebot) return
- setLocalTypebot({ ...localTypebot, settings })
- }
-
- const updatePublicId = (publicId: string) => {
- if (!localTypebot) return
- setLocalTypebot({ ...localTypebot, publicId })
- }
-
- const publishTypebot = async () => {
- if (!localTypebot) return
- if (!localPublishedTypebot) {
- const newPublicId = parseDefaultPublicId(
- localTypebot.name,
- localTypebot.id
- )
- updatePublicId(newPublicId)
- localTypebot.publicId = newPublicId
- }
- if (hasUnsavedChanges || !localPublishedTypebot) await saveTypebot()
- setIsPublishing(true)
- if (localPublishedTypebot) {
- const { error } = await updatePublishedTypebot(
- localPublishedTypebot.id,
- omit(parseTypebotToPublicTypebot(localTypebot), 'id')
- )
- setIsPublishing(false)
- if (error) return toast({ title: error.name, description: error.message })
- } else {
- const { error } = await createPublishedTypebot(
- omit(parseTypebotToPublicTypebot(localTypebot), 'id')
- )
- setIsPublishing(false)
- if (error) return toast({ title: error.name, description: error.message })
- }
- mutate({ typebot: localTypebot })
- }
-
- return (
-
- {children}
-
- )
-}
-
-export const useTypebot = () => useContext(typebotContext)
-
-export const useFetchedTypebot = ({
- typebotId,
- onError,
-}: {
- typebotId?: string
- onError: (error: Error) => void
-}) => {
- const { data, error, mutate } = useSWR<
- { typebot: Typebot; publishedTypebot?: PublicTypebot },
- Error
- >(typebotId ? `/api/typebots/${typebotId}` : null, fetcher)
- if (error) onError(error)
- return {
- typebot: data?.typebot,
- publishedTypebot: data?.publishedTypebot,
- isLoading: !error && !data,
- mutate,
- }
-}
diff --git a/apps/builder/contexts/TypebotContext/TypebotContext.tsx b/apps/builder/contexts/TypebotContext/TypebotContext.tsx
new file mode 100644
index 0000000000..195cc2c5ce
--- /dev/null
+++ b/apps/builder/contexts/TypebotContext/TypebotContext.tsx
@@ -0,0 +1,232 @@
+import { useToast } from '@chakra-ui/react'
+import { deepEqual } from 'fast-equals'
+import { PublicTypebot, Settings, Theme, Typebot } from 'models'
+import { useRouter } from 'next/router'
+import {
+ createContext,
+ ReactNode,
+ useContext,
+ useEffect,
+ useMemo,
+ useState,
+} from 'react'
+import {
+ createPublishedTypebot,
+ parseTypebotToPublicTypebot,
+ updatePublishedTypebot,
+} from 'services/publicTypebot'
+import {
+ checkIfPublished,
+ checkIfTypebotsAreEqual,
+ parseDefaultPublicId,
+ updateTypebot,
+} from 'services/typebots'
+import { fetcher, omit, preventUserFromRefreshing } from 'services/utils'
+import useSWR from 'swr'
+import { isDefined } from 'utils'
+import { BlocksActions, blocksActions } from './actions/blocks'
+import { useImmer, Updater } from 'use-immer'
+import { stepsAction, StepsActions } from './actions/steps'
+
+type UpdateTypebotPayload = Partial<{
+ theme: Theme
+ settings: Settings
+ publicId: string
+}>
+const typebotContext = createContext<
+ {
+ typebot?: Typebot
+ publishedTypebot?: PublicTypebot
+ isPublished: boolean
+ isPublishing: boolean
+ hasUnsavedChanges: boolean
+ isSavingLoading: boolean
+ save: () => void
+ undo: () => void
+ updateTypebot: (updates: UpdateTypebotPayload) => void
+ publishTypebot: () => void
+ } & BlocksActions &
+ StepsActions
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+ //@ts-ignore
+>({})
+
+export const TypebotContext = ({
+ children,
+ typebotId,
+}: {
+ children: ReactNode
+ typebotId?: string
+}) => {
+ const router = useRouter()
+ const toast = useToast({
+ position: 'top-right',
+ status: 'error',
+ })
+ const [undoStack, setUndoStack] = useState([])
+ const { typebot, publishedTypebot, isLoading, mutate } = useFetchedTypebot({
+ typebotId,
+ onError: (error) =>
+ toast({
+ title: 'Error while fetching typebot',
+ description: error.message,
+ }),
+ })
+ const [localTypebot, setLocalTypebot] = useImmer(
+ undefined
+ )
+ const [localPublishedTypebot, setLocalPublishedTypebot] =
+ useState()
+ const [isSavingLoading, setIsSavingLoading] = useState(false)
+ const [isPublishing, setIsPublishing] = useState(false)
+
+ const hasUnsavedChanges = useMemo(
+ () =>
+ isDefined(typebot) &&
+ isDefined(localTypebot) &&
+ !deepEqual(localTypebot, typebot),
+ [typebot, localTypebot]
+ )
+ const isPublished = useMemo(
+ () =>
+ isDefined(typebot) &&
+ isDefined(publishedTypebot) &&
+ checkIfPublished(typebot, publishedTypebot),
+ [typebot, publishedTypebot]
+ )
+
+ useEffect(() => {
+ if (!localTypebot || !typebot) return
+ if (!checkIfTypebotsAreEqual(localTypebot, typebot)) {
+ pushNewTypebotInUndoStack(localTypebot)
+ window.removeEventListener('beforeunload', preventUserFromRefreshing)
+ window.addEventListener('beforeunload', preventUserFromRefreshing)
+ } else {
+ window.removeEventListener('beforeunload', preventUserFromRefreshing)
+ }
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [localTypebot])
+
+ useEffect(() => {
+ if (isLoading) return
+ if (!typebot) {
+ toast({ status: 'info', description: "Couldn't find typebot" })
+ router.replace('/typebots')
+ return
+ }
+ setLocalTypebot({ ...typebot })
+ if (publishedTypebot) setLocalPublishedTypebot({ ...publishedTypebot })
+ // eslint-disable-next-line react-hooks/exhaustive-deps
+ }, [isLoading])
+
+ const pushNewTypebotInUndoStack = (typebot: Typebot) => {
+ setUndoStack([...undoStack, typebot])
+ }
+
+ const undo = () => {
+ const lastTypebot = [...undoStack].pop()
+ setUndoStack(undoStack.slice(0, -1))
+ setLocalTypebot(lastTypebot)
+ }
+
+ const saveTypebot = async (typebot?: Typebot) => {
+ if (!localTypebot) return
+ setIsSavingLoading(true)
+ const { error } = await updateTypebot(
+ typebot?.id ?? localTypebot.id,
+ typebot ?? localTypebot
+ )
+ setIsSavingLoading(false)
+ if (error) return toast({ title: error.name, description: error.message })
+ mutate({ typebot: typebot ?? localTypebot })
+ window.removeEventListener('beforeunload', preventUserFromRefreshing)
+ }
+
+ const updateLocalTypebot = ({
+ publicId,
+ settings,
+ theme,
+ }: UpdateTypebotPayload) => {
+ setLocalTypebot((typebot) => {
+ if (!typebot) return
+ if (publicId) typebot.publicId = publicId
+ if (settings) typebot.settings = settings
+ if (theme) typebot.theme = theme
+ })
+ }
+
+ const publishTypebot = async () => {
+ if (!localTypebot) return
+ const newLocalTypebot = { ...localTypebot }
+ if (!localPublishedTypebot) {
+ const newPublicId = parseDefaultPublicId(
+ localTypebot.name,
+ localTypebot.id
+ )
+ updateLocalTypebot({ publicId: newPublicId })
+ newLocalTypebot.publicId = newPublicId
+ }
+ if (hasUnsavedChanges || !localPublishedTypebot)
+ await saveTypebot(newLocalTypebot)
+ setIsPublishing(true)
+ if (localPublishedTypebot) {
+ const { error } = await updatePublishedTypebot(
+ localPublishedTypebot.id,
+ omit(parseTypebotToPublicTypebot(newLocalTypebot), 'id')
+ )
+ setIsPublishing(false)
+ if (error) return toast({ title: error.name, description: error.message })
+ } else {
+ const { data, error } = await createPublishedTypebot(
+ omit(parseTypebotToPublicTypebot(newLocalTypebot), 'id')
+ )
+ setLocalPublishedTypebot(data)
+ setIsPublishing(false)
+ if (error) return toast({ title: error.name, description: error.message })
+ }
+ mutate({ typebot: localTypebot })
+ }
+
+ return (
+ ),
+ ...stepsAction(setLocalTypebot as Updater),
+ }}
+ >
+ {children}
+
+ )
+}
+
+export const useTypebot = () => useContext(typebotContext)
+
+export const useFetchedTypebot = ({
+ typebotId,
+ onError,
+}: {
+ typebotId?: string
+ onError: (error: Error) => void
+}) => {
+ const { data, error, mutate } = useSWR<
+ { typebot: Typebot; publishedTypebot?: PublicTypebot },
+ Error
+ >(typebotId ? `/api/typebots/${typebotId}` : null, fetcher)
+ if (error) onError(error)
+ return {
+ typebot: data?.typebot,
+ publishedTypebot: data?.publishedTypebot,
+ isLoading: !error && !data,
+ mutate,
+ }
+}
diff --git a/apps/builder/contexts/TypebotContext/actions/blocks.ts b/apps/builder/contexts/TypebotContext/actions/blocks.ts
new file mode 100644
index 0000000000..2f73a7c68b
--- /dev/null
+++ b/apps/builder/contexts/TypebotContext/actions/blocks.ts
@@ -0,0 +1,40 @@
+import { Coordinates } from 'contexts/GraphContext'
+import { Block, Step, StepType, Typebot } from 'models'
+import { parseNewBlock } from 'services/typebots'
+import { Updater } from 'use-immer'
+import { createStepDraft, deleteStepDraft } from './steps'
+
+export type BlocksActions = {
+ createBlock: (props: Coordinates & { step: StepType | Step }) => void
+ updateBlock: (blockId: string, updates: Partial>) => void
+ deleteBlock: (blockId: string) => void
+}
+
+export const blocksActions = (setTypebot: Updater): BlocksActions => ({
+ createBlock: ({ x, y, step }: Coordinates & { step: StepType | Step }) => {
+ setTypebot((typebot) => {
+ const newBlock = parseNewBlock({
+ totalBlocks: typebot.blocks.allIds.length,
+ initialCoordinates: { x, y },
+ })
+ typebot.blocks.byId[newBlock.id] = newBlock
+ typebot.blocks.allIds.push(newBlock.id)
+ createStepDraft(typebot, step, newBlock.id)
+ })
+ },
+ updateBlock: (blockId: string, updates: Partial>) =>
+ setTypebot((typebot) => {
+ typebot.blocks.byId[blockId] = {
+ ...typebot.blocks.byId[blockId],
+ ...updates,
+ }
+ }),
+ deleteBlock: (blockId: string) =>
+ setTypebot((typebot) => {
+ const block = typebot.blocks.byId[blockId]
+ block.stepIds.forEach((stepId) => deleteStepDraft(typebot, stepId))
+ delete typebot.blocks.byId[blockId]
+ const index = typebot.blocks.allIds.indexOf(blockId)
+ if (index !== -1) typebot.blocks.allIds.splice(index, 1)
+ }),
+})
diff --git a/apps/builder/contexts/TypebotContext/actions/steps.ts b/apps/builder/contexts/TypebotContext/actions/steps.ts
new file mode 100644
index 0000000000..90e394bbd2
--- /dev/null
+++ b/apps/builder/contexts/TypebotContext/actions/steps.ts
@@ -0,0 +1,51 @@
+import { Step, StepType, Typebot } from 'models'
+import { parseNewStep } from 'services/typebots'
+import { Updater } from 'use-immer'
+import { WritableDraft } from 'immer/dist/types/types-external'
+
+export type StepsActions = {
+ createStep: (blockId: string, step: StepType | Step, index?: number) => void
+ updateStep: (
+ stepId: string,
+ updates: Partial>
+ ) => void
+ deleteStep: (stepId: string) => void
+}
+
+export const stepsAction = (setTypebot: Updater): StepsActions => ({
+ createStep: (blockId: string, step: StepType | Step, index?: number) => {
+ setTypebot((typebot) => {
+ createStepDraft(typebot, step, blockId, index)
+ })
+ },
+ updateStep: (stepId: string, updates: Partial>) =>
+ setTypebot((typebot) => {
+ typebot.steps.byId[stepId] = { ...typebot.steps.byId[stepId], ...updates }
+ }),
+ deleteStep: (stepId: string) => {
+ setTypebot((typebot) => {
+ deleteStepDraft(typebot, stepId)
+ })
+ },
+})
+
+export const deleteStepDraft = (
+ typebot: WritableDraft,
+ stepId: string
+) => {
+ delete typebot.steps.byId[stepId]
+ const index = typebot.steps.allIds.indexOf(stepId)
+ if (index !== -1) typebot.steps.allIds.splice(index, 1)
+}
+
+export const createStepDraft = (
+ typebot: WritableDraft,
+ step: StepType | Step,
+ blockId: string,
+ index?: number
+) => {
+ const newStep = typeof step === 'string' ? parseNewStep(step, blockId) : step
+ typebot.steps.byId[newStep.id] = newStep
+ typebot.steps.allIds.push(newStep.id)
+ typebot.blocks.byId[blockId].stepIds.splice(index ?? 0, 0, newStep.id)
+}
diff --git a/apps/builder/contexts/TypebotContext/index.ts b/apps/builder/contexts/TypebotContext/index.ts
new file mode 100644
index 0000000000..0a27ff3852
--- /dev/null
+++ b/apps/builder/contexts/TypebotContext/index.ts
@@ -0,0 +1 @@
+export { TypebotContext } from './TypebotContext'
diff --git a/apps/builder/cypress/plugins/database.ts b/apps/builder/cypress/plugins/database.ts
index 52e3a1f7ca..4fef0458a0 100644
--- a/apps/builder/cypress/plugins/database.ts
+++ b/apps/builder/cypress/plugins/database.ts
@@ -1,5 +1,6 @@
-import { parseNewTypebot, PublicTypebot, StepType, Typebot } from 'bot-engine'
+import { PublicTypebot, StepType, Typebot } from 'models'
import { Plan, PrismaClient } from 'db'
+import { parseTestTypebot } from './utils'
const prisma = new PrismaClient()
@@ -34,51 +35,50 @@ const createFolders = () =>
})
const createTypebots = async () => {
- const typebot2: Typebot = {
- ...(parseNewTypebot({
+ const typebot2 = {
+ ...parseTestTypebot({
+ id: 'typebot2',
name: 'Typebot #2',
ownerId: 'test2',
- folderId: null,
- }) as Typebot),
- id: 'typebot2',
- startBlock: {
- id: 'start-block',
- steps: [
- {
- id: 'start-step',
- blockId: 'start-block',
- type: StepType.START,
- label: 'Start',
- target: { blockId: 'block1' },
+ blocks: {
+ byId: {
+ block1: {
+ id: 'block1',
+ title: 'Block #1',
+ stepIds: ['step1'],
+ graphCoordinates: { x: 200, y: 200 },
+ },
},
- ],
- graphCoordinates: { x: 0, y: 0 },
- title: 'Start',
- },
- blocks: [
- {
- title: 'Block #1',
- id: 'block1',
- steps: [{ id: 'step1', type: StepType.TEXT_INPUT, blockId: 'block1' }],
- graphCoordinates: { x: 200, y: 200 },
+ allIds: ['block1'],
},
- ],
+ steps: {
+ byId: {
+ step1: {
+ id: 'step1',
+ type: StepType.TEXT_INPUT,
+ blockId: 'block1',
+ },
+ },
+ allIds: ['step1'],
+ },
+ }),
}
await prisma.typebot.createMany({
data: [
{
- ...parseNewTypebot({
+ ...parseTestTypebot({
+ id: 'typebot1',
name: 'Typebot #1',
ownerId: 'test2',
- folderId: null,
+ blocks: { byId: {}, allIds: [] },
+ steps: { byId: {}, allIds: [] },
}),
- id: 'typebot1',
},
typebot2,
- ],
+ ] as any,
})
return prisma.publicTypebot.createMany({
- data: [parseTypebotToPublicTypebot('publictypebot2', typebot2)],
+ data: [parseTypebotToPublicTypebot('publictypebot2', typebot2)] as any,
})
}
@@ -118,8 +118,8 @@ const parseTypebotToPublicTypebot = (
): PublicTypebot => ({
id,
blocks: typebot.blocks,
+ steps: typebot.steps,
name: typebot.name,
- startBlock: typebot.startBlock,
typebotId: typebot.id,
theme: typebot.theme,
settings: typebot.settings,
diff --git a/apps/builder/cypress/plugins/utils.ts b/apps/builder/cypress/plugins/utils.ts
new file mode 100644
index 0000000000..303b9412ff
--- /dev/null
+++ b/apps/builder/cypress/plugins/utils.ts
@@ -0,0 +1,75 @@
+import {
+ Block,
+ StepType,
+ Theme,
+ BackgroundType,
+ Settings,
+ Typebot,
+ Table,
+ Step,
+} from 'models'
+
+export const parseTestTypebot = ({
+ id,
+ ownerId,
+ name,
+ blocks,
+ steps,
+}: {
+ id: string
+ ownerId: string
+ name: string
+ blocks: Table
+ steps: Table
+}): Typebot => {
+ const theme: Theme = {
+ general: {
+ font: 'Open Sans',
+ background: { type: BackgroundType.NONE, content: '#ffffff' },
+ },
+ }
+ const settings: Settings = {
+ typingEmulation: {
+ enabled: true,
+ speed: 300,
+ maxDelay: 1.5,
+ },
+ }
+ return {
+ id,
+ folderId: null,
+ name,
+ ownerId,
+ theme,
+ settings,
+ createdAt: new Date(),
+ blocks: {
+ byId: {
+ block0: {
+ id: 'block0',
+ title: 'Block #0',
+ stepIds: ['step0'],
+ graphCoordinates: { x: 0, y: 0 },
+ },
+ ...blocks.byId,
+ },
+ allIds: ['block0', ...blocks.allIds],
+ },
+ steps: {
+ byId: {
+ step0: {
+ id: 'step0',
+ type: StepType.START,
+ blockId: 'block0',
+ label: 'Start',
+ target: { blockId: 'block1' },
+ },
+ ...steps.byId,
+ },
+ allIds: ['step0', ...steps.allIds],
+ },
+ publicId: null,
+ publishedTypebotId: null,
+ updatedAt: new Date(),
+ }
+}
diff --git a/apps/builder/cypress/tests/results.ts b/apps/builder/cypress/tests/results.ts
index 0a3781f177..f23c1d43ac 100644
--- a/apps/builder/cypress/tests/results.ts
+++ b/apps/builder/cypress/tests/results.ts
@@ -2,15 +2,10 @@ import path from 'path'
import { parse } from 'papaparse'
describe('ResultsPage', () => {
- before(() => {
- cy.intercept({ url: '/api/typebots/typebot2/results*', method: 'GET' }).as(
- 'getResults'
- )
+ beforeEach(() => {
cy.intercept({ url: '/api/typebots/typebot2/results*', method: 'GET' }).as(
'getResults'
)
- })
- beforeEach(() => {
cy.task('seed')
cy.signOut()
})
@@ -48,7 +43,7 @@ describe('ResultsPage', () => {
cy.findByText('content0').should('exist')
})
- it.only('should correctly export selection in CSV', () => {
+ it('should correctly export selection in CSV', () => {
const downloadsFolder = Cypress.config('downloadsFolder')
cy.signIn('test2@gmail.com')
cy.visit('/typebots/typebot2/results')
diff --git a/apps/builder/layouts/results/AnalyticsContent.tsx b/apps/builder/layouts/results/AnalyticsContent.tsx
index d56e92dabc..6e6f61947b 100644
--- a/apps/builder/layouts/results/AnalyticsContent.tsx
+++ b/apps/builder/layouts/results/AnalyticsContent.tsx
@@ -1,9 +1,9 @@
import { Flex, useToast } from '@chakra-ui/react'
-import { Stats } from 'bot-engine'
import AnalyticsGraph from 'components/analytics/graph/AnalyticsGraph'
import { StatsCards } from 'components/analytics/StatsCards'
import { AnalyticsGraphProvider } from 'contexts/AnalyticsGraphProvider'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
+import { Stats } from 'models'
import React from 'react'
import { useAnswersCount } from 'services/analytics'
diff --git a/apps/builder/layouts/results/ResultsContent.tsx b/apps/builder/layouts/results/ResultsContent.tsx
index 29042702ee..4e6972445c 100644
--- a/apps/builder/layouts/results/ResultsContent.tsx
+++ b/apps/builder/layouts/results/ResultsContent.tsx
@@ -1,6 +1,6 @@
import { Button, Flex, HStack, Tag, useToast, Text } from '@chakra-ui/react'
import { NextChakraLink } from 'components/nextChakra/NextChakraLink'
-import { useTypebot } from 'contexts/TypebotContext'
+import { useTypebot } from 'contexts/TypebotContext/TypebotContext'
import { useRouter } from 'next/router'
import React, { useMemo } from 'react'
import { useStats } from 'services/analytics'
diff --git a/apps/builder/next.config.js b/apps/builder/next.config.js
deleted file mode 100644
index f4620f0887..0000000000
--- a/apps/builder/next.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// eslint-disable-next-line @typescript-eslint/no-var-requires
-const withTM = require('next-transpile-modules')(['utils'])
-
-module.exports = withTM({
- reactStrictMode: true,
-})
diff --git a/apps/builder/package.json b/apps/builder/package.json
index 0c86984a71..37737f92cf 100644
--- a/apps/builder/package.json
+++ b/apps/builder/package.json
@@ -11,7 +11,7 @@
},
"dependencies": {
"@chakra-ui/css-reset": "^1.1.1",
- "@chakra-ui/react": "^1.7.3",
+ "@chakra-ui/react": "^1.7.4",
"@dnd-kit/core": "^4.0.3",
"@dnd-kit/sortable": "^5.1.0",
"@emotion/react": "^11.7.1",
@@ -24,13 +24,14 @@
"@udecode/plate-link": "^9.0.0",
"@udecode/plate-ui-link": "^9.0.0",
"@udecode/plate-ui-toolbar": "^9.0.0",
- "aws-sdk": "^2.1048.0",
+ "aws-sdk": "^2.1051.0",
"bot-engine": "*",
"db": "*",
"fast-equals": "^2.0.4",
"focus-visible": "^5.2.0",
"framer-motion": "^4",
"htmlparser2": "^7.2.0",
+ "immer": "^9.0.7",
"kbar": "^0.1.0-beta.24",
"micro": "^9.3.4",
"micro-cors": "^0.1.1",
@@ -45,7 +46,7 @@
"react-frame-component": "^5.2.1",
"react-table": "^7.7.0",
"short-uuid": "^4.2.0",
- "slate": "^0.72.0",
+ "slate": "^0.72.3",
"slate-history": "^0.66.0",
"slate-hyperscript": "^0.67.0",
"slate-react": "^0.72.1",
@@ -54,7 +55,9 @@
"svg-round-corners": "^0.3.0",
"swr": "^1.1.2",
"use-debounce": "^7.0.1",
- "utils": "*"
+ "use-immer": "^0.6.0",
+ "utils": "*",
+ "models": "*"
},
"devDependencies": {
"@testing-library/cypress": "^8.0.2",
@@ -63,10 +66,10 @@
"@types/nprogress": "^0.2.0",
"@types/papaparse": "^5.3.1",
"@types/qs": "^6.9.7",
- "@types/react": "^17.0.37",
+ "@types/react": "^17.0.38",
"@types/react-table": "^7.7.9",
"@types/testing-library__cypress": "^5.0.9",
- "@typescript-eslint/eslint-plugin": "^5.8.0",
+ "@typescript-eslint/eslint-plugin": "^5.9.0",
"cypress": "^9.2.0",
"cypress-file-upload": "^5.0.8",
"cypress-social-logins": "^1.13.0",
diff --git a/apps/builder/pages/api/typebots.ts b/apps/builder/pages/api/typebots.ts
index 2fae467f80..29597aa3f1 100644
--- a/apps/builder/pages/api/typebots.ts
+++ b/apps/builder/pages/api/typebots.ts
@@ -1,8 +1,8 @@
-import { parseNewTypebot } from 'bot-engine'
-import { User } from 'db'
+import { Prisma, User } from 'db'
import prisma from 'libs/prisma'
import { NextApiRequest, NextApiResponse } from 'next'
import { getSession } from 'next-auth/react'
+import { parseNewTypebot } from 'services/typebots'
import { methodNotAllowed } from 'utils'
const handler = async (req: NextApiRequest, res: NextApiResponse) => {
@@ -26,7 +26,10 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
if (req.method === 'POST') {
const data = JSON.parse(req.body)
const typebot = await prisma.typebot.create({
- data: parseNewTypebot({ ownerId: user.id, ...data }),
+ data: parseNewTypebot({
+ ownerId: user.id,
+ ...data,
+ }) as Prisma.TypebotUncheckedCreateInput,
})
return res.send(typebot)
}
diff --git a/apps/builder/pages/api/typebots/[typebotId]/results/answers/count.ts b/apps/builder/pages/api/typebots/[typebotId]/results/answers/count.ts
index b2e0f3fed1..93784d3f46 100644
--- a/apps/builder/pages/api/typebots/[typebotId]/results/answers/count.ts
+++ b/apps/builder/pages/api/typebots/[typebotId]/results/answers/count.ts
@@ -1,4 +1,4 @@
-import { PublicTypebot } from 'bot-engine'
+import { PublicTypebot } from 'models'
import { User } from 'db'
import prisma from 'libs/prisma'
import { NextApiRequest, NextApiResponse } from 'next'
@@ -24,14 +24,14 @@ const handler = async (req: NextApiRequest, res: NextApiResponse) => {
const answersCounts: { blockId: string; totalAnswers: number }[] =
await Promise.all(
- (typebot.publishedTypebot as PublicTypebot).blocks.map(
- async (block) => {
- const totalAnswers = await prisma.answer.count({
- where: { blockId: block.id },
- })
- return { blockId: block.id, totalAnswers }
- }
- )
+ (
+ typebot.publishedTypebot as unknown as PublicTypebot
+ ).blocks.allIds.map(async (blockId) => {
+ const totalAnswers = await prisma.answer.count({
+ where: { blockId },
+ })
+ return { blockId, totalAnswers }
+ })
)
return res.status(200).send({ answersCounts })
}
diff --git a/apps/builder/pages/api/typebots/[typebotId]/results/stats.ts b/apps/builder/pages/api/typebots/[typebotId]/results/stats.ts
index fc724cdff7..7b527b9f33 100644
--- a/apps/builder/pages/api/typebots/[typebotId]/results/stats.ts
+++ b/apps/builder/pages/api/typebots/[typebotId]/results/stats.ts
@@ -1,6 +1,6 @@
-import { Stats } from 'bot-engine'
import { User } from 'db'
import prisma from 'libs/prisma'
+import { Stats } from 'models'
import { NextApiRequest, NextApiResponse } from 'next'
import { getSession } from 'next-auth/react'
import { methodNotAllowed } from 'utils'
diff --git a/apps/builder/pages/typebots/[id]/edit.tsx b/apps/builder/pages/typebots/[id]/edit.tsx
index 3ffc16c714..560bc82b79 100644
--- a/apps/builder/pages/typebots/[id]/edit.tsx
+++ b/apps/builder/pages/typebots/[id]/edit.tsx
@@ -3,7 +3,7 @@ import { Board } from 'components/board/Board'
import { Seo } from 'components/Seo'
import { TypebotHeader } from 'components/shared/TypebotHeader'
import { EditorContext } from 'contexts/EditorContext'
-import { TypebotContext } from 'contexts/TypebotContext'
+import { TypebotContext } from 'contexts/TypebotContext/TypebotContext'
import { useRouter } from 'next/router'
import { KBarProvider } from 'kbar'
import React from 'react'
diff --git a/apps/builder/pages/typebots/[id]/results.tsx b/apps/builder/pages/typebots/[id]/results.tsx
index b6aa38d9b6..2e6d9a62dc 100644
--- a/apps/builder/pages/typebots/[id]/results.tsx
+++ b/apps/builder/pages/typebots/[id]/results.tsx
@@ -2,7 +2,7 @@ import { Flex } from '@chakra-ui/layout'
import { ResultsContent } from 'layouts/results/ResultsContent'
import { Seo } from 'components/Seo'
import { TypebotHeader } from 'components/shared/TypebotHeader'
-import { TypebotContext } from 'contexts/TypebotContext'
+import { TypebotContext } from 'contexts/TypebotContext/TypebotContext'
import { useRouter } from 'next/router'
import React from 'react'
import { UserContext } from 'contexts/UserContext'
diff --git a/apps/builder/pages/typebots/[id]/results/analytics.tsx b/apps/builder/pages/typebots/[id]/results/analytics.tsx
index f5119db0c9..4562eb135d 100644
--- a/apps/builder/pages/typebots/[id]/results/analytics.tsx
+++ b/apps/builder/pages/typebots/[id]/results/analytics.tsx
@@ -2,7 +2,7 @@ import { Flex } from '@chakra-ui/layout'
import { ResultsContent } from 'layouts/results/ResultsContent'
import { Seo } from 'components/Seo'
import { TypebotHeader } from 'components/shared/TypebotHeader'
-import { TypebotContext } from 'contexts/TypebotContext'
+import { TypebotContext } from 'contexts/TypebotContext/TypebotContext'
import { useRouter } from 'next/router'
import React from 'react'
import { UserContext } from 'contexts/UserContext'
diff --git a/apps/builder/pages/typebots/[id]/settings.tsx b/apps/builder/pages/typebots/[id]/settings.tsx
index 11823edbc4..67b3ff34e3 100644
--- a/apps/builder/pages/typebots/[id]/settings.tsx
+++ b/apps/builder/pages/typebots/[id]/settings.tsx
@@ -2,7 +2,7 @@ import { Flex } from '@chakra-ui/layout'
import { Seo } from 'components/Seo'
import { SettingsContent } from 'components/settings/SettingsContent'
import { TypebotHeader } from 'components/shared/TypebotHeader'
-import { TypebotContext } from 'contexts/TypebotContext'
+import { TypebotContext } from 'contexts/TypebotContext/TypebotContext'
import { UserContext } from 'contexts/UserContext'
import { useRouter } from 'next/router'
import React from 'react'
diff --git a/apps/builder/pages/typebots/[id]/share.tsx b/apps/builder/pages/typebots/[id]/share.tsx
index 790215fd87..abd23c9d3b 100644
--- a/apps/builder/pages/typebots/[id]/share.tsx
+++ b/apps/builder/pages/typebots/[id]/share.tsx
@@ -2,7 +2,7 @@ import { Flex } from '@chakra-ui/layout'
import { Seo } from 'components/Seo'
import { ShareContent } from 'components/share/ShareContent'
import { TypebotHeader } from 'components/shared/TypebotHeader'
-import { TypebotContext } from 'contexts/TypebotContext'
+import { TypebotContext } from 'contexts/TypebotContext/TypebotContext'
import { UserContext } from 'contexts/UserContext'
import { useRouter } from 'next/router'
import React from 'react'
diff --git a/apps/builder/pages/typebots/[id]/theme.tsx b/apps/builder/pages/typebots/[id]/theme.tsx
index 059191b1a2..7904237356 100644
--- a/apps/builder/pages/typebots/[id]/theme.tsx
+++ b/apps/builder/pages/typebots/[id]/theme.tsx
@@ -2,7 +2,7 @@ import { Flex } from '@chakra-ui/layout'
import { Seo } from 'components/Seo'
import { TypebotHeader } from 'components/shared/TypebotHeader'
import { ThemeContent } from 'components/theme/ThemeContent'
-import { TypebotContext } from 'contexts/TypebotContext'
+import { TypebotContext } from 'contexts/TypebotContext/TypebotContext'
import { UserContext } from 'contexts/UserContext'
import { useRouter } from 'next/router'
import React from 'react'
diff --git a/apps/builder/services/analytics.ts b/apps/builder/services/analytics.ts
index bc074b0948..1c7433bfcb 100644
--- a/apps/builder/services/analytics.ts
+++ b/apps/builder/services/analytics.ts
@@ -1,4 +1,4 @@
-import { Stats } from 'bot-engine'
+import { Stats } from 'models'
import useSWR from 'swr'
import { fetcher } from './utils'
diff --git a/apps/builder/services/graph.ts b/apps/builder/services/graph.ts
index 08dd6b6056..b1a5ec218b 100644
--- a/apps/builder/services/graph.ts
+++ b/apps/builder/services/graph.ts
@@ -1,5 +1,5 @@
import { Coordinates } from '@dnd-kit/core/dist/types'
-import { Block, StartBlock } from 'bot-engine'
+import { Block } from 'models'
import { AnchorsPositionProps } from 'components/board/graph/Edges/Edge'
import {
stubLength,
@@ -143,7 +143,7 @@ const computeFiveSegments = (
}
export const getAnchorsPosition = (
- sourceBlock: Block | StartBlock,
+ sourceBlock: Block,
targetBlock: Block,
sourceStepIndex: number,
targetStepIndex?: number
diff --git a/apps/builder/services/publicTypebot.tsx b/apps/builder/services/publicTypebot.tsx
index 604c1967f5..8174089396 100644
--- a/apps/builder/services/publicTypebot.tsx
+++ b/apps/builder/services/publicTypebot.tsx
@@ -1,11 +1,4 @@
-import {
- Block,
- InputStep,
- PublicTypebot,
- Step,
- StepType,
- Typebot,
-} from 'bot-engine'
+import { InputStep, PublicTypebot, Step, StepType, Typebot } from 'models'
import { sendRequest } from './utils'
import shortId from 'short-uuid'
import { HStack, Text } from '@chakra-ui/react'
@@ -17,8 +10,8 @@ export const parseTypebotToPublicTypebot = (
): PublicTypebot => ({
id: shortId.generate(),
blocks: typebot.blocks,
+ steps: typebot.steps,
name: typebot.name,
- startBlock: typebot.startBlock,
typebotId: typebot.id,
theme: typebot.theme,
settings: typebot.settings,
@@ -28,7 +21,7 @@ export const parseTypebotToPublicTypebot = (
export const createPublishedTypebot = async (
typebot: Omit
) =>
- sendRequest({
+ sendRequest({
url: `/api/publicTypebots`,
method: 'POST',
body: typebot,
@@ -49,32 +42,47 @@ export const parseSubmissionsColumns = (
): {
Header: JSX.Element
accessor: string
-}[] => [
- {
- Header: (
-
-
- Submitted at
-
- ),
- accessor: 'createdAt',
- },
- ...(typebot?.blocks ?? []).filter(blockContainsInput).map((block) => ({
- Header: (
-
- step.target)?.type ?? StepType.TEXT_INPUT
- }
- />
- {block.title}
-
- ),
- accessor: block.id,
- })),
-]
+}[] => {
+ console.log(typebot)
+ if (!typebot) return []
+ return [
+ {
+ Header: (
+
+
+ Submitted at
+
+ ),
+ accessor: 'createdAt',
+ },
+ ...typebot.blocks.allIds
+ .filter((blockId) => typebot && blockContainsInput(typebot, blockId))
+ .map((blockId) => {
+ const block = typebot.blocks.byId[blockId]
+ const inputStepId = block.stepIds.find((stepId) =>
+ stepIsInput(typebot.steps.byId[stepId])
+ )
+ const inputStep = typebot.steps.byId[inputStepId as string]
+ return {
+ Header: (
+
+
+ {block.title}
+
+ ),
+ accessor: blockId,
+ }
+ }),
+ ]
+}
-const blockContainsInput = (block: Block) => block.steps.some(stepIsInput)
+const blockContainsInput = (
+ typebot: PublicTypebot | Typebot,
+ blockId: string
+) =>
+ typebot.blocks.byId[blockId].stepIds.some((stepId) =>
+ stepIsInput(typebot.steps.byId[stepId])
+ )
const stepIsInput = (step: Step): step is InputStep =>
step.type === StepType.TEXT_INPUT
diff --git a/apps/builder/services/results.ts b/apps/builder/services/results.ts
index a99f203d1f..f7dc9276f5 100644
--- a/apps/builder/services/results.ts
+++ b/apps/builder/services/results.ts
@@ -1,4 +1,4 @@
-import { Result } from 'bot-engine'
+import { Result } from 'models'
import useSWRInfinite from 'swr/infinite'
import { fetcher, sendRequest } from './utils'
import { stringify } from 'qs'
diff --git a/apps/builder/services/typebots.ts b/apps/builder/services/typebots.ts
index ff7deed9f5..97d1e96384 100644
--- a/apps/builder/services/typebots.ts
+++ b/apps/builder/services/typebots.ts
@@ -5,9 +5,13 @@ import {
TextStep,
TextInputStep,
PublicTypebot,
-} from 'bot-engine'
+ BackgroundType,
+ Settings,
+ StartStep,
+ Theme,
+} from 'models'
import shortId from 'short-uuid'
-import { Typebot } from 'bot-engine'
+import { Typebot } from 'models'
import useSWR from 'swr'
import { fetcher, sendRequest, toKebabCase } from './utils'
import { deepEqual } from 'fast-equals'
@@ -85,13 +89,9 @@ export const patchTypebot = async (id: string, typebot: Partial) =>
})
export const parseNewBlock = ({
- type,
totalBlocks,
initialCoordinates,
- step,
}: {
- step?: Step
- type?: StepType
totalBlocks: number
initialCoordinates: { x: number; y: number }
}): Block => {
@@ -100,9 +100,7 @@ export const parseNewBlock = ({
id,
title: `Block #${totalBlocks + 1}`,
graphCoordinates: initialCoordinates,
- steps: [
- step ? { ...step, blockId: id } : parseNewStep(type as StepType, id),
- ],
+ stepIds: [],
}
}
@@ -158,11 +156,58 @@ export const checkIfPublished = (
publicTypebot: PublicTypebot
) =>
deepEqual(typebot.blocks, publicTypebot.blocks) &&
- deepEqual(typebot.startBlock, publicTypebot.startBlock) &&
+ deepEqual(typebot.steps, publicTypebot.steps) &&
typebot.name === publicTypebot.name &&
typebot.publicId === publicTypebot.publicId &&
deepEqual(typebot.settings, publicTypebot.settings) &&
deepEqual(typebot.theme, publicTypebot.theme)
export const parseDefaultPublicId = (name: string, id: string) =>
- toKebabCase(`${name}-${id?.slice(0, 5)}`)
+ toKebabCase(name) + `-${id?.slice(-7)}`
+
+export const parseNewTypebot = ({
+ ownerId,
+ folderId,
+ name,
+}: {
+ ownerId: string
+ folderId: string | null
+ name: string
+}): Partial => {
+ const startBlockId = shortId.generate()
+ const startStepId = shortId.generate()
+ const startStep: StartStep = {
+ blockId: startBlockId,
+ id: startStepId,
+ label: 'Start',
+ type: StepType.START,
+ }
+ const startBlock: Block = {
+ id: startBlockId,
+ title: 'Start',
+ graphCoordinates: { x: 0, y: 0 },
+ stepIds: [startStepId],
+ }
+ const theme: Theme = {
+ general: {
+ font: 'Open Sans',
+ background: { type: BackgroundType.NONE, content: '#ffffff' },
+ },
+ }
+ const settings: Settings = {
+ typingEmulation: {
+ enabled: true,
+ speed: 300,
+ maxDelay: 1.5,
+ },
+ }
+ return {
+ folderId,
+ name,
+ ownerId,
+ blocks: { byId: { [startBlockId]: startBlock }, allIds: [startBlockId] },
+ steps: { byId: { [startStepId]: startStep }, allIds: [startStepId] },
+ theme,
+ settings,
+ }
+}
diff --git a/apps/viewer/layouts/TypebotPage.tsx b/apps/viewer/layouts/TypebotPage.tsx
index 12067049c7..e62a7f98ba 100644
--- a/apps/viewer/layouts/TypebotPage.tsx
+++ b/apps/viewer/layouts/TypebotPage.tsx
@@ -1,4 +1,5 @@
-import { Answer, PublicTypebot, TypebotViewer } from 'bot-engine'
+import { TypebotViewer } from 'bot-engine'
+import { Answer, PublicTypebot } from 'models'
import React, { useEffect, useState } from 'react'
import { upsertAnswer } from 'services/answer'
import { SEO } from '../components/Seo'
diff --git a/apps/viewer/next.config.js b/apps/viewer/next.config.js
deleted file mode 100644
index f4620f0887..0000000000
--- a/apps/viewer/next.config.js
+++ /dev/null
@@ -1,6 +0,0 @@
-// eslint-disable-next-line @typescript-eslint/no-var-requires
-const withTM = require('next-transpile-modules')(['utils'])
-
-module.exports = withTM({
- reactStrictMode: true,
-})
diff --git a/apps/viewer/package.json b/apps/viewer/package.json
index 1a6de1fe58..cb95f9473d 100644
--- a/apps/viewer/package.json
+++ b/apps/viewer/package.json
@@ -11,6 +11,7 @@
"dependencies": {
"bot-engine": "*",
"db": "*",
+ "models": "*",
"next": "^12.0.7",
"react": "^17.0.2",
"react-dom": "^17.0.2",
@@ -19,7 +20,7 @@
"devDependencies": {
"@types/node": "^17.0.4",
"@types/react": "^17.0.38",
- "@typescript-eslint/eslint-plugin": "^5.8.0",
+ "@typescript-eslint/eslint-plugin": "^5.9.0",
"eslint": "<8.0.0",
"eslint-config-next": "12.0.7",
"eslint-config-prettier": "^8.3.0",
diff --git a/apps/viewer/pages/[publicId].tsx b/apps/viewer/pages/[publicId].tsx
index f8ddfc994f..24a5ff3b81 100644
--- a/apps/viewer/pages/[publicId].tsx
+++ b/apps/viewer/pages/[publicId].tsx
@@ -1,4 +1,4 @@
-import { PublicTypebot } from 'bot-engine'
+import { PublicTypebot } from 'models'
import { GetServerSideProps, GetServerSidePropsContext } from 'next'
import { TypebotPage, TypebotPageProps } from '../layouts/TypebotPage'
import prisma from '../libs/prisma'
diff --git a/apps/viewer/pages/index.tsx b/apps/viewer/pages/index.tsx
index 61e5bd4192..f643b1e3d5 100644
--- a/apps/viewer/pages/index.tsx
+++ b/apps/viewer/pages/index.tsx
@@ -1,4 +1,4 @@
-import { PublicTypebot } from 'bot-engine'
+import { PublicTypebot } from 'models'
import { GetServerSideProps, GetServerSidePropsContext } from 'next'
import { TypebotPage, TypebotPageProps } from '../layouts/TypebotPage'
import prisma from '../libs/prisma'
diff --git a/apps/viewer/services/answer.ts b/apps/viewer/services/answer.ts
index 07d8b08c3e..ca65254c68 100644
--- a/apps/viewer/services/answer.ts
+++ b/apps/viewer/services/answer.ts
@@ -1,4 +1,4 @@
-import { Answer } from 'bot-engine'
+import { Answer } from 'models'
import { sendRequest } from 'utils'
export const upsertAnswer = async (answer: Answer & { resultId: string }) => {
diff --git a/packages/bot-engine/package.json b/packages/bot-engine/package.json
index cb6ecc68c1..91a31128c1 100644
--- a/packages/bot-engine/package.json
+++ b/packages/bot-engine/package.json
@@ -8,26 +8,28 @@
"dependencies": {
"db": "*",
"fast-equals": "^2.0.4",
+ "models": "*",
"react-frame-component": "^5.2.1",
"react-scroll": "^1.8.4",
- "react-transition-group": "^4.4.2"
+ "react-transition-group": "^4.4.2",
+ "utils": "*"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^21.0.1",
- "@rollup/plugin-node-resolve": "^13.1.1",
+ "@rollup/plugin-node-resolve": "^13.1.3",
"@rollup/plugin-typescript": "^8.3.0",
"@types/react": "^17.0.38",
"@types/react-scroll": "^1.8.3",
"@types/react-transition-group": "^4.4.4",
- "autoprefixer": "^10.4.0",
+ "autoprefixer": "^10.4.1",
"npm-run-all": "^4.1.5",
"postcss": "^8.4.5",
- "rollup": "^2.62.0",
+ "rollup": "^2.63.0",
"rollup-plugin-dts": "^4.1.0",
"rollup-plugin-peer-deps-external": "^2.2.4",
"rollup-plugin-postcss": "^4.0.2",
"rollup-plugin-terser": "^7.0.2",
- "tailwindcss": "^3.0.8",
+ "tailwindcss": "^3.0.11",
"typescript": "^4.5.4"
},
"peerDependencies": {
diff --git a/packages/bot-engine/src/components/ChatBlock/ChatBlock.tsx b/packages/bot-engine/src/components/ChatBlock/ChatBlock.tsx
index 87a64b62f9..5709754eb0 100644
--- a/packages/bot-engine/src/components/ChatBlock/ChatBlock.tsx
+++ b/packages/bot-engine/src/components/ChatBlock/ChatBlock.tsx
@@ -1,21 +1,21 @@
import React, { useEffect, useState } from 'react'
-import { Block, Step } from '../../models'
import { animateScroll as scroll } from 'react-scroll'
import { TransitionGroup, CSSTransition } from 'react-transition-group'
import { ChatStep } from './ChatStep'
import { AvatarSideContainer } from './AvatarSideContainer'
import { HostAvatarsContext } from '../../contexts/HostAvatarsContext'
+import { Step, Table } from 'models'
type ChatBlockProps = {
- block: Block
+ steps: Table
onBlockEnd: (nextBlockId?: string) => void
}
-export const ChatBlock = ({ block, onBlockEnd }: ChatBlockProps) => {
+export const ChatBlock = ({ steps, onBlockEnd }: ChatBlockProps) => {
const [displayedSteps, setDisplayedSteps] = useState([])
useEffect(() => {
- setDisplayedSteps([block.steps[0]])
+ setDisplayedSteps([steps.byId[steps.allIds[0]]])
}, [])
useEffect(() => {
@@ -33,10 +33,10 @@ export const ChatBlock = ({ block, onBlockEnd }: ChatBlockProps) => {
const currentStep = [...displayedSteps].pop()
if (
currentStep?.target?.blockId ||
- displayedSteps.length === block.steps.length
+ displayedSteps.length === steps.allIds.length
)
return onBlockEnd(currentStep?.target?.blockId)
- const nextStep = block.steps[displayedSteps.length]
+ const nextStep = steps.byId[displayedSteps.length]
if (nextStep) setDisplayedSteps([...displayedSteps, nextStep])
}
diff --git a/packages/bot-engine/src/components/ChatBlock/ChatStep/ChatStep.tsx b/packages/bot-engine/src/components/ChatBlock/ChatStep/ChatStep.tsx
index 5623bbfa39..f6d6d3cea9 100644
--- a/packages/bot-engine/src/components/ChatBlock/ChatStep/ChatStep.tsx
+++ b/packages/bot-engine/src/components/ChatBlock/ChatStep/ChatStep.tsx
@@ -1,7 +1,7 @@
import React, { useEffect, useState } from 'react'
import { useAnswers } from '../../../contexts/AnswersContext'
import { useHostAvatars } from '../../../contexts/HostAvatarsContext'
-import { Step } from '../../../models'
+import { Step } from 'models'
import { isTextInputStep, isTextStep } from '../../../services/utils'
import { GuestBubble } from './bubbles/GuestBubble'
import { HostMessageBubble } from './bubbles/HostMessageBubble'
diff --git a/packages/bot-engine/src/components/ChatBlock/ChatStep/bubbles/HostMessageBubble.tsx b/packages/bot-engine/src/components/ChatBlock/ChatStep/bubbles/HostMessageBubble.tsx
index 32235de994..cc2720010f 100644
--- a/packages/bot-engine/src/components/ChatBlock/ChatStep/bubbles/HostMessageBubble.tsx
+++ b/packages/bot-engine/src/components/ChatBlock/ChatStep/bubbles/HostMessageBubble.tsx
@@ -1,7 +1,7 @@
import React, { useEffect, useRef, useState } from 'react'
import { useHostAvatars } from '../../../../contexts/HostAvatarsContext'
import { useTypebot } from '../../../../contexts/TypebotContext'
-import { StepType, TextStep } from '../../../../models'
+import { StepType, TextStep } from 'models'
import { computeTypingTimeout } from '../../../../services/chat'
import { TypingContent } from './TypingContent'
diff --git a/packages/bot-engine/src/components/ConversationContainer.tsx b/packages/bot-engine/src/components/ConversationContainer.tsx
index 577aee94fb..c9f944caa3 100644
--- a/packages/bot-engine/src/components/ConversationContainer.tsx
+++ b/packages/bot-engine/src/components/ConversationContainer.tsx
@@ -1,12 +1,12 @@
import React, { useEffect, useRef, useState } from 'react'
-import { Answer, PublicTypebot } from '..'
-import { Block } from '..'
import { ChatBlock } from './ChatBlock/ChatBlock'
import { useFrame } from 'react-frame-component'
import { setCssVariablesValue } from '../services/theme'
import { useAnswers } from '../contexts/AnswersContext'
import { deepEqual } from 'fast-equals'
+import { Answer, Block, PublicTypebot } from 'models'
+import { filterTable } from 'utils'
type Props = {
typebot: PublicTypebot
@@ -28,14 +28,17 @@ export const ConversationContainer = ({
const displayNextBlock = (blockId?: string) => {
if (!blockId) return onCompleted()
- const nextBlock = typebot.blocks.find((b) => b.id === blockId)
+ const nextBlock = typebot.blocks.byId[blockId]
if (!nextBlock) return onCompleted()
onNewBlockVisible(blockId)
setDisplayedBlocks([...displayedBlocks, nextBlock])
}
useEffect(() => {
- const firstBlockId = typebot.startBlock.steps[0].target?.blockId
+ const blocks = typebot.blocks
+ const firstBlockId =
+ typebot.steps.byId[blocks.byId[blocks.allIds[0]].stepIds[0]].target
+ ?.blockId
if (firstBlockId) displayNextBlock(firstBlockId)
}, [])
@@ -58,7 +61,7 @@ export const ConversationContainer = ({
{displayedBlocks.map((block, idx) => (
))}
diff --git a/packages/bot-engine/src/components/TypebotViewer.tsx b/packages/bot-engine/src/components/TypebotViewer.tsx
index 392f49700b..7982589aa6 100644
--- a/packages/bot-engine/src/components/TypebotViewer.tsx
+++ b/packages/bot-engine/src/components/TypebotViewer.tsx
@@ -1,11 +1,11 @@
import React, { useMemo } from 'react'
-import { Answer, BackgroundType, PublicTypebot } from '../models'
import { TypebotContext } from '../contexts/TypebotContext'
import Frame from 'react-frame-component'
//@ts-ignore
import style from '../assets/style.css'
import { ConversationContainer } from './ConversationContainer'
import { AnswersContext } from '../contexts/AnswersContext'
+import { Answer, BackgroundType, PublicTypebot } from 'models'
export type TypebotViewerProps = {
typebot: PublicTypebot
diff --git a/packages/bot-engine/src/contexts/AnswersContext.tsx b/packages/bot-engine/src/contexts/AnswersContext.tsx
index 90d3fc646c..0ca48e1b8c 100644
--- a/packages/bot-engine/src/contexts/AnswersContext.tsx
+++ b/packages/bot-engine/src/contexts/AnswersContext.tsx
@@ -1,4 +1,4 @@
-import { Answer } from '../models'
+import { Answer } from 'models'
import React, { createContext, ReactNode, useContext, useState } from 'react'
const answersContext = createContext<{
diff --git a/packages/bot-engine/src/contexts/TypebotContext.tsx b/packages/bot-engine/src/contexts/TypebotContext.tsx
index f18573d53a..55f3ee1146 100644
--- a/packages/bot-engine/src/contexts/TypebotContext.tsx
+++ b/packages/bot-engine/src/contexts/TypebotContext.tsx
@@ -1,5 +1,5 @@
+import { PublicTypebot } from 'models'
import React, { createContext, ReactNode, useContext } from 'react'
-import { PublicTypebot } from '../models/publicTypebot'
const typebotContext = createContext<{
typebot: PublicTypebot
diff --git a/packages/bot-engine/src/index.ts b/packages/bot-engine/src/index.ts
index df1033f5c1..482a6ab8cc 100644
--- a/packages/bot-engine/src/index.ts
+++ b/packages/bot-engine/src/index.ts
@@ -1,3 +1 @@
export * from './components/TypebotViewer'
-export * from './models'
-export { parseNewTypebot } from './services/utils'
diff --git a/packages/bot-engine/src/models/publicTypebot.ts b/packages/bot-engine/src/models/publicTypebot.ts
deleted file mode 100644
index d0f4802b42..0000000000
--- a/packages/bot-engine/src/models/publicTypebot.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import { PublicTypebot as PublicTypebotFromPrisma } from 'db'
-import { Block, Settings, StartBlock, Theme } from '.'
-
-export type PublicTypebot = Omit<
- PublicTypebotFromPrisma,
- 'blocks' | 'startBlock' | 'theme' | 'settings'
-> & {
- blocks: Block[]
- startBlock: StartBlock
- theme: Theme
- settings: Settings
-}
diff --git a/packages/bot-engine/src/models/typebot.ts b/packages/bot-engine/src/models/typebot.ts
deleted file mode 100644
index a2969c857a..0000000000
--- a/packages/bot-engine/src/models/typebot.ts
+++ /dev/null
@@ -1,87 +0,0 @@
-import { Typebot as TypebotFromPrisma } from 'db'
-
-export type Typebot = Omit<
- TypebotFromPrisma,
- 'blocks' | 'startBlock' | 'theme' | 'settings'
-> & {
- blocks: Block[]
- startBlock: StartBlock
- theme: Theme
- settings: Settings
-}
-
-export type StartBlock = {
- id: `start-block`
- graphCoordinates: {
- x: number
- y: number
- }
- title: string
- steps: [StartStep]
-}
-
-export type StartStep = {
- id: 'start-step'
- blockId: 'start-block'
- target?: Target
- type: StepType.START
- label: string
-}
-
-export type Block = {
- id: string
- title: string
- steps: Step[]
- graphCoordinates: {
- x: number
- y: number
- }
-}
-
-export enum StepType {
- START = 'start',
- TEXT = 'text',
- TEXT_INPUT = 'text input',
-}
-
-export type Target = { blockId: string; stepId?: string }
-
-export type Step = BubbleStep | InputStep
-export type BubbleStep = TextStep
-export type InputStep = TextInputStep
-export type StepBase = { id: string; blockId: string; target?: Target }
-export type TextStep = StepBase & {
- type: StepType.TEXT
- content: { html: string; richText: unknown[]; plainText: string }
-}
-export type TextInputStep = StepBase & {
- type: StepType.TEXT_INPUT
-}
-
-export type Theme = {
- general: {
- font: string
- background: Background
- }
-}
-
-export enum BackgroundType {
- COLOR = 'Color',
- IMAGE = 'Image',
- NONE = 'None',
-}
-
-export type Background = {
- type: BackgroundType
- content: string
-}
-
-export type Settings = {
- typingEmulation: TypingEmulationSettings
-}
-
-export type TypingEmulationSettings = {
- enabled: boolean
- speed: number
- maxDelay: number
-}
diff --git a/packages/bot-engine/src/services/chat.ts b/packages/bot-engine/src/services/chat.ts
index 7b13bbdc5c..50d5d2e07a 100644
--- a/packages/bot-engine/src/services/chat.ts
+++ b/packages/bot-engine/src/services/chat.ts
@@ -1,4 +1,4 @@
-import { TypingEmulationSettings } from '../models'
+import { TypingEmulationSettings } from 'models'
export const computeTypingTimeout = (
bubbleContent: string,
diff --git a/packages/bot-engine/src/services/theme.ts b/packages/bot-engine/src/services/theme.ts
index dd96660ca6..5a74aa45a1 100644
--- a/packages/bot-engine/src/services/theme.ts
+++ b/packages/bot-engine/src/services/theme.ts
@@ -1,4 +1,4 @@
-import { BackgroundType, Theme } from '../models'
+import { BackgroundType, Theme } from 'models'
const cssVariableNames = {
container: {
diff --git a/packages/bot-engine/src/services/utils.ts b/packages/bot-engine/src/services/utils.ts
index 808531301b..7e6c41bf84 100644
--- a/packages/bot-engine/src/services/utils.ts
+++ b/packages/bot-engine/src/services/utils.ts
@@ -1,55 +1,7 @@
-import { Prisma } from 'db'
-import {
- Step,
- TextStep,
- StepType,
- TextInputStep,
- BackgroundType,
- Settings,
- StartBlock,
- Theme,
-} from '../models'
+import { Step, TextStep, StepType, TextInputStep } from 'models'
export const isTextStep = (step: Step): step is TextStep =>
step.type === StepType.TEXT
export const isTextInputStep = (step: Step): step is TextInputStep =>
step.type === StepType.TEXT_INPUT
-
-export const parseNewTypebot = ({
- ownerId,
- folderId,
- name,
-}: {
- ownerId: string
- folderId: string | null
- name: string
-}): Prisma.TypebotUncheckedCreateInput => {
- const startBlock: StartBlock = {
- id: 'start-block',
- title: 'Start',
- graphCoordinates: { x: 0, y: 0 },
- steps: [
- {
- id: 'start-step',
- blockId: 'start-block',
- label: 'Form starts here',
- type: StepType.START,
- },
- ],
- }
- const theme: Theme = {
- general: {
- font: 'Open Sans',
- background: { type: BackgroundType.NONE, content: '#ffffff' },
- },
- }
- const settings: Settings = {
- typingEmulation: {
- enabled: true,
- speed: 300,
- maxDelay: 1.5,
- },
- }
- return { folderId, name, ownerId, startBlock, theme, settings }
-}
diff --git a/packages/db/prisma/migrations/20220106083902_normalize_data/migration.sql b/packages/db/prisma/migrations/20220106083902_normalize_data/migration.sql
new file mode 100644
index 0000000000..b5eea41fa2
--- /dev/null
+++ b/packages/db/prisma/migrations/20220106083902_normalize_data/migration.sql
@@ -0,0 +1,22 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `startBlock` on the `PublicTypebot` table. All the data in the column will be lost.
+ - You are about to drop the column `startBlock` on the `Typebot` table. All the data in the column will be lost.
+ - Added the required column `steps` to the `PublicTypebot` table without a default value. This is not possible if the table is not empty.
+ - Changed the type of `blocks` on the `PublicTypebot` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required.
+ - Added the required column `steps` to the `Typebot` table without a default value. This is not possible if the table is not empty.
+ - Changed the type of `blocks` on the `Typebot` table. No cast exists, the column would be dropped and recreated, which cannot be done if there is data, since the column is required.
+
+*/
+-- AlterTable
+ALTER TABLE "PublicTypebot" DROP COLUMN "startBlock",
+ADD COLUMN "steps" JSONB NOT NULL,
+DROP COLUMN "blocks",
+ADD COLUMN "blocks" JSONB NOT NULL;
+
+-- AlterTable
+ALTER TABLE "Typebot" DROP COLUMN "startBlock",
+ADD COLUMN "steps" JSONB NOT NULL,
+DROP COLUMN "blocks",
+ADD COLUMN "blocks" JSONB NOT NULL;
diff --git a/packages/db/prisma/schema.prisma b/packages/db/prisma/schema.prisma
index ed8bb6bf94..c089dd1826 100644
--- a/packages/db/prisma/schema.prisma
+++ b/packages/db/prisma/schema.prisma
@@ -90,23 +90,23 @@ model Typebot {
results Result[]
folderId String?
folder DashboardFolder? @relation(fields: [folderId], references: [id])
- blocks Json[]
- startBlock Json
+ blocks Json
+ steps Json
theme Json
settings Json
publicId String? @unique
}
model PublicTypebot {
- id String @id @default(cuid())
- typebotId String @unique
- typebot Typebot @relation(fields: [typebotId], references: [id], onDelete: Cascade)
- name String
- blocks Json[]
- startBlock Json
- theme Json
- settings Json
- publicId String? @unique
+ id String @id @default(cuid())
+ typebotId String @unique
+ typebot Typebot @relation(fields: [typebotId], references: [id], onDelete: Cascade)
+ name String
+ blocks Json
+ steps Json
+ theme Json
+ settings Json
+ publicId String? @unique
}
model Result {
diff --git a/packages/models/.gitignore b/packages/models/.gitignore
new file mode 100644
index 0000000000..5db31a8773
--- /dev/null
+++ b/packages/models/.gitignore
@@ -0,0 +1,7 @@
+node_modules
+# Keep environment variables out of version control
+.env
+
+dist
+types
+yarn-error.log
\ No newline at end of file
diff --git a/packages/models/package.json b/packages/models/package.json
new file mode 100644
index 0000000000..13d7ec96da
--- /dev/null
+++ b/packages/models/package.json
@@ -0,0 +1,19 @@
+{
+ "name": "models",
+ "version": "1.0.0",
+ "main": "dist/index.js",
+ "types": "types/index.d.ts",
+ "license": "AGPL-3.0-or-later",
+ "private": true,
+ "devDependencies": {
+ "typescript": "^4.5.4"
+ },
+ "dependencies": {
+ "next": "^12.0.7",
+ "db": "*"
+ },
+ "scripts": {
+ "build": "tsc",
+ "dev": "tsc --watch"
+ }
+}
diff --git a/packages/bot-engine/src/models/answer.ts b/packages/models/src/answer.ts
similarity index 100%
rename from packages/bot-engine/src/models/answer.ts
rename to packages/models/src/answer.ts
diff --git a/packages/bot-engine/src/models/index.ts b/packages/models/src/index.ts
similarity index 81%
rename from packages/bot-engine/src/models/index.ts
rename to packages/models/src/index.ts
index 6cb8add09e..6c1465593d 100644
--- a/packages/bot-engine/src/models/index.ts
+++ b/packages/models/src/index.ts
@@ -2,3 +2,4 @@ export * from './typebot'
export * from './publicTypebot'
export * from './result'
export * from './answer'
+export * from './utils'
diff --git a/packages/models/src/publicTypebot.ts b/packages/models/src/publicTypebot.ts
new file mode 100644
index 0000000000..bde0279c70
--- /dev/null
+++ b/packages/models/src/publicTypebot.ts
@@ -0,0 +1,13 @@
+import { PublicTypebot as PublicTypebotFromPrisma } from 'db'
+import { Block, Settings, Step, Theme } from './typebot'
+import { Table } from './utils'
+
+export type PublicTypebot = Omit<
+ PublicTypebotFromPrisma,
+ 'blocks' | 'startBlock' | 'theme' | 'settings' | 'steps'
+> & {
+ blocks: Table
+ steps: Table
+ theme: Theme
+ settings: Settings
+}
diff --git a/packages/bot-engine/src/models/result.ts b/packages/models/src/result.ts
similarity index 100%
rename from packages/bot-engine/src/models/result.ts
rename to packages/models/src/result.ts
diff --git a/packages/models/src/typebot/index.ts b/packages/models/src/typebot/index.ts
new file mode 100644
index 0000000000..4a09896f2c
--- /dev/null
+++ b/packages/models/src/typebot/index.ts
@@ -0,0 +1,4 @@
+export * from './typebot'
+export * from './steps'
+export * from './theme'
+export * from './settings'
diff --git a/packages/models/src/typebot/settings.ts b/packages/models/src/typebot/settings.ts
new file mode 100644
index 0000000000..20cb2bce96
--- /dev/null
+++ b/packages/models/src/typebot/settings.ts
@@ -0,0 +1,9 @@
+export type Settings = {
+ typingEmulation: TypingEmulationSettings
+}
+
+export type TypingEmulationSettings = {
+ enabled: boolean
+ speed: number
+ maxDelay: number
+}
diff --git a/packages/models/src/typebot/steps.ts b/packages/models/src/typebot/steps.ts
new file mode 100644
index 0000000000..49c35f834b
--- /dev/null
+++ b/packages/models/src/typebot/steps.ts
@@ -0,0 +1,29 @@
+export type Step = StartStep | BubbleStep | InputStep
+
+export type BubbleStep = TextStep
+
+export type InputStep = TextInputStep
+
+export enum StepType {
+ START = 'start',
+ TEXT = 'text',
+ TEXT_INPUT = 'text input',
+}
+
+export type StepBase = { id: string; blockId: string; target?: Target }
+
+export type StartStep = StepBase & {
+ type: StepType.START
+ label: string
+}
+
+export type TextStep = StepBase & {
+ type: StepType.TEXT
+ content: { html: string; richText: unknown[]; plainText: string }
+}
+
+export type TextInputStep = StepBase & {
+ type: StepType.TEXT_INPUT
+}
+
+export type Target = { blockId: string; stepId?: string }
diff --git a/packages/models/src/typebot/theme.ts b/packages/models/src/typebot/theme.ts
new file mode 100644
index 0000000000..7debf84d7f
--- /dev/null
+++ b/packages/models/src/typebot/theme.ts
@@ -0,0 +1,17 @@
+export type Theme = {
+ general: {
+ font: string
+ background: Background
+ }
+}
+
+export enum BackgroundType {
+ COLOR = 'Color',
+ IMAGE = 'Image',
+ NONE = 'None',
+}
+
+export type Background = {
+ type: BackgroundType
+ content: string
+}
diff --git a/packages/models/src/typebot/typebot.ts b/packages/models/src/typebot/typebot.ts
new file mode 100644
index 0000000000..b6ab30bc75
--- /dev/null
+++ b/packages/models/src/typebot/typebot.ts
@@ -0,0 +1,25 @@
+import { Typebot as TypebotFromPrisma } from 'db'
+import { Table } from '../utils'
+import { Settings } from './settings'
+import { Step } from './steps'
+import { Theme } from './theme'
+
+export type Typebot = Omit<
+ TypebotFromPrisma,
+ 'blocks' | 'theme' | 'settings' | 'steps'
+> & {
+ blocks: Table
+ steps: Table
+ theme: Theme
+ settings: Settings
+}
+
+export type Block = {
+ id: string
+ title: string
+ graphCoordinates: {
+ x: number
+ y: number
+ }
+ stepIds: string[]
+}
diff --git a/packages/models/src/utils.ts b/packages/models/src/utils.ts
new file mode 100644
index 0000000000..bb3260d2b4
--- /dev/null
+++ b/packages/models/src/utils.ts
@@ -0,0 +1 @@
+export type Table = { byId: { [key: string]: T }; allIds: string[] }
diff --git a/packages/models/tsconfig.json b/packages/models/tsconfig.json
new file mode 100644
index 0000000000..431ac3ad44
--- /dev/null
+++ b/packages/models/tsconfig.json
@@ -0,0 +1,13 @@
+{
+ "compilerOptions": {
+ "target": "es2016",
+ "module": "commonjs",
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "skipLibCheck": true,
+ "declaration": true,
+ "declarationDir": "./types",
+ "outDir": "./dist"
+ }
+}
diff --git a/packages/utils/.gitignore b/packages/utils/.gitignore
new file mode 100644
index 0000000000..a895b79c1d
--- /dev/null
+++ b/packages/utils/.gitignore
@@ -0,0 +1,6 @@
+node_modules
+# Keep environment variables out of version control
+.env
+
+dist
+yarn-error.log
\ No newline at end of file
diff --git a/packages/utils/package.json b/packages/utils/package.json
index c5f40cc33b..18ecc0e2fe 100644
--- a/packages/utils/package.json
+++ b/packages/utils/package.json
@@ -1,13 +1,26 @@
{
"name": "utils",
"version": "1.0.0",
- "main": "index.ts",
"license": "AGPL-3.0-or-later",
"private": true,
+ "main": "dist/cjs/index.js",
+ "module": "dist/esm/index.js",
+ "types": "dist/index.d.ts",
"devDependencies": {
+ "@rollup/plugin-commonjs": "^21.0.1",
+ "@rollup/plugin-node-resolve": "^13.1.3",
+ "@rollup/plugin-typescript": "^8.3.0",
+ "rollup": "^2.63.0",
+ "rollup-plugin-dts": "^4.1.0",
+ "rollup-plugin-peer-deps-external": "^2.2.4",
"typescript": "^4.5.4"
},
"dependencies": {
+ "models": "*",
"next": "^12.0.7"
+ },
+ "scripts": {
+ "build": "yarn rollup -c",
+ "dev": "yarn rollup -c --watch"
}
}
diff --git a/packages/utils/rollup.config.js b/packages/utils/rollup.config.js
new file mode 100644
index 0000000000..96c951fd36
--- /dev/null
+++ b/packages/utils/rollup.config.js
@@ -0,0 +1,38 @@
+import resolve from '@rollup/plugin-node-resolve'
+import commonjs from '@rollup/plugin-commonjs'
+import typescript from '@rollup/plugin-typescript'
+import dts from 'rollup-plugin-dts'
+import peerDepsExternal from 'rollup-plugin-peer-deps-external'
+
+const packageJson = require('./package.json')
+
+export default [
+ {
+ input: 'src/index.ts',
+ output: [
+ {
+ file: packageJson.main,
+ format: 'cjs',
+ sourcemap: true,
+ inlineDynamicImports: true,
+ },
+ {
+ file: packageJson.module,
+ format: 'esm',
+ sourcemap: true,
+ inlineDynamicImports: true,
+ },
+ ],
+ plugins: [
+ peerDepsExternal(),
+ resolve(),
+ commonjs(),
+ typescript({ tsconfig: './tsconfig.json' }),
+ ],
+ },
+ {
+ input: 'dist/esm/types/index.d.ts',
+ output: [{ file: 'dist/index.d.ts', format: 'esm' }],
+ plugins: [dts()],
+ },
+]
diff --git a/packages/utils/apiUtils.ts b/packages/utils/src/apiUtils.ts
similarity index 100%
rename from packages/utils/apiUtils.ts
rename to packages/utils/src/apiUtils.ts
diff --git a/packages/utils/index.ts b/packages/utils/src/index.ts
similarity index 100%
rename from packages/utils/index.ts
rename to packages/utils/src/index.ts
diff --git a/packages/utils/utils.ts b/packages/utils/src/utils.ts
similarity index 76%
rename from packages/utils/utils.ts
rename to packages/utils/src/utils.ts
index 91565d808b..1f1571895d 100644
--- a/packages/utils/utils.ts
+++ b/packages/utils/src/utils.ts
@@ -1,3 +1,5 @@
+import { Table } from 'models'
+
export const sendRequest = async ({
url,
method,
@@ -25,3 +27,8 @@ export const sendRequest = async ({
export const isDefined = (value: T | undefined | null): value is T => {
return value !== undefined && value !== null
}
+
+export const filterTable = (ids: string[], table: Table): Table => ({
+ byId: ids.reduce((acc, id) => ({ ...acc, [id]: table.byId[id] }), {}),
+ allIds: ids,
+})
diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json
index 3ffa57bad5..ce02a5c63d 100644
--- a/packages/utils/tsconfig.json
+++ b/packages/utils/tsconfig.json
@@ -1,10 +1,17 @@
{
"compilerOptions": {
- "target": "es2016",
- "module": "commonjs",
+ "target": "es5",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
- "skipLibCheck": true
+ "skipLibCheck": true,
+ "module": "ESNext",
+ "declaration": true,
+ "declarationDir": "types",
+ "sourceMap": true,
+ "outDir": "dist",
+ "moduleResolution": "node",
+ "allowSyntheticDefaultImports": true,
+ "emitDeclarationOnly": true
}
}
diff --git a/yarn.lock b/yarn.lock
index 93292f4021..a3772d61c4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,96 +9,96 @@
dependencies:
"@babel/highlight" "^7.10.4"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
- integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
+ integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
dependencies:
- "@babel/highlight" "^7.16.0"
+ "@babel/highlight" "^7.16.7"
-"@babel/generator@^7.16.5":
- version "7.16.5"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.5.tgz#26e1192eb8f78e0a3acaf3eede3c6fc96d22bedf"
- integrity sha512-kIvCdjZqcdKqoDbVVdt5R99icaRtrtYhYK/xux5qiWCBmfdvEYMFZ68QCrpE5cbFM1JsuArUNs1ZkuKtTtUcZA==
+"@babel/generator@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb"
+ integrity sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==
dependencies:
- "@babel/types" "^7.16.0"
+ "@babel/types" "^7.16.7"
jsesc "^2.5.1"
source-map "^0.5.0"
"@babel/helper-annotate-as-pure@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d"
- integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862"
+ integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==
dependencies:
- "@babel/types" "^7.16.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-environment-visitor@^7.16.5":
- version "7.16.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.5.tgz#f6a7f38b3c6d8b07c88faea083c46c09ef5451b8"
- integrity sha512-ODQyc5AnxmZWm/R2W7fzhamOk1ey8gSguo5SGvF0zcB3uUzRpTRmM/jmLSm9bDMyPlvbyJ+PwPEK0BWIoZ9wjg==
+"@babel/helper-environment-visitor@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7"
+ integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==
dependencies:
- "@babel/types" "^7.16.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-function-name@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481"
- integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==
+"@babel/helper-function-name@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f"
+ integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==
dependencies:
- "@babel/helper-get-function-arity" "^7.16.0"
- "@babel/template" "^7.16.0"
- "@babel/types" "^7.16.0"
+ "@babel/helper-get-function-arity" "^7.16.7"
+ "@babel/template" "^7.16.7"
+ "@babel/types" "^7.16.7"
-"@babel/helper-get-function-arity@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa"
- integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==
+"@babel/helper-get-function-arity@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419"
+ integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==
dependencies:
- "@babel/types" "^7.16.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-hoist-variables@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a"
- integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==
+"@babel/helper-hoist-variables@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246"
+ integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==
dependencies:
- "@babel/types" "^7.16.0"
+ "@babel/types" "^7.16.7"
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3"
- integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437"
+ integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==
dependencies:
- "@babel/types" "^7.16.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.5":
- version "7.16.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.5.tgz#afe37a45f39fce44a3d50a7958129ea5b1a5c074"
- integrity sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==
+"@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5"
+ integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==
-"@babel/helper-split-export-declaration@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438"
- integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==
+"@babel/helper-split-export-declaration@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b"
+ integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==
dependencies:
- "@babel/types" "^7.16.0"
+ "@babel/types" "^7.16.7"
-"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7":
- version "7.15.7"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389"
- integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==
+"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
+ integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
-"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a"
- integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==
+"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b"
+ integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==
dependencies:
- "@babel/helper-validator-identifier" "^7.15.7"
+ "@babel/helper-validator-identifier" "^7.16.7"
chalk "^2.0.0"
js-tokens "^4.0.0"
-"@babel/parser@^7.16.0", "@babel/parser@^7.16.5":
- version "7.16.6"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.6.tgz#8f194828193e8fa79166f34a4b4e52f3e769a314"
- integrity sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==
+"@babel/parser@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e"
+ integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==
"@babel/plugin-syntax-jsx@7.14.5":
version "7.14.5"
@@ -108,16 +108,16 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-jsx@^7.12.13":
- version "7.16.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.5.tgz#bf255d252f78bc8b77a17cadc37d1aa5b8ed4394"
- integrity sha512-42OGssv9NPk4QHKVgIHlzeLgPOW5rGgfV5jzG90AhcXXIv6hu/eqj63w4VgvRxdvZY3AlYeDgPiSJ3BqAd1Y6Q==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665"
+ integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==
dependencies:
- "@babel/helper-plugin-utils" "^7.16.5"
+ "@babel/helper-plugin-utils" "^7.16.7"
"@babel/runtime-corejs3@^7.10.2":
- version "7.16.5"
- resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.5.tgz#9057d879720c136193f0440bc400088212a74894"
- integrity sha512-F1pMwvTiUNSAM8mc45kccMQxj31x3y3P+tA/X8hKNWp3/hUsxdGxZ3D3H8JIkxtfA8qGkaBTKvcmvStaYseAFw==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.16.7.tgz#a762745fe8b4d61a26444a9151e6586d36044dde"
+ integrity sha512-MiYR1yk8+TW/CpOD0CyX7ve9ffWTKqLk/L6pk8TPl0R8pNi+1pFY8fH9yET55KlvukQ4PAWfXsGr2YHVjcI4Pw==
dependencies:
core-js-pure "^3.19.0"
regenerator-runtime "^0.13.4"
@@ -130,34 +130,34 @@
regenerator-runtime "^0.13.4"
"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.13.10", "@babel/runtime@^7.14.6", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.7":
- version "7.16.5"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a"
- integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA==
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa"
+ integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/template@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6"
- integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==
+"@babel/template@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155"
+ integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==
dependencies:
- "@babel/code-frame" "^7.16.0"
- "@babel/parser" "^7.16.0"
- "@babel/types" "^7.16.0"
+ "@babel/code-frame" "^7.16.7"
+ "@babel/parser" "^7.16.7"
+ "@babel/types" "^7.16.7"
"@babel/traverse@^7.4.5":
- version "7.16.5"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.5.tgz#d7d400a8229c714a59b87624fc67b0f1fbd4b2b3"
- integrity sha512-FOCODAzqUMROikDYLYxl4nmwiLlu85rNqBML/A5hKRVXG2LV8d0iMqgPzdYTcIpjZEBB7D6UDU9vxRZiriASdQ==
- dependencies:
- "@babel/code-frame" "^7.16.0"
- "@babel/generator" "^7.16.5"
- "@babel/helper-environment-visitor" "^7.16.5"
- "@babel/helper-function-name" "^7.16.0"
- "@babel/helper-hoist-variables" "^7.16.0"
- "@babel/helper-split-export-declaration" "^7.16.0"
- "@babel/parser" "^7.16.5"
- "@babel/types" "^7.16.0"
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76"
+ integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==
+ dependencies:
+ "@babel/code-frame" "^7.16.7"
+ "@babel/generator" "^7.16.7"
+ "@babel/helper-environment-visitor" "^7.16.7"
+ "@babel/helper-function-name" "^7.16.7"
+ "@babel/helper-hoist-variables" "^7.16.7"
+ "@babel/helper-split-export-declaration" "^7.16.7"
+ "@babel/parser" "^7.16.7"
+ "@babel/types" "^7.16.7"
debug "^4.1.0"
globals "^11.1.0"
@@ -169,21 +169,21 @@
"@babel/helper-validator-identifier" "^7.14.9"
to-fast-properties "^2.0.0"
-"@babel/types@^7.16.0":
- version "7.16.0"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba"
- integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==
+"@babel/types@^7.16.7":
+ version "7.16.7"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.7.tgz#4ed19d51f840ed4bd5645be6ce40775fecf03159"
+ integrity sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==
dependencies:
- "@babel/helper-validator-identifier" "^7.15.7"
+ "@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0"
-"@chakra-ui/accordion@1.4.2":
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-1.4.2.tgz#e851d5e0f748646e20efde909b5f70a93679283b"
- integrity sha512-BAGMvcm2sFE5Ft7jwC9nF03/Yv7qztuhzwKBBy4iL0p1nCPh6kV54RBXUcoj3VWe+yrmNiAVYKRTdqQBTJFwOw==
+"@chakra-ui/accordion@1.4.3":
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/accordion/-/accordion-1.4.3.tgz#86837416c674719d6df134110424a93ac71d9eea"
+ integrity sha512-UKpi7xd+hcT/OIDRBRT4vkvVmpym5K9tf3tPyPdwpJcCfCd0D8dvmgZWBM4vCCRPCNfuoyxba5z97witzLCf+g==
dependencies:
"@chakra-ui/descendant" "2.1.1"
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/icon" "2.0.0"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/transition" "1.4.2"
@@ -205,12 +205,12 @@
dependencies:
"@chakra-ui/theme-tools" "^1.3.1"
-"@chakra-ui/avatar@1.3.1":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-1.3.1.tgz#fbb9d45b14caa956c4d16cca85e7219d821f0f66"
- integrity sha512-WI0/kcpTJViOH093V0bz8EB+e/rc+gjF+T5DkOuh1YWFxRRG5v+4Yd3PdEJtQgzWtBVhlbGWmE7WvBizyKwFCA==
+"@chakra-ui/avatar@1.3.2":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/avatar/-/avatar-1.3.2.tgz#575d524117ab1a77dc6a4963868a7ba02822a745"
+ integrity sha512-Z4CQI2haksy0YIV1gKa967P94WZUVzlMN+Wgs8PJJoxxmeY6tVruuvp5+Zb5D5kSAmQBvGWxlgJjClKXzeCQ7A==
dependencies:
- "@chakra-ui/image" "1.1.1"
+ "@chakra-ui/image" "1.1.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
@@ -222,22 +222,22 @@
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/button@1.5.1":
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-1.5.1.tgz#0f0b3e7a10b3c8aea4a2da114386d1a767916aaa"
- integrity sha512-BvP29quEhP6OTgDiRsugD6adgkeOTEQpoDsZUVEmHnNVrbFfdsICEKKQTtDJ2iPf+hmpFrtnpN50vCLdAANKcw==
+"@chakra-ui/button@1.5.2":
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/button/-/button-1.5.2.tgz#ea70d837d50aa85970fc36060ea4d7aa9d166281"
+ integrity sha512-1LyZ7o4g+ZF0Qfwr77Fa3qHtCGhghoIPG2lcUWhhPk+8ygHNF0ZOngfsiDD7aoEj0uXsvlgZ/hdiqv0PmMTRzg==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/spinner" "1.2.1"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/checkbox@1.6.1":
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-1.6.1.tgz#e84d828f2d8b2e1a84ae51982a29eb4c7e7e0eff"
- integrity sha512-Z5ZMeUYIRjRbi/knhYhSQshZH7OnROA7ezl9a9oVSKRF7iLMNMibQSlQLXmqUWaTKSgrS37cpKAzfgEuemyiUQ==
+"@chakra-ui/checkbox@1.6.2":
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/checkbox/-/checkbox-1.6.2.tgz#a6fc34d42caf7bc2ccc83af9deafd00e7c01e53e"
+ integrity sha512-eu4MeKWqwFc3zakjMnUi1pGXQ17HzeWbvQHwEZCYgIDk+S9DXopQr8o38zaHzs/MHmlelCzM96IBgTWZXWR/eg==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
"@chakra-ui/visually-hidden" "1.1.1"
@@ -258,12 +258,12 @@
"@chakra-ui/icon" "2.0.0"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/color-mode@1.3.2":
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-1.3.2.tgz#e87f9c17ae891c426fa8c9dbdd3c2ba80669fa48"
- integrity sha512-/rWcbrzbaWCyyUnT07Qjz0xf/ltHS31CHOKtVCWr2uTgfn2gOQpdxsKRbjrLYPOYZGTMdINUHNiAsqQjLoAoTQ==
+"@chakra-ui/color-mode@1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/color-mode/-/color-mode-1.3.3.tgz#91f03c4c5ddfd1f238ce566af1f2b371f3f551a1"
+ integrity sha512-vEMG9PRtVllAxbJE76bM4fRdo+hRZsPX/9cO+gR1YegYQNeobbV9Ive/MKNYQzdlbQ855Ytn6cPGr2hzy9MdRg==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/react-env" "1.1.1"
"@chakra-ui/utils" "1.9.1"
@@ -274,12 +274,12 @@
dependencies:
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/counter@1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-1.2.1.tgz#36d4683472751b9ce866d6d86f3856d032194468"
- integrity sha512-Gm4njMzEsDyAzdQtExn40TvmupzkPBrT5DiCu0DlxYqpLqCfqV49HgJHEG5oW3WV+WaC9mzg7VV+idKYh/d+Gg==
+"@chakra-ui/counter@1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/counter/-/counter-1.2.2.tgz#4be45cccd46981e6c613eb1c28132213382e3284"
+ integrity sha512-EljrsJYHpR5tZ1UczzlZ7gwKZs3ijF2tKCAAmsTpRerPbwGFvrmhfFfLexgbc0vxmeuZYUVeuiClLXQT4lvd5w==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/utils" "1.9.1"
"@chakra-ui/css-reset@1.1.1", "@chakra-ui/css-reset@^1.1.1":
@@ -294,12 +294,12 @@
dependencies:
"@chakra-ui/react-utils" "^1.2.1"
-"@chakra-ui/editable@1.3.1":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-1.3.1.tgz#24e9be0a9275d47feb3fb8a885e3e417e9120d0c"
- integrity sha512-MwyTtsnHNqmKmHv9SH3KIHWa06D4gBwcuTawTiSnYBUJL6My8ry/Wdca1to9So2tD6hcjz3TPTzOJOlyv0eiZg==
+"@chakra-ui/editable@1.3.2":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/editable/-/editable-1.3.2.tgz#dd768b000b8a14954df618c8d633ecc553bd8de8"
+ integrity sha512-WY0dq+hQOIyMAamFj2fECNb1AtOwxoddAbZ6k4/epiKNkaRA5ENzgPdV6Gw3t02fDXv95D0J4V4XcpNgfCz6TA==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
@@ -311,20 +311,20 @@
"@chakra-ui/utils" "1.9.1"
react-focus-lock "2.5.2"
-"@chakra-ui/form-control@1.5.2":
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-1.5.2.tgz#4ce34f03165cfafacecabdce3be82011b74308a7"
- integrity sha512-uWv0/f+JEM0ZE5Hnj3TzCnJ09EB+A+DSs9QgyECOuxx9Ju6gnns2uaRki2BfxksQL9ZZomPCkMtXazY9Wa81ag==
+"@chakra-ui/form-control@1.5.3":
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/form-control/-/form-control-1.5.3.tgz#cbc8037470f8ef33d5ca839362e231edf9e1af56"
+ integrity sha512-+UkOJJYUSGVATeNK/2b+KJx3qRGAtqpD1sR2mqd9DhgmJ/JUGV8q4LVcXIcVs/7BYNqP9B0JQUBIDlHNuTwlJA==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/icon" "2.0.0"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/hooks@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-1.7.1.tgz#0242b678f40ef00e4834a8a856c8881dcda0072d"
- integrity sha512-hgN19X6GUKQYAHczmFY+GAT8vl9h+X+nGWrIAnmvZ6BgUXxDajnTNhZeWhj0ZkR+7A7dCE6Y/3X44GafUgChMw==
+"@chakra-ui/hooks@1.7.2":
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/hooks/-/hooks-1.7.2.tgz#64341c06b141cdc4c08ccab0308b46b20c11a99b"
+ integrity sha512-XJnya9ugAPYUedtQULKaLYBezE9cZMOkDm0MQl7FEuJKZ9ocHD6Pwpwf9Z03R91XQmcNL8gZ1NS0GT9v/xNl3Q==
dependencies:
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
@@ -338,27 +338,27 @@
dependencies:
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/image@1.1.1":
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-1.1.1.tgz#39ecb77155e9e1fbbc68e825eb46405808805a8c"
- integrity sha512-bz1pn08XlXcO3r1KnpdjQgN3R2soiTx10sG2d5Pw9BdGdySf7Y73wiLh+Tan1xJHp6p2KH1hz4f7uKXXDn7Qmw==
+"@chakra-ui/image@1.1.2":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/image/-/image-1.1.2.tgz#257eb0d6a3759301066e7b1d68cc3e3b0c36c204"
+ integrity sha512-bW4PMONYpWRLJ10di7W5BhYUOcCohNLhiTygOmVRMHWfUk9vmxhORlNu0EaSXUKGXiQ35cTVu4Ysv3L/1xYPRQ==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/input@1.3.2":
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-1.3.2.tgz#59d49ab5c8645c51cd591d46ca23d5cb95e03392"
- integrity sha512-VMxmQgFiQ2UnBlkgLX/336G0IfYfw8YWF2ZoEFj5WL9kDSrrL1FXSBgjFGxrper74G4W20tESBCfU1S891y6cg==
+"@chakra-ui/input@1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/input/-/input-1.3.3.tgz#671bb983c22b066301e972de1c24cc63a05c7350"
+ integrity sha512-Fsivp608cKdc2tSQvPXczHtyfU6YHLju+EuAs5pjqKC8ZTwPawBRkCvlTGPPd7VwyTHkp08X5qARCxEgjRFbzw==
dependencies:
- "@chakra-ui/form-control" "1.5.2"
+ "@chakra-ui/form-control" "1.5.3"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/layout@1.6.0":
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-1.6.0.tgz#fa45d72420f01f4f6082f5a5a0c202bf7b09a059"
- integrity sha512-WUfQ104y1wNueU33/hPlZsMzYJGjO0dXMpVkQf5ZNhNX3IGDO+5+MO2x2xloP+j45yNPi3p8ti/HBnm3dXI+3Q==
+"@chakra-ui/layout@1.7.0":
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/layout/-/layout-1.7.0.tgz#1e69f6708cc8f9628b708145daff1167c5445131"
+ integrity sha512-ZjRqLGs16T4PcWH445SkELVuxxfecjjUeprtFnNw13QzwydP46L8+GB3ycp6wyJDa6DMo77TxQQnK5jUUwY6Mw==
dependencies:
"@chakra-ui/icon" "2.0.0"
"@chakra-ui/react-utils" "1.2.1"
@@ -371,71 +371,71 @@
dependencies:
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/media-query@1.2.2":
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-1.2.2.tgz#46db9059de1367a3aa85c1fb973a78f95fca6cc5"
- integrity sha512-xSmDVleE1drWiGH/MX3RqyVm29x/8Vf6G0UGaI2kCpbNmon+Q1zHW/yDHvptIuctLrPHYO8LOBxuUjfnIXwC2g==
+"@chakra-ui/media-query@1.2.3":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/media-query/-/media-query-1.2.3.tgz#aa633e4e14bc6a5c407dc18756712bf2133c8679"
+ integrity sha512-DbStv1VUSBwFj/MNemxRUtoibSoR9ZRcW31UUjtkiIH58cSB5lyEPv9rdD/1HRXpJfSaWQ439Tbuf03gOC4SVQ==
dependencies:
"@chakra-ui/react-env" "1.1.1"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/menu@1.8.2":
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-1.8.2.tgz#849f51beef6220667eb47c831ddf2c65919ded0e"
- integrity sha512-u2GfkwTqbWa8L/7i/kOFbU3JANiT2HStR+gsYKuiuOPiuBcUb8OlgfJfP70OtVKegNKmVEMjvzXtld3wCCo/1g==
+"@chakra-ui/menu@1.8.3":
+ version "1.8.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/menu/-/menu-1.8.3.tgz#0248fb9cb4583fc1e52aa02a8bf47136074375c7"
+ integrity sha512-TehcqHLKlMdkeXTtCYXzWNa6nbAk1cpjGz6OPl2ua0eisoOKgPolpkreCfYrWV9NNk0BmzZn+Su+z60jbhqggA==
dependencies:
"@chakra-ui/clickable" "1.2.1"
"@chakra-ui/descendant" "2.1.1"
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/popper" "2.4.1"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/transition" "1.4.2"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/modal@1.10.2":
- version "1.10.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-1.10.2.tgz#578c30812c63863bef25f4b5c279cacbb34528ec"
- integrity sha512-ZlmYetPHwHW4CAM09j4/+Ui54dXR1nzU6mOwhWe4/IzLvEyoEU6fHJeKyGxVUpYTG/7wltG/wKFRJpYa77tiBg==
+"@chakra-ui/modal@1.10.3":
+ version "1.10.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/modal/-/modal-1.10.3.tgz#59f56cf699b526f3b13ed1342f61858469cbac65"
+ integrity sha512-b0kVv4kNFWVbJPprEgFqqBH8EeneLAueSV+0t9Z1MpvIF0EUB6qe2JQZ0X8eDOtNYX4Tp7Y7LRCQ/M/HMm9WRw==
dependencies:
"@chakra-ui/close-button" "1.2.2"
"@chakra-ui/focus-lock" "1.2.1"
- "@chakra-ui/hooks" "1.7.1"
- "@chakra-ui/portal" "1.3.1"
+ "@chakra-ui/hooks" "1.7.2"
+ "@chakra-ui/portal" "1.3.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/transition" "1.4.2"
"@chakra-ui/utils" "1.9.1"
aria-hidden "^1.1.1"
react-remove-scroll "2.4.1"
-"@chakra-ui/number-input@1.3.2":
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-1.3.2.tgz#580035e56a13c30b04034ab02cb9c1132a1cf09c"
- integrity sha512-7x7AoqwPXU1odyDcqIwjBwf0MJUwYMM2fa+6YZ52F941GKlvkDiiJOhK6xfhhBzkLUQD6DN8zgAmmGhaZ6UQXw==
+"@chakra-ui/number-input@1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/number-input/-/number-input-1.3.3.tgz#caf176d2206b965658907bd72bd692077e4ce5dd"
+ integrity sha512-nptvORoG+PvvuURkzh0juSYxj3L9HnWIeNncC/7oXgm2AFGxIcqUk8pUJaUNM2mlbLjJZS19/MWlfzgsYJmJrQ==
dependencies:
- "@chakra-ui/counter" "1.2.1"
- "@chakra-ui/form-control" "1.5.2"
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/counter" "1.2.2"
+ "@chakra-ui/form-control" "1.5.3"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/icon" "2.0.0"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/pin-input@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-1.7.1.tgz#38c3bcf3d32f1404a431ae11030ff7ce5d964190"
- integrity sha512-eFFc5sofiyion+NxELWfCzD23XHIBDrJcfKKbNxt8jdXg9Ek4mFpmvnxBVrK0DIz6cVYgKY8c364OmxNUf4IyA==
+"@chakra-ui/pin-input@1.7.2":
+ version "1.7.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/pin-input/-/pin-input-1.7.2.tgz#9acdd962c3cf1199d63de7524dd65fc7aad31c81"
+ integrity sha512-2dGNdU+Xlu0u1OxuelJBKQu7dDKaD5kN9moZMoKpjpXB8Kibh7GM3OO/Z25aMM/E9Kly21qXgHju0Tj/ovBJuw==
dependencies:
"@chakra-ui/descendant" "2.1.1"
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/popover@1.11.0":
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-1.11.0.tgz#3ad9faf26019c750a5f8c619ee80dd97bcc4ee3e"
- integrity sha512-cCHXAfhIRir+M0ehlYIjDw3mHpiCxDTJ9WV0H1zHQV8nDYVIlZw3nEntaq8oJrv0wpIzq2WCW5ss+bBR7nLZ1A==
+"@chakra-ui/popover@1.11.1":
+ version "1.11.1"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/popover/-/popover-1.11.1.tgz#6342bf8c2d3de24ae62a09ae4765d5b8ca765be3"
+ integrity sha512-WV1R2L1V6mbpe6/aInr4yFe6rAu7+pT8Od6Hki5KsIv+4QvoEMYsvJ0VOhaURLLD+NaKXFCsfpc9immluia+AA==
dependencies:
"@chakra-ui/close-button" "1.2.2"
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/popper" "2.4.1"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
@@ -448,12 +448,12 @@
"@chakra-ui/react-utils" "1.2.1"
"@popperjs/core" "^2.9.3"
-"@chakra-ui/portal@1.3.1":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-1.3.1.tgz#944d86bd9e77a70a5549e84a03d31c7bbd3ec62c"
- integrity sha512-6UOGZCfujgdijcPs/JTEY5IB5WtKvUbfrSQYsG5CDa+guIwvnoP5qZ+rH6BR6DSSM8Wr/1n+WrtanhfFZShHKA==
+"@chakra-ui/portal@1.3.2":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/portal/-/portal-1.3.2.tgz#ec76ffb15dfdf6e5a0ea26bc534bfacc39207331"
+ integrity sha512-dWUCwEZNpPnbR21+eBbEGuvvOcz5AuS+TZ4V0sUdUEI8B3dPUEylJsveZpYjOCS/YAh4xoxbo6I6haRgrfguvw==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
@@ -465,25 +465,25 @@
"@chakra-ui/theme-tools" "1.3.1"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/provider@1.7.3":
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/@chakra-ui/provider/-/provider-1.7.3.tgz#625c0b7c1265515399bb501bc929d8851bba2958"
- integrity sha512-D1SrQ7do4yzAv9/OTF3yj/BkLm7kFo5DdeuOCyvXGpVJumnvbtjltRmC7rFQH4R+y9qXPvfQP4LKMNBqSxPNng==
+"@chakra-ui/provider@1.7.4":
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/provider/-/provider-1.7.4.tgz#c106e6efad2e38585eb978fc92d23f7c379130af"
+ integrity sha512-W+mut8fVk6MZx2Sgz4SSIrVVCUAFXE8/AZK3G71qFb9j/7m30zdWCsSzY9yd0XMjJF2cJvEXjEPAVYWz9BEoBA==
dependencies:
"@chakra-ui/css-reset" "1.1.1"
- "@chakra-ui/hooks" "1.7.1"
- "@chakra-ui/portal" "1.3.1"
+ "@chakra-ui/hooks" "1.7.2"
+ "@chakra-ui/portal" "1.3.2"
"@chakra-ui/react-env" "1.1.1"
- "@chakra-ui/system" "1.8.3"
+ "@chakra-ui/system" "1.9.0"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/radio@1.4.3":
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-1.4.3.tgz#d87788fe688d0d58252e9efeb926d0417a70e158"
- integrity sha512-TQdyfdUD3BLklOP67n82JN8ksQv1BYjvaYsK0m6WCa0LDJr9aCC+XtUPgVq/1L2t4HqHdiGOrGBooF4vvy/+BA==
+"@chakra-ui/radio@1.4.4":
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/radio/-/radio-1.4.4.tgz#53c3629795941b142d1781a6edfaf8436ff5dc85"
+ integrity sha512-Tz8bl+yhD2pKHUFyNZtP056eawqOUkSA7n2qEebnoH7Zp65B9zwYHkpvL+2nhL5swBwpnGrUpuK3WOqGz4dvXA==
dependencies:
- "@chakra-ui/form-control" "1.5.2"
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/form-control" "1.5.3"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
"@chakra-ui/visually-hidden" "1.1.1"
@@ -502,83 +502,83 @@
dependencies:
"@chakra-ui/utils" "^1.9.1"
-"@chakra-ui/react@^1.7.3":
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-1.7.3.tgz#358a3ff9847b78a798384db5c64cc222c9a48ae8"
- integrity sha512-6mrfDUOa9MoQ44Xvi7xgdDq48jTTTjW9BupCGf2R3DI+z6RbUKIHzbcoDJZt2HGY6j9EarMVNRoQJzvzGUKpoQ==
+"@chakra-ui/react@^1.7.4":
+ version "1.7.4"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/react/-/react-1.7.4.tgz#dfeb9e2f34df3645448ee542e02390fdf5b58876"
+ integrity sha512-wBxfQRcIz6YGXQh3S2E6sXCVcqrVuUygMeMdkCMMfZQTI2VFLkvn6SDYzLHcm1PtMygZnF1mU30GOcmArpVotA==
dependencies:
- "@chakra-ui/accordion" "1.4.2"
+ "@chakra-ui/accordion" "1.4.3"
"@chakra-ui/alert" "1.3.2"
- "@chakra-ui/avatar" "1.3.1"
+ "@chakra-ui/avatar" "1.3.2"
"@chakra-ui/breadcrumb" "1.3.1"
- "@chakra-ui/button" "1.5.1"
- "@chakra-ui/checkbox" "1.6.1"
+ "@chakra-ui/button" "1.5.2"
+ "@chakra-ui/checkbox" "1.6.2"
"@chakra-ui/close-button" "1.2.2"
"@chakra-ui/control-box" "1.1.1"
- "@chakra-ui/counter" "1.2.1"
+ "@chakra-ui/counter" "1.2.2"
"@chakra-ui/css-reset" "1.1.1"
- "@chakra-ui/editable" "1.3.1"
- "@chakra-ui/form-control" "1.5.2"
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/editable" "1.3.2"
+ "@chakra-ui/form-control" "1.5.3"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/icon" "2.0.0"
- "@chakra-ui/image" "1.1.1"
- "@chakra-ui/input" "1.3.2"
- "@chakra-ui/layout" "1.6.0"
+ "@chakra-ui/image" "1.1.2"
+ "@chakra-ui/input" "1.3.3"
+ "@chakra-ui/layout" "1.7.0"
"@chakra-ui/live-region" "1.1.1"
- "@chakra-ui/media-query" "1.2.2"
- "@chakra-ui/menu" "1.8.2"
- "@chakra-ui/modal" "1.10.2"
- "@chakra-ui/number-input" "1.3.2"
- "@chakra-ui/pin-input" "1.7.1"
- "@chakra-ui/popover" "1.11.0"
+ "@chakra-ui/media-query" "1.2.3"
+ "@chakra-ui/menu" "1.8.3"
+ "@chakra-ui/modal" "1.10.3"
+ "@chakra-ui/number-input" "1.3.3"
+ "@chakra-ui/pin-input" "1.7.2"
+ "@chakra-ui/popover" "1.11.1"
"@chakra-ui/popper" "2.4.1"
- "@chakra-ui/portal" "1.3.1"
+ "@chakra-ui/portal" "1.3.2"
"@chakra-ui/progress" "1.2.1"
- "@chakra-ui/provider" "1.7.3"
- "@chakra-ui/radio" "1.4.3"
+ "@chakra-ui/provider" "1.7.4"
+ "@chakra-ui/radio" "1.4.4"
"@chakra-ui/react-env" "1.1.1"
- "@chakra-ui/select" "1.2.2"
- "@chakra-ui/skeleton" "1.2.3"
- "@chakra-ui/slider" "1.5.2"
+ "@chakra-ui/select" "1.2.3"
+ "@chakra-ui/skeleton" "1.2.4"
+ "@chakra-ui/slider" "1.5.3"
"@chakra-ui/spinner" "1.2.1"
"@chakra-ui/stat" "1.2.2"
- "@chakra-ui/switch" "1.3.1"
- "@chakra-ui/system" "1.8.3"
+ "@chakra-ui/switch" "1.3.2"
+ "@chakra-ui/system" "1.9.0"
"@chakra-ui/table" "1.3.1"
- "@chakra-ui/tabs" "1.6.1"
+ "@chakra-ui/tabs" "1.6.2"
"@chakra-ui/tag" "1.2.2"
- "@chakra-ui/textarea" "1.2.2"
- "@chakra-ui/theme" "1.12.2"
- "@chakra-ui/toast" "1.5.0"
- "@chakra-ui/tooltip" "1.4.2"
+ "@chakra-ui/textarea" "1.2.3"
+ "@chakra-ui/theme" "1.12.3"
+ "@chakra-ui/toast" "1.5.1"
+ "@chakra-ui/tooltip" "1.4.3"
"@chakra-ui/transition" "1.4.2"
"@chakra-ui/utils" "1.9.1"
"@chakra-ui/visually-hidden" "1.1.1"
-"@chakra-ui/select@1.2.2":
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-1.2.2.tgz#1c2956c21a012e7c9ea294db42d3cab0d05bed24"
- integrity sha512-EchJW3St1DtSWHe//DHwKjGsQYL2zbKcNCLnJWQKGMPZsQhAD2wsm4xjowFrV8AkY7jbVM/U2v68puN7YTC3hg==
+"@chakra-ui/select@1.2.3":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/select/-/select-1.2.3.tgz#ba08c50bec1399404473cfd3f5415eb415e21fc6"
+ integrity sha512-LGT8z06InjfMTQyWgQUqinucvObkO0bOR87c4swWlAESkS6w+g8PsH9UJ87NT5W+hzCybvqSfRjMHYwC9qUnrg==
dependencies:
- "@chakra-ui/form-control" "1.5.2"
+ "@chakra-ui/form-control" "1.5.3"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/skeleton@1.2.3":
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-1.2.3.tgz#f7be28e3af214473fb6cdec45d0715a049f82575"
- integrity sha512-u5ASkzPiBjfvKxKuBienUfmyYDTHziSWQ8Ny6k83LbwLv9IcmBNGsSkmsp7hesgi9cMHGBQ3hY2GTqG9ljndIg==
+"@chakra-ui/skeleton@1.2.4":
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/skeleton/-/skeleton-1.2.4.tgz#2d7b3eceff6c6f8f00fba8cc6e2c20cc46e62a34"
+ integrity sha512-j5cAwXfyb7sybk+QjSz5TlQkQVeekdRZBF4xEm4TXGGZiMSTsd9/7BOBtxopakn/YKDP1owZ4oSGZGYGNmTS8w==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
- "@chakra-ui/media-query" "1.2.2"
- "@chakra-ui/system" "1.8.3"
+ "@chakra-ui/hooks" "1.7.2"
+ "@chakra-ui/media-query" "1.2.3"
+ "@chakra-ui/system" "1.9.0"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/slider@1.5.2":
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-1.5.2.tgz#173218b55befe0f7200fe7f332234b3824d19b08"
- integrity sha512-zP07TMew61GkJe47Nu7zEg/SUEwPHpN4alW6VUM6Y8UaVpQaDx7InarbWTc/bXdTP03SfE+hQ6WD9Oy7noe4hQ==
+"@chakra-ui/slider@1.5.3":
+ version "1.5.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/slider/-/slider-1.5.3.tgz#7288e830ce24a700ec883847748263a8084c12b8"
+ integrity sha512-i14b8MYlantiACI4jyjxU5PdX3Nwmz65TdINd7LywrKZu0ahE4GRXCcIGyM48vlXWfdkFhKLqLuF7+EYwLYtHA==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
@@ -599,30 +599,30 @@
"@chakra-ui/utils" "1.9.1"
"@chakra-ui/visually-hidden" "1.1.1"
-"@chakra-ui/styled-system@1.15.0":
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-1.15.0.tgz#fe117ace12b452379e4df69f4779395ead55917f"
- integrity sha512-LnsKeiYkUuJ+NMTwueiX0Mj8CW9XAMJrJxpQm/X3GY5L5PO7Hv6wW725Ovqdy4mhG3IK7S8444FthpsDv/luHw==
+"@chakra-ui/styled-system@1.16.0":
+ version "1.16.0"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/styled-system/-/styled-system-1.16.0.tgz#afe974e9c44b98e2606e83dae7560e619dffc6fd"
+ integrity sha512-5vGU4eCixFMXp9u9PT+5724ptzBLP5AcFks88h19TpIevcElCkvAXw2G2CDJ0jJZM59l61nJGHIjn246f3iJUA==
dependencies:
"@chakra-ui/utils" "1.9.1"
csstype "^3.0.9"
-"@chakra-ui/switch@1.3.1":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-1.3.1.tgz#e8f411f0645f79b828b5f865684028032ad7647d"
- integrity sha512-92hXJ2/ozj7B3cJNT259mFNoad7Ck892uHTuEQ/GIdXb25doE6F1wCp0TreOnGiEgU5YSaxpdrcZjA0QODP//w==
+"@chakra-ui/switch@1.3.2":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/switch/-/switch-1.3.2.tgz#8455249589cc321ea348bcf5af6ebd84e44de348"
+ integrity sha512-aqhAq93DW97qD/KTBiWe2ip64vxSkN/qimMRFdG4xqtS2DxGeicQiv7Eis3NgAq2xIMM9XOoeXutU4kGkha1+w==
dependencies:
- "@chakra-ui/checkbox" "1.6.1"
+ "@chakra-ui/checkbox" "1.6.2"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/system@1.8.3":
- version "1.8.3"
- resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-1.8.3.tgz#bad447f4fda427fc28e234470d9fcc5a9b524d62"
- integrity sha512-6MaevsT7A2ifgOGQQCQsfvzPVd0kEXqFrX1Oxd842bawaqthmbFdo2bBTdaia/+Ivq/8Xot2uAQSbU+3NuRiUA==
+"@chakra-ui/system@1.9.0":
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/system/-/system-1.9.0.tgz#22f530fd0cb16c20e50abe2bb7c1392d2995382a"
+ integrity sha512-CnLmx3nVZo87puSKxDNNQUwJyWYCnx4ZUFXdDFNdKroQyZUpSYLVv1OniXbkjwEt1YdZMsWm93lZQb/0VRcKvg==
dependencies:
- "@chakra-ui/color-mode" "1.3.2"
+ "@chakra-ui/color-mode" "1.3.3"
"@chakra-ui/react-utils" "1.2.1"
- "@chakra-ui/styled-system" "1.15.0"
+ "@chakra-ui/styled-system" "1.16.0"
"@chakra-ui/utils" "1.9.1"
react-fast-compare "3.2.0"
@@ -633,14 +633,14 @@
dependencies:
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/tabs@1.6.1":
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-1.6.1.tgz#362350b10f2fc34b5bbbca960075eddd022e3ff6"
- integrity sha512-p7HdHcleJWNwteWYVPt2KF52YbS5pIIfs/IpgtnYZRsJbqvRVxSwgg5Wsn+vuxFXBKW0cA2rDGbyzsZ+ChtEXQ==
+"@chakra-ui/tabs@1.6.2":
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/tabs/-/tabs-1.6.2.tgz#d17f43c81d8e718b378f6e891151e150c9d344e7"
+ integrity sha512-J0OY4sEhZW0jxlj4MkotLiD0/snMk7IsqvDxUB17MxuFRs5ytUssHzCqO7fexH7fSfd54ITNoUIns6Ir2ueCsA==
dependencies:
"@chakra-ui/clickable" "1.2.1"
"@chakra-ui/descendant" "2.1.1"
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
@@ -652,12 +652,12 @@
"@chakra-ui/icon" "2.0.0"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/textarea@1.2.2":
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-1.2.2.tgz#3e62612e4b1bc0724ba084b0b08b247ac2bbdbab"
- integrity sha512-DoLdKxHk0DyrQDnj1la9wjl2AW3/SK62nfWDYLAm0ouFsw1VKPw9nU+Yyj0dPruQTzI19nLaYF26i97rtnT27g==
+"@chakra-ui/textarea@1.2.3":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/textarea/-/textarea-1.2.3.tgz#e6da85fdde0ad7fc68944662564e12e982262349"
+ integrity sha512-yLObhuSnIX11GyjsiEIC2gFTDtUoGSpHUqHRD8nF9BmuePHqFzG3jdkBrFMd09u0Ee6kr6o0tia6g9Wt29TyQQ==
dependencies:
- "@chakra-ui/form-control" "1.5.2"
+ "@chakra-ui/form-control" "1.5.3"
"@chakra-ui/utils" "1.9.1"
"@chakra-ui/theme-tools@1.3.1", "@chakra-ui/theme-tools@^1.3.1":
@@ -668,36 +668,36 @@
"@chakra-ui/utils" "1.9.1"
"@ctrl/tinycolor" "^3.4.0"
-"@chakra-ui/theme@1.12.2":
- version "1.12.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-1.12.2.tgz#191e168d83e7a66bc3e65be802ad4e4e2a9bbeb5"
- integrity sha512-LVjSf16yYHD40ILrsDEd3idVQRvJSY7JY8lvTGWo2p6v+JQESWF+zXlYi9Le+TXRpZuFvJuuQ1SEvoqVwdcJ8Q==
+"@chakra-ui/theme@1.12.3":
+ version "1.12.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/theme/-/theme-1.12.3.tgz#842fcb4dba01179c05c7365eb33486da10ef2b6d"
+ integrity sha512-aqMGSfQLYOrcWBKaD5GuVYrpI5Zoq4Gt3D9P+drB/CDTRgBLWuJI1rbKOSSSJUK4RNZ0WbakPwz6wXiVS3vVdQ==
dependencies:
"@chakra-ui/anatomy" "1.2.1"
"@chakra-ui/theme-tools" "1.3.1"
"@chakra-ui/utils" "1.9.1"
-"@chakra-ui/toast@1.5.0":
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-1.5.0.tgz#c6456c0a4f24669e16946de318ad568e24a5d497"
- integrity sha512-rTsFx/Qos5oVPN6aZMbT/wTxwZlFNSXQqrTpJYaRcRFQGzxIDDxmGkKYfPnyJjRP9i6EqynJhXEIyhMA0xO0dw==
+"@chakra-ui/toast@1.5.1":
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/toast/-/toast-1.5.1.tgz#47058ee5fcc0ded1ab31bcdc86a5344256dbfdb2"
+ integrity sha512-cynOM/mGqf/dPulYOQMcpQnbf8pQWV2SEz1ymW1Nni1hh6zCqW6+pI+YeMxeadJLAwohnRumwzLsRiSL4l+YRQ==
dependencies:
"@chakra-ui/alert" "1.3.2"
"@chakra-ui/close-button" "1.2.2"
- "@chakra-ui/hooks" "1.7.1"
- "@chakra-ui/theme" "1.12.2"
+ "@chakra-ui/hooks" "1.7.2"
+ "@chakra-ui/theme" "1.12.3"
"@chakra-ui/transition" "1.4.2"
"@chakra-ui/utils" "1.9.1"
"@reach/alert" "0.13.2"
-"@chakra-ui/tooltip@1.4.2":
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-1.4.2.tgz#fce61c7ad4c3e6e5833487ddf75f03c774913fb9"
- integrity sha512-+wyYXG8qenKkFy2YSFfOBf3rlWADnu6S9EUxP+3Rmm78unOWXDuTJWzqy2QlXs2BwoQoifaz1LVwzmMb7WLVgQ==
+"@chakra-ui/tooltip@1.4.3":
+ version "1.4.3"
+ resolved "https://registry.yarnpkg.com/@chakra-ui/tooltip/-/tooltip-1.4.3.tgz#0fa58d711799b438425f094ae4f04abfa8096649"
+ integrity sha512-d+JsT65LPYFoGEfmqvqa3xDzW1enBdAHns3GYoHnie92pLseMKQYJsITO5SmwNGnEiOHbJ8pkB/hggo+xHKkpg==
dependencies:
- "@chakra-ui/hooks" "1.7.1"
+ "@chakra-ui/hooks" "1.7.2"
"@chakra-ui/popper" "2.4.1"
- "@chakra-ui/portal" "1.3.1"
+ "@chakra-ui/portal" "1.3.2"
"@chakra-ui/react-utils" "1.2.1"
"@chakra-ui/utils" "1.9.1"
"@chakra-ui/visually-hidden" "1.1.1"
@@ -984,17 +984,6 @@
"@types/yargs" "^15.0.0"
chalk "^4.0.0"
-"@jest/types@^27.4.2":
- version "27.4.2"
- resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5"
- integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg==
- dependencies:
- "@types/istanbul-lib-coverage" "^2.0.0"
- "@types/istanbul-reports" "^3.0.0"
- "@types/node" "*"
- "@types/yargs" "^16.0.0"
- chalk "^4.0.0"
-
"@napi-rs/triples@1.0.3":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@napi-rs/triples/-/triples-1.0.3.tgz#76d6d0c3f4d16013c61e45dfca5ff1e6c31ae53c"
@@ -1169,9 +1158,9 @@
integrity sha512-IXf3XA7+XyN7CP9gGh/XB0UxVMlvARGEgGXLubFICsUMGz6Q+DU+i4gGlpOxTjKvXjkJDJC8YdqdKkDj9qZHEQ==
"@popperjs/core@^2.9.0", "@popperjs/core@^2.9.3":
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.0.tgz#6734f8ebc106a0860dff7f92bf90df193f0935d7"
- integrity sha512-zrsUxjLOKAzdewIDRWy9nsV1GQsKBCWaGwsZQlCgr6/q+vjyZhFgqedLfFBuI9anTPEUT4APq9Mu0SZBTzIcGQ==
+ version "2.11.2"
+ resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9"
+ integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA==
"@prisma/client@^3.7.0":
version "3.7.0"
@@ -1252,10 +1241,10 @@
magic-string "^0.25.7"
resolve "^1.17.0"
-"@rollup/plugin-node-resolve@^13.1.1":
- version "13.1.1"
- resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.1.tgz#d38ba06e7b181ab4df64c75409b43d9bdc95ae34"
- integrity sha512-6QKtRevXLrmEig9UiMYt2fSvee9TyltGRfw+qSs6xjUnxwjOzTOqy+/Lpxsgjb8mJn1EQNbCDAvt89O4uzL5kw==
+"@rollup/plugin-node-resolve@^13.1.3":
+ version "13.1.3"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz#2ed277fb3ad98745424c1d2ba152484508a92d79"
+ integrity sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==
dependencies:
"@rollup/pluginutils" "^3.1.0"
"@types/resolve" "1.17.1"
@@ -1453,19 +1442,19 @@
integrity sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==
"@types/node@*", "@types/node@>=8.1.0", "@types/node@^17.0.4":
- version "17.0.5"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.5.tgz#57ca67ec4e57ad9e4ef5a6bab48a15387a1c83e0"
- integrity sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw==
+ version "17.0.8"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b"
+ integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==
"@types/node@^14.14.31":
- version "14.18.3"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.3.tgz#b3682cfd9d5542b025df13233d073cb4347f63f3"
- integrity sha512-GtTH2crF4MtOIrrAa+jgTV9JX/PfoUCYr6MiZw7O/dkZu5b6gm5dc1nAL0jwGo4ortSBBtGyeVaxdC8X6V+pLg==
+ version "14.18.5"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.5.tgz#0dd636fe7b2c6055cbed0d4ca3b7fb540f130a96"
+ integrity sha512-LMy+vDDcQR48EZdEx5wRX1q/sEl6NdGuHXPnfeL8ixkwCOSZ2qnIyIZmcCbdX0MeRqHhAcHmX+haCbrS8Run+A==
"@types/node@^16.11.9":
- version "16.11.17"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.17.tgz#ae146499772e33fc6382e1880bc567e41a528586"
- integrity sha512-C1vTZME8cFo8uxY2ui41xcynEotVkczIVI5AjLmy5pkpBv/FtG+jhtOlfcPysI8VRVwoOMv6NJm44LGnoMSWkw==
+ version "16.11.19"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.19.tgz#1afa165146997b8286b6eabcb1c2d50729055169"
+ integrity sha512-BPAcfDPoHlRQNKktbsbnpACGdypPFBuX4xQlsWDE7B8XXcfII+SpOLay3/qZmCLb39kV5S1RTYwXdkx2lwLYng==
"@types/nprogress@^0.2.0":
version "0.2.0"
@@ -1515,7 +1504,7 @@
dependencies:
"@types/react" "*"
-"@types/react@*", "@types/react@^17.0.37", "@types/react@^17.0.38":
+"@types/react@*", "@types/react@^17.0.38":
version "17.0.38"
resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd"
integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ==
@@ -1587,13 +1576,6 @@
dependencies:
"@types/yargs-parser" "*"
-"@types/yargs@^16.0.0":
- version "16.0.4"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977"
- integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==
- dependencies:
- "@types/yargs-parser" "*"
-
"@types/yauzl@^2.9.1":
version "2.9.2"
resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a"
@@ -1601,13 +1583,14 @@
dependencies:
"@types/node" "*"
-"@typescript-eslint/eslint-plugin@^5.8.0":
- version "5.8.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.8.1.tgz#97dfaa39f38e99f86801fdf34f9f1bed66704258"
- integrity sha512-wTZ5oEKrKj/8/366qTM366zqhIKAp6NCMweoRONtfuC07OAU9nVI2GZZdqQ1qD30WAAtcPdkH+npDwtRFdp4Rw==
+"@typescript-eslint/eslint-plugin@^5.9.0":
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.9.0.tgz#382182d5cb062f52aac54434cfc47c28898c8006"
+ integrity sha512-qT4lr2jysDQBQOPsCCvpPUZHjbABoTJW8V9ZzIYKHMfppJtpdtzszDYsldwhFxlhvrp7aCHeXD1Lb9M1zhwWwQ==
dependencies:
- "@typescript-eslint/experimental-utils" "5.8.1"
- "@typescript-eslint/scope-manager" "5.8.1"
+ "@typescript-eslint/experimental-utils" "5.9.0"
+ "@typescript-eslint/scope-manager" "5.9.0"
+ "@typescript-eslint/type-utils" "5.9.0"
debug "^4.3.2"
functional-red-black-tree "^1.0.1"
ignore "^5.1.8"
@@ -1615,60 +1598,69 @@
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/experimental-utils@5.8.1":
- version "5.8.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.1.tgz#01861eb2f0749f07d02db342b794145a66ed346f"
- integrity sha512-fbodVnjIDU4JpeXWRDsG5IfIjYBxEvs8EBO8W1+YVdtrc2B9ppfof5sZhVEDOtgTfFHnYQJDI8+qdqLYO4ceww==
+"@typescript-eslint/experimental-utils@5.9.0":
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.9.0.tgz#652762d37d6565ef07af285021b8347b6c79a827"
+ integrity sha512-ZnLVjBrf26dn7ElyaSKa6uDhqwvAi4jBBmHK1VxuFGPRAxhdi18ubQYSGA7SRiFiES3q9JiBOBHEBStOFkwD2g==
dependencies:
"@types/json-schema" "^7.0.9"
- "@typescript-eslint/scope-manager" "5.8.1"
- "@typescript-eslint/types" "5.8.1"
- "@typescript-eslint/typescript-estree" "5.8.1"
+ "@typescript-eslint/scope-manager" "5.9.0"
+ "@typescript-eslint/types" "5.9.0"
+ "@typescript-eslint/typescript-estree" "5.9.0"
eslint-scope "^5.1.1"
eslint-utils "^3.0.0"
"@typescript-eslint/parser@^5.0.0":
- version "5.8.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.8.1.tgz#380f5f1e596b540059998aa3fc80d78f0f9b0d0a"
- integrity sha512-K1giKHAjHuyB421SoXMXFHHVI4NdNY603uKw92++D3qyxSeYvC10CBJ/GE5Thpo4WTUvu1mmJI2/FFkz38F2Gw==
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.9.0.tgz#fdbb08767a4caa6ca6ccfed5f9ffe9387f0c7d97"
+ integrity sha512-/6pOPz8yAxEt4PLzgbFRDpZmHnXCeZgPDrh/1DaVKOjvn/UPMlWhbx/gA96xRi2JxY1kBl2AmwVbyROUqys5xQ==
dependencies:
- "@typescript-eslint/scope-manager" "5.8.1"
- "@typescript-eslint/types" "5.8.1"
- "@typescript-eslint/typescript-estree" "5.8.1"
+ "@typescript-eslint/scope-manager" "5.9.0"
+ "@typescript-eslint/types" "5.9.0"
+ "@typescript-eslint/typescript-estree" "5.9.0"
debug "^4.3.2"
-"@typescript-eslint/scope-manager@5.8.1":
- version "5.8.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.8.1.tgz#7fc0604f7ade8833e4d42cebaa1e2debf8b932e4"
- integrity sha512-DGxJkNyYruFH3NIZc3PwrzwOQAg7vvgsHsHCILOLvUpupgkwDZdNq/cXU3BjF4LNrCsVg0qxEyWasys5AiJ85Q==
+"@typescript-eslint/scope-manager@5.9.0":
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.9.0.tgz#02dfef920290c1dcd7b1999455a3eaae7a1a3117"
+ integrity sha512-DKtdIL49Qxk2a8icF6whRk7uThuVz4A6TCXfjdJSwOsf+9ree7vgQWcx0KOyCdk0i9ETX666p4aMhrRhxhUkyg==
dependencies:
- "@typescript-eslint/types" "5.8.1"
- "@typescript-eslint/visitor-keys" "5.8.1"
+ "@typescript-eslint/types" "5.9.0"
+ "@typescript-eslint/visitor-keys" "5.9.0"
-"@typescript-eslint/types@5.8.1":
- version "5.8.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.8.1.tgz#04c6b49ebc8c99238238a6b8b43f2fc613983b5a"
- integrity sha512-L/FlWCCgnjKOLefdok90/pqInkomLnAcF9UAzNr+DSqMC3IffzumHTQTrINXhP1gVp9zlHiYYjvozVZDPleLcA==
+"@typescript-eslint/type-utils@5.9.0":
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.9.0.tgz#fd5963ead04bc9b7af9c3a8e534d8d39f1ce5f93"
+ integrity sha512-uVCb9dJXpBrK1071ri5aEW7ZHdDHAiqEjYznF3HSSvAJXyrkxGOw2Ejibz/q6BXdT8lea8CMI0CzKNFTNI6TEQ==
+ dependencies:
+ "@typescript-eslint/experimental-utils" "5.9.0"
+ debug "^4.3.2"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/types@5.9.0":
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.9.0.tgz#e5619803e39d24a03b3369506df196355736e1a3"
+ integrity sha512-mWp6/b56Umo1rwyGCk8fPIzb9Migo8YOniBGPAQDNC6C52SeyNGN4gsVwQTAR+RS2L5xyajON4hOLwAGwPtUwg==
-"@typescript-eslint/typescript-estree@5.8.1":
- version "5.8.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.8.1.tgz#a592855be688e7b729a1e9411d7d74ec992ed6ef"
- integrity sha512-26lQ8l8tTbG7ri7xEcCFT9ijU5Fk+sx/KRRyyzCv7MQ+rZZlqiDPtMKWLC8P7o+dtCnby4c+OlxuX1tp8WfafQ==
+"@typescript-eslint/typescript-estree@5.9.0":
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.9.0.tgz#0e5c6f03f982931abbfbc3c1b9df5fbf92a3490f"
+ integrity sha512-kxo3xL2mB7XmiVZcECbaDwYCt3qFXz99tBSuVJR4L/sR7CJ+UNAPrYILILktGj1ppfZ/jNt/cWYbziJUlHl1Pw==
dependencies:
- "@typescript-eslint/types" "5.8.1"
- "@typescript-eslint/visitor-keys" "5.8.1"
+ "@typescript-eslint/types" "5.9.0"
+ "@typescript-eslint/visitor-keys" "5.9.0"
debug "^4.3.2"
globby "^11.0.4"
is-glob "^4.0.3"
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/visitor-keys@5.8.1":
- version "5.8.1"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.8.1.tgz#58a2c566265d5511224bc316149890451c1bbab0"
- integrity sha512-SWgiWIwocK6NralrJarPZlWdr0hZnj5GXHIgfdm8hNkyKvpeQuFyLP6YjSIe9kf3YBIfU6OHSZLYkQ+smZwtNg==
+"@typescript-eslint/visitor-keys@5.9.0":
+ version "5.9.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.9.0.tgz#7585677732365e9d27f1878150fab3922784a1a6"
+ integrity sha512-6zq0mb7LV0ThExKlecvpfepiB+XEtFv/bzx7/jKSgyXTFD7qjmSu1FoiS0x3OZaiS+UIXpH2vd9O89f02RCtgw==
dependencies:
- "@typescript-eslint/types" "5.8.1"
+ "@typescript-eslint/types" "5.9.0"
eslint-visitor-keys "^3.0.0"
"@udecode/plate-autoformat@^9.0.0":
@@ -2053,27 +2045,27 @@ at-least-node@^1.0.0:
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
-autoprefixer@^10.4.0:
- version "10.4.0"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.0.tgz#c3577eb32a1079a440ec253e404eaf1eb21388c8"
- integrity sha512-7FdJ1ONtwzV1G43GDD0kpVMn/qbiNqyOPMFTX5nRffI+7vgWoFEc6DcXOxHJxrWNDXrZh18eDsZjvZGUljSRGA==
+autoprefixer@^10.4.1:
+ version "10.4.1"
+ resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.1.tgz#1735959d6462420569bc42408016acbc56861c12"
+ integrity sha512-B3ZEG7wtzXDRCEFsan7HmR2AeNsxdJB0+sEC0Hc5/c2NbhJqPwuZm+tn233GBVw82L+6CtD6IPSfVruwKjfV3A==
dependencies:
- browserslist "^4.17.5"
- caniuse-lite "^1.0.30001272"
- fraction.js "^4.1.1"
+ browserslist "^4.19.1"
+ caniuse-lite "^1.0.30001294"
+ fraction.js "^4.1.2"
normalize-range "^0.1.2"
picocolors "^1.0.0"
- postcss-value-parser "^4.1.0"
+ postcss-value-parser "^4.2.0"
available-typed-arrays@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
-aws-sdk@^2.1048.0:
- version "2.1048.0"
- resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1048.0.tgz#02f2f35e0f51dd4510462e05c7a48fd4649d33f8"
- integrity sha512-mVwWo+Udiuc/yEZ/DgJQGqOEtfiQjgUdtshx/t6ISe3+jW3TF9hUACwADwx2Sr/fuJyyJ3QD5JYLt5Cw35wQpA==
+aws-sdk@^2.1051.0:
+ version "2.1051.0"
+ resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1051.0.tgz#ce7fc1fd08a984b0710268c5eff707ce32d8fe86"
+ integrity sha512-SqXimyuyANw2fozbyxR8qNZPN9c/tsVkxq812nMVTApym+7t+h/LcWW1rfPm/EzgTEnrPV9v3a25L/8mXvN5Vg==
dependencies:
buffer "4.9.2"
events "1.1.1"
@@ -2273,7 +2265,7 @@ browserslist@4.16.6:
escalade "^3.1.1"
node-releases "^1.1.71"
-browserslist@^4.0.0, browserslist@^4.16.0, browserslist@^4.16.6, browserslist@^4.17.5:
+browserslist@^4.0.0, browserslist@^4.16.0, browserslist@^4.16.6, browserslist@^4.19.1:
version "4.19.1"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3"
integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==
@@ -2374,10 +2366,10 @@ caniuse-api@^3.0.0:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
-caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001202, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001228, caniuse-lite@^1.0.30001272, caniuse-lite@^1.0.30001286:
- version "1.0.30001292"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001292.tgz#4a55f61c06abc9595965cfd77897dc7bc1cdc456"
- integrity sha512-jnT4Tq0Q4ma+6nncYQVe7d73kmDmE9C3OGTx3MvW7lBM/eY1S1DZTMBON7dqV481RhNiS5OxD7k9JQvmDOTirw==
+caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001202, caniuse-lite@^1.0.30001219, caniuse-lite@^1.0.30001228, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001294:
+ version "1.0.30001296"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001296.tgz#d99f0f3bee66544800b93d261c4be55a35f1cec8"
+ integrity sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==
caseless@~0.12.0:
version "0.12.0"
@@ -2642,9 +2634,9 @@ copy-to-clipboard@3.3.1, copy-to-clipboard@^3.3.1:
toggle-selection "^1.0.6"
core-js-pure@^3.19.0:
- version "3.20.1"
- resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.20.1.tgz#f7a2c62f98de83e4da8fca7b78846d3a2f542145"
- integrity sha512-yeNNr3L9cEBwNy6vhhIJ0nko7fE7uFO6PgawcacGt2VWep4WqQx0RiqlkgSP7kqUMC1IKdfO9qPeWXcUheHLVQ==
+ version "3.20.2"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.20.2.tgz#5d263565f0e34ceeeccdc4422fae3e84ca6b8c0f"
+ integrity sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg==
core-util-is@1.0.2:
version "1.0.2"
@@ -3190,9 +3182,9 @@ ecc-jsbn@~0.1.1:
safer-buffer "^2.1.0"
electron-to-chromium@^1.3.723, electron-to-chromium@^1.4.17:
- version "1.4.28"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.28.tgz#fef0e92e281df6d568f482d8d53c34ca5374de48"
- integrity sha512-Gzbf0wUtKfyPaqf0Plz+Ctinf9eQIzxEqBHwSvbGfeOm9GMNdLxyu1dNiCUfM+x6r4BE0xUJNh3Nmg9gfAtTmg==
+ version "1.4.36"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.36.tgz#446c6184dbe5baeb5eae9a875490831e4bc5319a"
+ integrity sha512-MbLlbF39vKrXWlFEFpCgDHwdlz4O3LmHM5W4tiLRHjSmEUXjJjz8sZkMgWgvYxlZw3N1iDTmCEtOkkESb5TMCg==
elliptic@^6.5.3:
version "6.5.4"
@@ -3369,14 +3361,13 @@ eslint-import-resolver-typescript@^2.4.0:
resolve "^1.20.0"
tsconfig-paths "^3.9.0"
-eslint-module-utils@^2.7.1:
- version "2.7.1"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.1.tgz#b435001c9f8dd4ab7f6d0efcae4b9696d4c24b7c"
- integrity sha512-fjoetBXQZq2tSTWZ9yWVl2KuFrTZZH3V+9iD1V1RfpDgxzJR+mPd/KZmMiA8gbPqdBzpNiEHOuT7IYEWxrH0zQ==
+eslint-module-utils@^2.7.2:
+ version "2.7.2"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz#1d0aa455dcf41052339b63cada8ab5fd57577129"
+ integrity sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==
dependencies:
debug "^3.2.7"
find-up "^2.1.0"
- pkg-dir "^2.0.0"
eslint-plugin-cypress@^2.12.1:
version "2.12.1"
@@ -3386,23 +3377,23 @@ eslint-plugin-cypress@^2.12.1:
globals "^11.12.0"
eslint-plugin-import@^2.25.2:
- version "2.25.3"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.3.tgz#a554b5f66e08fb4f6dc99221866e57cfff824766"
- integrity sha512-RzAVbby+72IB3iOEL8clzPLzL3wpDrlwjsTBAQXgyp5SeTqqY+0bFubwuo+y/HLhNZcXV4XqTBO4LGsfyHIDXg==
+ version "2.25.4"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1"
+ integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==
dependencies:
array-includes "^3.1.4"
array.prototype.flat "^1.2.5"
debug "^2.6.9"
doctrine "^2.1.0"
eslint-import-resolver-node "^0.3.6"
- eslint-module-utils "^2.7.1"
+ eslint-module-utils "^2.7.2"
has "^1.0.3"
is-core-module "^2.8.0"
is-glob "^4.0.3"
minimatch "^3.0.4"
object.values "^1.1.5"
resolve "^1.20.0"
- tsconfig-paths "^3.11.0"
+ tsconfig-paths "^3.12.0"
eslint-plugin-jsx-a11y@^6.5.1:
version "6.5.1"
@@ -3840,7 +3831,7 @@ form-data@~2.3.2:
combined-stream "^1.0.6"
mime-types "^2.1.12"
-fraction.js@^4.1.1:
+fraction.js@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8"
integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==
@@ -4027,9 +4018,9 @@ globby@^11.0.4:
slash "^3.0.0"
graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4:
- version "4.2.8"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
- integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==
+ version "4.2.9"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
+ integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
has-bigints@^1.0.1:
version "1.0.1"
@@ -4237,7 +4228,7 @@ immer@9.0.6:
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.6.tgz#7a96bf2674d06c8143e327cbf73539388ddf1a73"
integrity sha512-G95ivKpy+EvVAnAab4fVa4YGYn24J1SpEktnJX7JJ45Bd7xqME/SCplFzYFmTbrkwZbQ4xJK1xMTUYBkN6pWsQ==
-immer@^9.0.6:
+immer@^9.0.6, immer@^9.0.7:
version "9.0.7"
resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.7.tgz#b6156bd7db55db7abc73fd2fdadf4e579a701075"
integrity sha512-KGllzpbamZDvOIxnmJ0jI840g7Oikx58lBPWV0hUh7dtAyZpFqqrBZdKka5GlTwMTZ1Tjc/bKKW4VSFAt6BqMA==
@@ -4711,7 +4702,7 @@ levn@^0.4.1:
prelude-ls "^1.2.1"
type-check "~0.4.0"
-lilconfig@^2.0.3:
+lilconfig@^2.0.3, lilconfig@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082"
integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==
@@ -4722,16 +4713,16 @@ lines-and-columns@^1.1.6:
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
listr2@^3.8.3:
- version "3.13.5"
- resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.5.tgz#105a813f2eb2329c4aae27373a281d610ee4985f"
- integrity sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA==
+ version "3.14.0"
+ resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e"
+ integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==
dependencies:
cli-truncate "^2.1.0"
colorette "^2.0.16"
log-update "^4.0.0"
p-map "^4.0.0"
rfdc "^1.3.0"
- rxjs "^7.4.0"
+ rxjs "^7.5.1"
through "^2.3.8"
wrap-ansi "^7.0.0"
@@ -5510,7 +5501,7 @@ path-key@^3.0.0, path-key@^3.1.0:
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-path-parse@^1.0.6:
+path-parse@^1.0.6, path-parse@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
@@ -5554,9 +5545,9 @@ picocolors@^1.0.0:
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
- integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
pidtree@^0.3.0:
version "0.3.1"
@@ -5578,13 +5569,6 @@ pify@^5.0.0:
resolved "https://registry.yarnpkg.com/pify/-/pify-5.0.0.tgz#1f5eca3f5e87ebec28cc6d54a0e4aaf00acc127f"
integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==
-pkg-dir@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
- integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
- dependencies:
- find-up "^2.1.0"
-
pkg-dir@^4.1.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
@@ -5608,9 +5592,9 @@ popmotion@9.3.6:
tslib "^2.1.0"
postcss-calc@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.0.0.tgz#a05b87aacd132740a5db09462a3612453e5df90a"
- integrity sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.1.0.tgz#646a67bc47ef98d5b1ae3c2f944830d04a5fd6a7"
+ integrity sha512-XaJ+DArhRtRAzI+IqjRNTM0i4NFKkMK5StepwynfrF27UfO6/oMaELSVDE4f9ndLHyaO4aDKUwfQKVmje/BzCg==
dependencies:
postcss-selector-parser "^6.0.2"
postcss-value-parser "^4.0.2"
@@ -5652,21 +5636,19 @@ postcss-discard-overridden@^5.0.1:
resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz#454b41f707300b98109a75005ca4ab0ff2743ac6"
integrity sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==
-postcss-js@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-3.0.3.tgz#2f0bd370a2e8599d45439f6970403b5873abda33"
- integrity sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==
+postcss-js@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-4.0.0.tgz#31db79889531b80dc7bc9b0ad283e418dce0ac00"
+ integrity sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==
dependencies:
camelcase-css "^2.0.1"
- postcss "^8.1.6"
postcss-load-config@^3.0.0, postcss-load-config@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.0.tgz#d39c47091c4aec37f50272373a6a648ef5e97829"
- integrity sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.1.tgz#2f53a17f2f543d9e63864460af42efdac0d41f87"
+ integrity sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==
dependencies:
- import-cwd "^3.0.0"
- lilconfig "^2.0.3"
+ lilconfig "^2.0.4"
yaml "^1.10.2"
postcss-merge-longhand@^5.0.4:
@@ -5898,7 +5880,7 @@ postcss@8.2.15:
nanoid "^3.1.23"
source-map "^0.6.1"
-postcss@^8.1.6, postcss@^8.4.5:
+postcss@^8.4.5:
version "8.4.5"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.5.tgz#bae665764dfd4c6fcc24dc0fdf7e7aa00cc77f95"
integrity sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==
@@ -5952,11 +5934,10 @@ pretty-format@^26.6.2:
react-is "^17.0.1"
pretty-format@^27.0.2:
- version "27.4.2"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.2.tgz#e4ce92ad66c3888423d332b40477c87d1dac1fb8"
- integrity sha512-p0wNtJ9oLuvgOQDEIZ9zQjZffK7KtyR6Si0jnXULIDwrlNF8Cuir3AZP0hHv0jmKuNN/edOnbMjnzd4uTcmWiw==
+ version "27.4.6"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7"
+ integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g==
dependencies:
- "@jest/types" "^27.4.2"
ansi-regex "^5.0.1"
ansi-styles "^5.0.0"
react-is "^17.0.1"
@@ -5994,9 +5975,9 @@ promise.series@^0.2.0:
integrity sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=
prop-types@^15.6.2, prop-types@^15.7.2:
- version "15.8.0"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.0.tgz#d237e624c45a9846e469f5f31117f970017ff588"
- integrity sha512-fDGekdaHh65eI3lMi5OnErU6a8Ighg2KjcjQxO7m8VHyWjcPyj5kiOgV1LQDOOOgVy3+5FgjXvdSSX7B8/5/4g==
+ version "15.8.1"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
+ integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
dependencies:
loose-envify "^1.4.0"
object-assign "^4.1.1"
@@ -6255,9 +6236,9 @@ react-universal-interface@^0.6.2:
integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==
react-use@^17.1.1:
- version "17.3.1"
- resolved "https://registry.yarnpkg.com/react-use/-/react-use-17.3.1.tgz#12b248555775519aa2b900b22f1928d029bf99d1"
- integrity sha512-hs7+tS4rRm1QLHPfanLCqXIi632tP4V7Sai1ENUP2WTufU6am++tU9uSw9YrNCFqbABiEv0ndKU1XCUcfu2tXA==
+ version "17.3.2"
+ resolved "https://registry.yarnpkg.com/react-use/-/react-use-17.3.2.tgz#448abf515f47c41c32455024db28167cb6e53be8"
+ integrity sha512-bj7OD0/1wL03KyWmzFXAFe425zziuTf7q8olwCYBfOeFHY1qfO1FAMjROQLsLZYwG4Rx63xAfb7XAbBrJsZmEw==
dependencies:
"@types/js-cookie" "^2.2.6"
"@xobotyi/scrollbar-width" "^1.9.5"
@@ -6390,12 +6371,13 @@ resolve-from@^5.0.0:
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0:
- version "1.20.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
- integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f"
+ integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==
dependencies:
- is-core-module "^2.2.0"
- path-parse "^1.0.6"
+ is-core-module "^2.8.0"
+ path-parse "^1.0.7"
+ supports-preserve-symlinks-flag "^1.0.0"
resolve@^2.0.0-next.3:
version "2.0.0-next.3"
@@ -6495,10 +6477,10 @@ rollup-pluginutils@^2.8.2:
dependencies:
estree-walker "^0.6.1"
-rollup@^2.62.0:
- version "2.62.0"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.62.0.tgz#9e640b419fc5b9e0241844f6d55258bd79986ecc"
- integrity sha512-cJEQq2gwB0GWMD3rYImefQTSjrPYaC6s4J9pYqnstVLJ1CHa/aZNVkD4Epuvg4iLeMA4KRiq7UM7awKK6j7jcw==
+rollup@^2.63.0:
+ version "2.63.0"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.63.0.tgz#fe2f7fec2133f3fab9e022b9ac245628d817c6bb"
+ integrity sha512-nps0idjmD+NXl6OREfyYXMn/dar3WGcyKn+KBzPdaLecub3x/LrId0wUcthcr8oZUAcZAR8NKcfGGFlNgGL1kQ==
optionalDependencies:
fsevents "~2.3.2"
@@ -6516,7 +6498,7 @@ run-parallel@^1.1.9:
dependencies:
queue-microtask "^1.2.2"
-rxjs@^7.4.0:
+rxjs@^7.5.1:
version "7.5.1"
resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.1.tgz#af73df343cbcab37628197f43ea0c8256f54b157"
integrity sha512-KExVEeZWxMZnZhUZtsJcFwz8IvPvgu4G2Z2QyqjZQzUGr32KDYuSxrEYO4w3tFFNbfLozcrKUTvTPi+E9ywJkQ==
@@ -6714,7 +6696,7 @@ slate-react@^0.72.1:
scroll-into-view-if-needed "^2.2.20"
tiny-invariant "1.0.6"
-slate@^0.72.0:
+slate@^0.72.3:
version "0.72.3"
resolved "https://registry.yarnpkg.com/slate/-/slate-0.72.3.tgz#c74eb85133b975b2d44d219462c127cdb992e76b"
integrity sha512-ALsYQHKTN4rC+iHnOJzV+aC4AHdhoPkBWrfEK3W/LbXOzPrR+wL80a66OZiYg9Xb0QeGzlLSGdOOFQd2ix9Wmg==
@@ -7095,6 +7077,11 @@ supports-color@^8.0.0, supports-color@^8.1.1:
dependencies:
has-flag "^4.0.0"
+supports-preserve-symlinks-flag@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+ integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
svg-round-corners@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/svg-round-corners/-/svg-round-corners-0.3.0.tgz#f5eea0526fdb7d2d8d763382e1953d4e09f27165"
@@ -7121,9 +7108,9 @@ swr@^1.1.2:
integrity sha512-UsM0eo5T+kRPyWFZtWRx2XR5qzohs/LS4lDC0GCyLpCYFmsfTk28UCVDbOE9+KtoXY4FnwHYiF+ZYEU3hnJ1lQ==
table@^6.0.9:
- version "6.7.5"
- resolved "https://registry.yarnpkg.com/table/-/table-6.7.5.tgz#f04478c351ef3d8c7904f0e8be90a1b62417d238"
- integrity sha512-LFNeryOqiQHqCVKzhkymKwt6ozeRhlm8IL1mE8rNUurkir4heF6PzMyRgaTa4tlyPTGGgXuvVOF/OLWiH09Lqw==
+ version "6.8.0"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca"
+ integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==
dependencies:
ajv "^8.0.1"
lodash.truncate "^4.4.2"
@@ -7131,10 +7118,10 @@ table@^6.0.9:
string-width "^4.2.3"
strip-ansi "^6.0.1"
-tailwindcss@^3.0.8:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.0.8.tgz#6c751c3d2ee8e1fa18b108303b73f44a5e868992"
- integrity sha512-Yww1eRYO1AxITJmW/KduZPxNvYdHuedeKwPju9Oakp7MdiixRi5xkpLhirsc81QCxHL0eoce6qKmxXwYGt4Cjw==
+tailwindcss@^3.0.11:
+ version "3.0.11"
+ resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.0.11.tgz#c4e96cada1f693cba66269eef80c74d22331c767"
+ integrity sha512-JyMsQ2kPqpOvG8ow535XpauXj3wz3nQqcy2tVlXj4FQ0eNlsdzvlAqpRA3q5rPLboWirNG6r2DqKczwjW2uc8Q==
dependencies:
arg "^5.0.1"
chalk "^4.1.2"
@@ -7149,14 +7136,13 @@ tailwindcss@^3.0.8:
is-glob "^4.0.3"
normalize-path "^3.0.0"
object-hash "^2.2.0"
- postcss-js "^3.0.3"
+ postcss-js "^4.0.0"
postcss-load-config "^3.1.0"
postcss-nested "5.0.6"
postcss-selector-parser "^6.0.7"
postcss-value-parser "^4.2.0"
quick-lru "^5.1.1"
resolve "^1.20.0"
- tmp "^0.2.1"
tapable@^2.2.0:
version "2.2.1"
@@ -7231,7 +7217,7 @@ tippy.js@^6.3.1:
dependencies:
"@popperjs/core" "^2.9.0"
-tmp@^0.2.1, tmp@~0.2.1:
+tmp@~0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
@@ -7298,7 +7284,7 @@ ts-node@^10.4.0:
make-error "^1.1.1"
yn "3.1.1"
-tsconfig-paths@^3.11.0, tsconfig-paths@^3.9.0:
+tsconfig-paths@^3.12.0, tsconfig-paths@^3.9.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b"
integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==
@@ -7517,6 +7503,11 @@ use-deep-compare@1.1.0:
dependencies:
dequal "1.0.0"
+use-immer@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/use-immer/-/use-immer-0.6.0.tgz#ca6aa5ade93018e2c65cf128d19ada54fc23f70d"
+ integrity sha512-dFGRfvWCqPDTOt/S431ETYTg6+uxbpb7A1pptufwXVzGJY3RlXr38+3wyLNpc6SbbmAKjWl6+EP6uW74fkEsXQ==
+
use-sidecar@^1.0.1, use-sidecar@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.5.tgz#ffff2a17c1df42e348624b699ba6e5c220527f2b"