+
+
+
+ v.name.toLowerCase().includes(search.toLowerCase()))} isGrid={isGrid} />
+
+}
\ No newline at end of file
diff --git a/src/module/division/component/MorePeopleIcon.tsx b/src/module/division/component/MorePeopleIcon.tsx
new file mode 100644
index 0000000..f776f16
--- /dev/null
+++ b/src/module/division/component/MorePeopleIcon.tsx
@@ -0,0 +1,16 @@
+'use client'
+
+import { WARNA } from "@/module/_global"
+import { Avatar } from "@mantine/core"
+import { MdAccountCircle, MdPeople } from "react-icons/md"
+
+export function MorePeopleIcon() {
+ return
+
+
+
+
+ +5
+
+
+}
\ No newline at end of file
diff --git a/src/module/division/component/SearchDivision.tsx b/src/module/division/component/SearchDivision.tsx
new file mode 100644
index 0000000..22c7391
--- /dev/null
+++ b/src/module/division/component/SearchDivision.tsx
@@ -0,0 +1,8 @@
+'use client'
+
+import { TextInput } from "@mantine/core"
+import { MdSearch } from "react-icons/md"
+
+export function SearchDivision({ text, setText }: { text: string, setText: any }) {
+ return setText(e.target.value)} value={text} radius={30} leftSection={} placeholder="Cari Divisi" />
+}
\ No newline at end of file
diff --git a/src/module/division/component/ToogleList.tsx b/src/module/division/component/ToogleList.tsx
new file mode 100644
index 0000000..652b23a
--- /dev/null
+++ b/src/module/division/component/ToogleList.tsx
@@ -0,0 +1,17 @@
+'use client'
+
+import { ActionIcon, Box } from "@mantine/core"
+import { useState } from "react"
+import { MdGrid3X3, MdGridView, MdList, MdViewList } from "react-icons/md"
+
+export function ToogleList({ isGrid, setIsGrid }: { isGrid: boolean, setIsGrid: any }) {
+ function onToogleList() {
+ setIsGrid(!isGrid)
+ }
+
+ return
+
+ {isGrid ? : }
+
+
+}
\ No newline at end of file
diff --git a/src/module/division/component/ViewGrid.tsx b/src/module/division/component/ViewGrid.tsx
new file mode 100644
index 0000000..bcee477
--- /dev/null
+++ b/src/module/division/component/ViewGrid.tsx
@@ -0,0 +1,36 @@
+import { WARNA } from "@/module/_global";
+import { Stack, Box, Title, Group, Text, UnstyledButton } from "@mantine/core";
+import { MorePeopleIcon } from "./MorePeopleIcon";
+import { pagePathTestDivision } from "@/lib/pagePath";
+import _ from "lodash";
+
+export function ViewGrid({ v }: { v: any }) {
+ return (
+ {
+ window.location.href = pagePathTestDivision({ searchParams: { page: _.kebabCase(v.name) } })
+ }}>
+
+
+ {v.name}
+
+
+
+ {v.desc}
+
+
+
+
+
+
+
+ );
+}
\ No newline at end of file
diff --git a/src/module/division/component/ViewList.tsx b/src/module/division/component/ViewList.tsx
new file mode 100644
index 0000000..b0f0e71
--- /dev/null
+++ b/src/module/division/component/ViewList.tsx
@@ -0,0 +1,23 @@
+import { pagePathTestDivision } from "@/lib/pagePath";
+import { Avatar, Flex, Stack, Text, Title, UnstyledButton } from "@mantine/core";
+import _ from "lodash";
+import { MdPeople } from "react-icons/md";
+
+export function ViewList({ v }: { v: any }) {
+ return (
+ {
+ window.location.href = pagePathTestDivision({ searchParams: { page: _.kebabCase(v.name) } })
+ }}>
+
+
+
+
+
+ {v.name}
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/src/module/division/lib/BottomMenu.tsx b/src/module/division/lib/BottomMenu.tsx
new file mode 100644
index 0000000..699085f
--- /dev/null
+++ b/src/module/division/lib/BottomMenu.tsx
@@ -0,0 +1,33 @@
+import { ActionIcon, Drawer, Flex, Stack, Text } from "@mantine/core";
+import { MdClose } from "react-icons/md";
+
+export function BottomMenu({size, title, openDrawer, setOpenDrawer, children }: { size?: number | string, title?: string, openDrawer: boolean, setOpenDrawer: any, children: React.ReactNode }) {
+ return setOpenDrawer(false)}
+ position="bottom"
+ withCloseButton={false}
+ size={size || "md"}
+ styles={{
+ content: {
+ margin: "0 auto",
+ maxWidth: 550,
+ borderTopRightRadius: 20,
+ borderTopLeftRadius: 20
+ }
+ }}
+ >
+
+
+
+ {title || 'Menu'}
+
+ setOpenDrawer(false)} variant="subtle">
+
+
+
+ {children}
+
+
+}
\ No newline at end of file
diff --git a/src/module/division/lib/ButtonConfirm.tsx b/src/module/division/lib/ButtonConfirm.tsx
new file mode 100644
index 0000000..30dab1f
--- /dev/null
+++ b/src/module/division/lib/ButtonConfirm.tsx
@@ -0,0 +1,25 @@
+import { WARNA } from "@/module/_global";
+import { Button, Flex, Stack, Text, UnstyledButton } from "@mantine/core";
+import { BottomMenu } from "./BottomMenu";
+import { useState } from "react";
+
+export function ButtonConfirm({ label, desc, onConfirm }: { label: string, desc: string, onConfirm: () => void }) {
+ const [open, setOpen] = useState(false)
+
+ const onClickConfirm = () => {
+ setOpen(false)
+ onConfirm()
+ }
+ return
+
+
+
+ {desc}
+
+ setOpen(false)}>Cancel
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/module/division/lib/ButtonNavi.tsx b/src/module/division/lib/ButtonNavi.tsx
new file mode 100644
index 0000000..1857121
--- /dev/null
+++ b/src/module/division/lib/ButtonNavi.tsx
@@ -0,0 +1,6 @@
+import { WARNA } from "@/module/_global";
+import { Button } from "@mantine/core";
+
+export function ButtonNavi({ children, onClick }: { children: React.ReactNode, onClick?: () => void }) {
+ return
+}
\ No newline at end of file
diff --git a/src/module/division/lib/MultiSelectList.tsx b/src/module/division/lib/MultiSelectList.tsx
new file mode 100644
index 0000000..d06ddd1
--- /dev/null
+++ b/src/module/division/lib/MultiSelectList.tsx
@@ -0,0 +1,53 @@
+'use client'
+import { ActionIcon, Anchor, Button, Card, Divider, Flex, Group, NavLink, Paper, ScrollArea, Select, Stack, Text, UnstyledButton } from "@mantine/core";
+import { useState } from "react";
+import { MdArrowForwardIos, MdCheckBox, MdCheckBoxOutlineBlank } from "react-icons/md";
+import { BottomMenu } from "./BottomMenu";
+import { ButtonNavi } from "./ButtonNavi";
+import _ from "lodash";
+import { WARNA } from "@/module/_global";
+
+export function MultiSelectList(
+ { label, placeholder, data = [], listSelected = [], setListSelected }:
+ { label?: string, placeholder?: string, data?: any[], listSelected: any[], setListSelected: any }
+) {
+ const [open, setOpen] = useState(false)
+ // const [listSelected, setListSelected] = useState(defaultValue)
+
+ function selected(value: { label: string, value: any }) {
+ if (listSelected.includes(value.value)) {
+ setListSelected(listSelected.filter((v) => v !== value.value))
+ } else {
+ setListSelected([...listSelected, value.value])
+ }
+ }
+
+ const onClickSimpan = () => {
+ setOpen(false)
+ }
+ return
+ setOpen(true)}>
+
+
+ {_.isEmpty(listSelected) ? "Pilih Anggota" : "Tambah Anggota"}
+
+
+
+
+
+
+
+ {data.map((v, k) =>
+ selected(v)}
+ leftSection={listSelected.includes(v.value) ? : }
+ label={v.label} />
+ )}
+
+
+ Simpan
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/module/division/lib/SingleSelect.tsx b/src/module/division/lib/SingleSelect.tsx
new file mode 100644
index 0000000..9646b01
--- /dev/null
+++ b/src/module/division/lib/SingleSelect.tsx
@@ -0,0 +1,46 @@
+'use client'
+import { Flex, Group, NavLink, Paper, ScrollArea, Select, Stack, Text, UnstyledButton } from "@mantine/core";
+import { useState } from "react";
+import { BottomMenu } from "./BottomMenu";
+import { MdArrowForwardIos, MdCheckBox, MdCheckBoxOutlineBlank } from "react-icons/md";
+import _ from "lodash";
+
+export function SingleSelect({ desc, icon, placeholder, selected, setSelected, data }: { desc?: string, icon?: any, placeholder: string, selected: any, setSelected: any, data: any[] }) {
+ const [open, setOpen] = useState(false)
+ const completed = desc && !_.isEmpty(data) && !_.isEmpty(selected)
+
+ const onSelected = (value: any) => {
+ setSelected(value)
+ setOpen(false)
+ }
+ return
+ setOpen(true)} disabled={_.isEmpty(data)}>
+
+
+
+
+ {icon && icon}
+ {!_.isEmpty(data) ? data?.filter((v) => v.value === selected)[0]?.label || placeholder : placeholder}
+
+
+
+ {completed && {desc}}
+
+
+
+
+
+
+ {data?.map((v, k) => onSelected(v.value)}
+ leftSection={selected === v.value ?
+ :
+ }
+ key={k}
+ label={v.label} />)}
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/module/division/lib/WebVitals.tsx b/src/module/division/lib/WebVitals.tsx
new file mode 100644
index 0000000..a85e3e1
--- /dev/null
+++ b/src/module/division/lib/WebVitals.tsx
@@ -0,0 +1,12 @@
+'use client'
+
+import { useReportWebVitals } from 'next/web-vitals';
+
+export function WebVitals({ searchParams }: { searchParams: any }) {
+ const log = searchParams.log;
+ useReportWebVitals((metric) => {
+ log && console.log(JSON.stringify(metric, null, 4));
+ });
+
+ return null;
+}
diff --git a/src/module/division/lib/devision_state.ts b/src/module/division/lib/devision_state.ts
new file mode 100644
index 0000000..b69eb0a
--- /dev/null
+++ b/src/module/division/lib/devision_state.ts
@@ -0,0 +1,14 @@
+import { State, hookstate, useHookstate } from "@hookstate/core";
+
+const useState = (s: State) => {
+ const state = useHookstate(s);
+ const get = state.value;
+ const set = (v: typeof state.value) => state.set(v);
+ return [get, set] as const;
+};
+
+const title = hookstate("Divisi")
+export const useTitle = () => useState(title);
+
+const filter = hookstate("")
+export const useDivisionfilter = () => useState(filter)
\ No newline at end of file
diff --git a/src/module/division/lib/division/get_count_devision.ts b/src/module/division/lib/division/get_count_devision.ts
new file mode 100644
index 0000000..0344a21
--- /dev/null
+++ b/src/module/division/lib/division/get_count_devision.ts
@@ -0,0 +1,5 @@
+import { list_devision } from "@/dummy_data";
+
+export async function getCountDivision() {
+ return list_devision.length
+}
\ No newline at end of file
diff --git a/src/module/division/lib/division/get_list_anggota.ts b/src/module/division/lib/division/get_list_anggota.ts
new file mode 100644
index 0000000..51e495f
--- /dev/null
+++ b/src/module/division/lib/division/get_list_anggota.ts
@@ -0,0 +1,45 @@
+const listAnggota = [
+ {
+ id: "1",
+ name: "Anggota 1",
+ },
+ {
+ id: "2",
+ name: "Anggota 2",
+ },
+ {
+ id: "3",
+ name: "Anggota 3",
+ },
+ {
+ id: "4",
+ name: "Anggota 4",
+ },
+ {
+ id: "5",
+ name: "Anggota 5",
+ },
+ {
+ id: "6",
+ name: "Anggota 6",
+ },
+ {
+ id: "7",
+ name: "Anggota 7",
+ },
+ {
+ id: "8",
+ name: "Anggota 8",
+ },
+ {
+ id: "9",
+ name: "Anggota 9",
+ },
+ {
+ id: "10",
+ name: "Anggota 10",
+ },
+]
+export async function getListAnggota() {
+ return listAnggota
+}
diff --git a/src/module/division/lib/division/get_list_devision.ts b/src/module/division/lib/division/get_list_devision.ts
new file mode 100644
index 0000000..f712541
--- /dev/null
+++ b/src/module/division/lib/division/get_list_devision.ts
@@ -0,0 +1,5 @@
+import { list_devision } from "@/dummy_data";
+
+export async function getListDevision() {
+ return list_devision
+}
\ No newline at end of file
diff --git a/src/module/division/lib/division/get_list_group.ts b/src/module/division/lib/division/get_list_group.ts
new file mode 100644
index 0000000..5503d66
--- /dev/null
+++ b/src/module/division/lib/division/get_list_group.ts
@@ -0,0 +1,18 @@
+const listGroup = [
+ {
+ id: "1",
+ name: "Group 1",
+
+ },
+ {
+ id: "2",
+ name: "Group 2",
+ },
+ {
+ id: "3",
+ name: "Group 3",
+ }
+]
+export async function getListGroup() {
+ return listGroup
+}
\ No newline at end of file
diff --git a/src/module/division/lib/toast.tsx b/src/module/division/lib/toast.tsx
new file mode 100644
index 0000000..ac7f601
--- /dev/null
+++ b/src/module/division/lib/toast.tsx
@@ -0,0 +1,20 @@
+import { WARNA } from '@/module/_global'
+import t from 'react-simple-toasts'
+
+type Event = "error" | "success" | "info" | "warning"
+export const toast = (message: string, event?: Event) => {
+ t(message, {
+ position: "center",
+ render: (message) =>
+
{message?.toString()}
+
,
+ })
+}
\ No newline at end of file
diff --git a/src/module/division/ui/DevisionPage.tsx b/src/module/division/ui/DevisionPage.tsx
deleted file mode 100644
index 7f42906..0000000
--- a/src/module/division/ui/DevisionPage.tsx
+++ /dev/null
@@ -1,7 +0,0 @@
-import { Stack } from "@mantine/core";
-
-export function DevisionPage() {
- return
-
- ;
-}
\ No newline at end of file
diff --git a/src/module/division/ui/DivisionCreate.tsx b/src/module/division/ui/DivisionCreate.tsx
new file mode 100644
index 0000000..32c2dac
--- /dev/null
+++ b/src/module/division/ui/DivisionCreate.tsx
@@ -0,0 +1,81 @@
+'use client'
+
+import { ActionIcon, Avatar, Button, Card, Flex, ScrollArea, Select, Stack, Text, TextInput, Textarea } from "@mantine/core"
+import { MultiSelectList } from "../lib/MultiSelectList"
+import { WARNA } from "@/module/_global"
+import { useTestDevisionListAnggota, useTestDevisionListGroup } from "@/lib/stateApi"
+import { useState } from "react"
+import _ from "lodash"
+import { MdAccountCircle, MdClose, MdGroup, MdGroupAdd, MdGroupWork, MdShield } from "react-icons/md"
+import { ButtonNavi } from "../lib/ButtonNavi"
+import { pagePathTestDivision } from "@/lib/pagePath"
+import { SingleSelect } from "../lib/SingleSelect"
+import { ButtonConfirm } from "../lib/ButtonConfirm"
+import { toast } from "../lib/toast"
+
+
+export function DivisionCreate() {
+ const [val, setVal, load] = useTestDevisionListGroup()
+ const [listAnggota, setListAnggota] = useTestDevisionListAnggota()
+ const [listSelectedAnggota, setListSelectedAnggota] = useState([])
+ const [selectedAdmin, setSelectedAdmin] = useState("")
+ const [selectedGroup, setSelectedGroup] = useState("")
+
+ return
+ }
+ selected={selectedGroup}
+ setSelected={setSelectedGroup}
+ data={val && val.map((v) => ({ label: v.name, value: v.id }))}
+ placeholder="Pilih Grup" />
+
+
+ ({ label: v.name, value: v.id }))} />
+
+ } selected={selectedAdmin} setSelected={setSelectedAdmin} data={listAnggota.filter((v) => listSelectedAnggota.includes(v.id)).map((v) => ({ label: v.name, value: v.id }))} placeholder="Select Admin" />
+ {
+ toast("Simpan Berhasil", "success")
+ }} label="Simpan" desc="Apakah anda yakin ingin menyimpan data?" />
+
+}
+
+function SelectedAnggotaContainer({ listSelectedAnggota, listAnggota, setListSelectedAnggota }: { listSelectedAnggota: any[], listAnggota?: any[], setListSelectedAnggota: any }) {
+ if (_.isEmpty(listSelectedAnggota)) return null
+ return
+
+
+ Anggota Terpilih
+ Total: {listSelectedAnggota.length}
+
+
+ {listAnggota?.filter((v) => listSelectedAnggota.includes(v.id)).map((v, k) =>
+
+
+ {v.name}
+
+ {
+ setListSelectedAnggota((prev: any) => prev.filter((val: any) => val !== v.id))
+ }} variant="subtle">
+
+
+
+ )}
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/module/division/ui/DivisionFilter.tsx b/src/module/division/ui/DivisionFilter.tsx
new file mode 100644
index 0000000..8cc256f
--- /dev/null
+++ b/src/module/division/ui/DivisionFilter.tsx
@@ -0,0 +1,22 @@
+import { Button, Divider, Flex, ScrollArea, Stack, Text } from "@mantine/core";
+import { useDivisionfilter } from "../lib/devision_state";
+import { useTestDevisionListDivision } from "@/lib/stateApi";
+import { WARNA } from "@/module/_global";
+
+export function DivisionFilter() {
+ const [filterText, setFilterText] = useDivisionfilter()
+ const [listDevision, setListDevision] = useTestDevisionListDivision()
+ return
+ {/* {listDevision.map((v, k) => )} */}
+
+
+}
+
+function ViewList({ v }: { v: any }) {
+ return
+
+ {v.name}
+
+
+
+}
\ No newline at end of file
diff --git a/src/module/division/ui/DevisionLayout.tsx b/src/module/division/ui/DivisionLayout.tsx
similarity index 62%
rename from src/module/division/ui/DevisionLayout.tsx
rename to src/module/division/ui/DivisionLayout.tsx
index 5ec8f7c..7037d6e 100644
--- a/src/module/division/ui/DevisionLayout.tsx
+++ b/src/module/division/ui/DivisionLayout.tsx
@@ -1,3 +1,5 @@
export function DevisionLayout({ children }: { children: React.ReactNode }) {
- return <>{children}>;
+ return
+ {children}
+
}
\ No newline at end of file
diff --git a/src/module/division/ui/DivisionPage.tsx b/src/module/division/ui/DivisionPage.tsx
new file mode 100644
index 0000000..906dda5
--- /dev/null
+++ b/src/module/division/ui/DivisionPage.tsx
@@ -0,0 +1,21 @@
+
+import { getCountDivision } from "@/module/division/lib/division/get_count_devision";
+import { getListDevision } from "@/module/division/lib/division/get_list_devision";
+import { ContainerDevision } from "../component/ContainerDivision";
+import { WebVitals } from "../lib/WebVitals";
+import { ProviderTestDevisionListAnggota, ProviderTestDevisionListDivision, ProviderTestDevisionListGroup } from "@/lib/stateApi";
+import { getListGroup } from "../lib/division/get_list_group";
+import { getListAnggota } from "../lib/division/get_list_anggota";
+export async function DivisionPage({ params, searchParams }: { params: any, searchParams: any }) {
+ const list_devision = await getListDevision();
+ const countDevision = await getCountDivision()
+ const listGroup = await getListGroup()
+ const listAnggota = await getListAnggota()
+ return
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/module/division/ui/DivisionReport.tsx b/src/module/division/ui/DivisionReport.tsx
new file mode 100644
index 0000000..9e3accc
--- /dev/null
+++ b/src/module/division/ui/DivisionReport.tsx
@@ -0,0 +1,5 @@
+export function DivisionReport() {
+ return
+ report
+
+}
\ No newline at end of file
diff --git a/src/module/division/ui/DivisionView.tsx b/src/module/division/ui/DivisionView.tsx
new file mode 100644
index 0000000..b0ed259
--- /dev/null
+++ b/src/module/division/ui/DivisionView.tsx
@@ -0,0 +1,10 @@
+'use client'
+import { Stack } from "@mantine/core";
+
+export function DivisionView({ id }: { id: string }) {
+ return (
+
+ division view
+
+ )
+}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index b407bb7..c6428bd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -89,6 +89,16 @@
resolved "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.4.tgz"
integrity sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==
+"@hookstate/core@^4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@hookstate/core/-/core-4.0.1.tgz#6744380e96ce13fe3488c926c1cbae93bbea0ff6"
+ integrity sha512-Uh2D8Z0z/pqOJ7t+SfC+2sj13JQcB4yFhtL+T1choCaBxTSlgOS/CKRBohgJ4cjTKoxOmTT8uSQysu3gUjX+Gw==
+
+"@hookstate/localstored@^4.0.2":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@hookstate/localstored/-/localstored-4.0.2.tgz#6f0ef6b71baa4c28e5e8835431585500eb6a9532"
+ integrity sha512-81dbUH6xnwbePby21NQN8zrmjvMA8tOYeOOLZXqRmRGKnhtcokjTJoRNMZugpC9P3/NnacllBZ5ZUt43nmrKkA==
+
"@humanwhocodes/config-array@^0.11.14":
version "0.11.14"
resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz"
@@ -638,6 +648,11 @@
resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
+"@types/lodash@^4.17.6":
+ version "4.17.6"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.6.tgz#193ced6a40c8006cfc1ca3f4553444fb38f0e543"
+ integrity sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==
+
"@types/node@^20.14.9":
version "20.14.9"
resolved "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz"
@@ -2370,7 +2385,7 @@ lodash.merge@^4.6.2:
lodash@^4.17.21:
version "4.17.21"
- resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0:
@@ -2845,6 +2860,11 @@ react-remove-scroll@^2.5.7:
use-callback-ref "^1.3.0"
use-sidecar "^1.1.2"
+react-simple-toasts@^5.10.0:
+ version "5.10.0"
+ resolved "https://registry.yarnpkg.com/react-simple-toasts/-/react-simple-toasts-5.10.0.tgz#cfa692cd06fe858ea327adf32e72db2199459fa7"
+ integrity sha512-GIsBaLkZnyqeTzs0fSmXoLr5GtSnHv9C35tEx/2mc8H7/OaTlwXRHjm0ssDP454gvI4rZFS+rnj2HOL5zuiiwA==
+
react-smooth@^4.0.0:
version "4.0.1"
resolved "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz"
@@ -3106,8 +3126,16 @@ streamsearch@^1.1.0:
resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz"
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
-"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0:
- name string-width-cjs
+"string-width-cjs@npm:string-width@^4.2.0":
+ version "4.2.3"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^4.1.0:
version "4.2.3"
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -3179,7 +3207,14 @@ string.prototype.trimstart@^1.0.8:
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
version "6.0.1"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==