From 96baa2a6e0e9a934ed72c65bdc792d9fd932fe34 Mon Sep 17 00:00:00 2001 From: Carlos Mesquita Date: Sat, 3 Aug 2024 11:10:01 +0100 Subject: [PATCH] Dropdown on training view --- package-lock.json | 118 +++++++++++++ package.json | 5 +- src/components/Dropdown.tsx | 84 +++++++++ src/pages/training/[id]/index.tsx | 281 ++++++++++++++++-------------- src/pages/training/index.tsx | 4 +- src/styles/globals.css | 10 ++ yarn.lock | 52 +++++- 7 files changed, 415 insertions(+), 139 deletions(-) create mode 100644 src/components/Dropdown.tsx diff --git a/package-lock.json b/package-lock.json index 8bde9dc8..8bbc1cb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -64,12 +64,14 @@ "react-phone-number-input": "^3.3.6", "react-player": "^2.12.0", "react-select": "^5.7.5", + "react-slick": "^0.30.2", "react-string-replace": "^1.1.0", "react-toastify": "^9.1.2", "react-tooltip": "^5.27.1", "react-xarrows": "^2.0.2", "read-excel-file": "^5.7.1", "short-unique-id": "5.0.2", + "slick-carousel": "^1.8.1", "stripe": "^13.10.0", "swr": "^2.1.3", "tailwind-scrollbar-hide": "^1.1.7", @@ -89,6 +91,7 @@ "@types/qrcode": "^1.5.5", "@types/react-csv": "^1.1.10", "@types/react-datepicker": "^4.15.1", + "@types/react-slick": "^0.23.13", "@types/uuid": "^9.0.1", "@types/wavesurfer.js": "^6.0.6", "@wixc3/react-board": "^2.2.0", @@ -2639,6 +2642,15 @@ "@types/react": "*" } }, + "node_modules/@types/react-slick": { + "version": "0.23.13", + "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.13.tgz", + "integrity": "sha512-bNZfDhe/L8t5OQzIyhrRhBr/61pfBcWaYJoq6UDqFtv5LMwfg4NsVDD2J8N01JqdAdxLjOt66OZEp6PX+dGs/A==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -4094,6 +4106,11 @@ "node": ">=10.13.0" } }, + "node_modules/enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" + }, "node_modules/ent": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", @@ -6612,6 +6629,14 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dependencies": { + "string-convert": "^0.2.0" + } + }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -6834,6 +6859,11 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -8462,6 +8492,22 @@ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==" }, + "node_modules/react-slick": { + "version": "0.30.2", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.30.2.tgz", + "integrity": "sha512-XvQJi7mRHuiU3b9irsqS9SGIgftIfdV5/tNcURTb5LdIokRA5kIIx3l4rlq2XYHfxcSntXapoRg/GxaVOM1yfg==", + "dependencies": { + "classnames": "^2.2.5", + "enquire.js": "^2.1.6", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-string-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-string-replace/-/react-string-replace-1.1.0.tgz", @@ -8631,6 +8677,11 @@ "lodash": "^4.17.21" } }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -8878,6 +8929,14 @@ "node": ">=8" } }, + "node_modules/slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", + "peerDependencies": { + "jquery": ">=1.8.0" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -8928,6 +8987,11 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -11999,6 +12063,15 @@ "@types/react": "*" } }, + "@types/react-slick": { + "version": "0.23.13", + "resolved": "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.13.tgz", + "integrity": "sha512-bNZfDhe/L8t5OQzIyhrRhBr/61pfBcWaYJoq6UDqFtv5LMwfg4NsVDD2J8N01JqdAdxLjOt66OZEp6PX+dGs/A==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, "@types/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -13082,6 +13155,11 @@ "tapable": "^2.2.0" } }, + "enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" + }, "ent": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", @@ -14910,6 +14988,14 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, + "json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "requires": { + "string-convert": "^0.2.0" + } + }, "json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", @@ -15101,6 +15187,11 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -16260,6 +16351,18 @@ } } }, + "react-slick": { + "version": "0.30.2", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.30.2.tgz", + "integrity": "sha512-XvQJi7mRHuiU3b9irsqS9SGIgftIfdV5/tNcURTb5LdIokRA5kIIx3l4rlq2XYHfxcSntXapoRg/GxaVOM1yfg==", + "requires": { + "classnames": "^2.2.5", + "enquire.js": "^2.1.6", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + } + }, "react-string-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-string-replace/-/react-string-replace-1.1.0.tgz", @@ -16383,6 +16486,11 @@ "lodash": "^4.17.21" } }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -16548,6 +16656,11 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" }, + "slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -16589,6 +16702,11 @@ "safe-buffer": "~5.2.0" } }, + "string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", diff --git a/package.json b/package.json index bd7550b4..e47b874a 100644 --- a/package.json +++ b/package.json @@ -67,12 +67,14 @@ "react-phone-number-input": "^3.3.6", "react-player": "^2.12.0", "react-select": "^5.7.5", + "react-slick": "^0.30.2", "react-string-replace": "^1.1.0", "react-toastify": "^9.1.2", "react-tooltip": "^5.27.1", "react-xarrows": "^2.0.2", "read-excel-file": "^5.7.1", "short-unique-id": "5.0.2", + "slick-carousel": "^1.8.1", "stripe": "^13.10.0", "swr": "^2.1.3", "tailwind-scrollbar-hide": "^1.1.7", @@ -92,6 +94,7 @@ "@types/qrcode": "^1.5.5", "@types/react-csv": "^1.1.10", "@types/react-datepicker": "^4.15.1", + "@types/react-slick": "^0.23.13", "@types/uuid": "^9.0.1", "@types/wavesurfer.js": "^6.0.6", "@wixc3/react-board": "^2.2.0", @@ -100,4 +103,4 @@ "postcss": "^8.4.21", "tailwindcss": "^3.2.4" } -} \ No newline at end of file +} diff --git a/src/components/Dropdown.tsx b/src/components/Dropdown.tsx new file mode 100644 index 00000000..596706ce --- /dev/null +++ b/src/components/Dropdown.tsx @@ -0,0 +1,84 @@ +import React, { useState, ReactNode, useRef, useEffect } from 'react'; +import { animated, useSpring } from '@react-spring/web'; + +interface DropdownProps { + title: string; + open?: boolean; + className?: string; + contentWrapperClassName?: string; + bottomPadding?: number; + children: ReactNode; +} + +const Dropdown: React.FC = ({ + title, + open = false, + className = "w-full text-left font-semibold flex justify-between items-center p-4", + contentWrapperClassName = "px-6", + bottomPadding = 12, + children +}) => { + const [isOpen, setIsOpen] = useState(open); + const contentRef = useRef(null); + const [contentHeight, setContentHeight] = useState(0); + + useEffect(() => { + let resizeObserver: ResizeObserver | null = null; + + if (contentRef.current) { + resizeObserver = new ResizeObserver(entries => { + for (let entry of entries) { + if (entry.borderBoxSize && entry.borderBoxSize.length > 0) { + const height = entry.borderBoxSize[0].blockSize; + setContentHeight(height + bottomPadding); + } else { + // Fallback for browsers that don't support borderBoxSize + const height = entry.contentRect.height; + setContentHeight(height + bottomPadding); + } + } + }); + + resizeObserver.observe(contentRef.current); + } + + return () => { + if (resizeObserver) { + resizeObserver.disconnect(); + } + }; + }, [bottomPadding]); + + const springProps = useSpring({ + height: isOpen ? contentHeight : 0, + opacity: isOpen ? 1 : 0, + config: { tension: 300, friction: 30 } + }); + + return ( + <> + + +
+ {children} +
+
+ + ); +}; + +export default Dropdown; \ No newline at end of file diff --git a/src/pages/training/[id]/index.tsx b/src/pages/training/[id]/index.tsx index 3a9a5a88..6ebb69f6 100644 --- a/src/pages/training/[id]/index.tsx +++ b/src/pages/training/[id]/index.tsx @@ -23,6 +23,7 @@ import useExamStore from "@/stores/examStore"; import { usePDFDownload } from "@/hooks/usePDFDownload"; import useAssignments from '@/hooks/useAssignments'; import useUsers from '@/hooks/useUsers'; +import Dropdown from "@/components/Dropdown"; export const getServerSideProps = withIronSessionSsr(({ req, res }) => { const user = req.session.user; @@ -136,155 +137,165 @@ const TrainingContent: React.FC<{ user: User }> = ({ user }) => { ) : (trainingContent && ( - <> -
- {trainingContent.exams.map((exam, examIndex) => ( - - ))} -
-
-
-
-
- -

General Evaluation

-
- +
+
+ {/**/} + {trainingContent.exams.map((exam, examIndex) => ( + -
-
- - - - - - - - -

Performance Breakdown by Exam:

-
-
    - {trainingContent.exams.flatMap((exam, index) => ( -
  • -
    - Exam {index + 1} - {exam.score}% -
    -
    - -

    {exam.performance_comment}

    -
    -
  • - ))} -
-
-
-
- -

Subjects that Need Improvement

-
- -
-
-
- - - - - - - - -
-

Detailed Breakdown

+ ))} + {/* */} +
+
+
+
+
+ +

General Evaluation

+
+ +
+
+ + + + + + + + +

Performance Breakdown by Exam:

    {trainingContent.exams.flatMap((exam, index) => ( -
  • -

    {`Exam ${index + 1}:`}{exam.detailed_summary}

    +
  • +
    + Exam {index + 1} + {exam.score}% +
    +
    + +

    {exam.performance_comment}

    +
  • ))}
-
-
- -

Identified Weak Areas

-
- -
- -
- {trainingContent.weak_areas.map((x, index) => ( - - clsx( - 'text-[#53B2F9] pb-2 border-b-2', - 'focus:outline-none', - selected ? 'border-[#1B78BE]' : 'border-[#1B78BE0F]' - ) - } - > - {x.area} - - ))} -
-
- - {trainingContent.weak_areas.map((x, index) => ( - -

{x.comment}

-
- ))} -
+
+
+ +

Subjects that Need Improvement

- + +
+
+
+
+ + + + + + + + +
+

Detailed Breakdown

+
+
    + {trainingContent.exams.map((exam, index) => ( +
  • + + {exam.detailed_summary} + +
  • + ))} +
+
+
+
+
+ +

Identified Weak Areas

+
+ +
+ +
+ {trainingContent.weak_areas.map((x, index) => ( + + clsx( + 'text-[#53B2F9] pb-2 border-b-2', + 'focus:outline-none', + selected ? 'border-[#1B78BE]' : 'border-[#1B78BE0F]' + ) + } + > + {x.area} + + ))} +
+
+ + {trainingContent.weak_areas.map((x, index) => ( + +

{x.comment}

+
+ ))} +
+
+
+
-
-
- -
-
- - +
+
+
+ +
+
+ + +
- +
))} diff --git a/src/pages/training/index.tsx b/src/pages/training/index.tsx index fb64dbc1..da46b717 100644 --- a/src/pages/training/index.tsx +++ b/src/pages/training/index.tsx @@ -302,7 +302,7 @@ const Training: React.FC<{ user: User }> = ({ user }) => { label: `${x.name} - ${x.email}`, }))} value={selectedUserSelectValue} - onChange={(value) => setStatsUserId(value?.value)} + onChange={(value) => setStatsUserId(value?.value!)} styles={{ menuPortal: (base) => ({ ...base, zIndex: 9999 }), option: (styles, state) => ({ @@ -326,7 +326,7 @@ const Training: React.FC<{ user: User }> = ({ user }) => { label: `${x.name} - ${x.email}`, }))} value={selectedUserSelectValue} - onChange={(value) => setStatsUserId(value?.value)} + onChange={(value) => setStatsUserId(value?.value!)} styles={{ menuPortal: (base) => ({ ...base, zIndex: 9999 }), option: (styles, state) => ({ diff --git a/src/styles/globals.css b/src/styles/globals.css index 427186bb..6dd36769 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -2,6 +2,16 @@ @tailwind components; @tailwind utilities; +@layer utilities { + .scrollbar-hide { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + } + .scrollbar-hide::-webkit-scrollbar { + display: none; /* Chrome, Safari and Opera */ + } +} + :root { --max-width: 1100px; --border-radius: 12px; diff --git a/yarn.lock b/yarn.lock index a2c6ab17..56702db4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1591,6 +1591,13 @@ dependencies: "@types/react" "*" +"@types/react-slick@^0.23.13": + version "0.23.13" + resolved "https://registry.npmjs.org/@types/react-slick/-/react-slick-0.23.13.tgz" + integrity sha512-bNZfDhe/L8t5OQzIyhrRhBr/61pfBcWaYJoq6UDqFtv5LMwfg4NsVDD2J8N01JqdAdxLjOt66OZEp6PX+dGs/A== + dependencies: + "@types/react" "*" + "@types/react-transition-group@^4.4.0", "@types/react-transition-group@^4.4.1": version "4.4.5" resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz" @@ -2158,7 +2165,7 @@ chownr@^2.0.0: resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== -classnames@^2.2.6, classnames@^2.3.0, classnames@^2.5.1: +classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.0, classnames@^2.5.1: version "2.5.1" resolved "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz" integrity sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow== @@ -2659,6 +2666,11 @@ enhanced-resolve@^5.10.0: graceful-fs "^4.2.4" tapable "^2.2.0" +enquire.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz" + integrity sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw== + ent@^2.2.0: version "2.2.1" resolved "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz" @@ -4123,6 +4135,13 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json2mq@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz" + integrity sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA== + dependencies: + string-convert "^0.2.0" + json5@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz" @@ -4300,6 +4319,11 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" @@ -5331,6 +5355,17 @@ react-select@^5.7.5: react-transition-group "^4.3.0" use-isomorphic-layout-effect "^1.1.2" +react-slick@^0.30.2: + version "0.30.2" + resolved "https://registry.npmjs.org/react-slick/-/react-slick-0.30.2.tgz" + integrity sha512-XvQJi7mRHuiU3b9irsqS9SGIgftIfdV5/tNcURTb5LdIokRA5kIIx3l4rlq2XYHfxcSntXapoRg/GxaVOM1yfg== + dependencies: + classnames "^2.2.5" + enquire.js "^2.1.6" + json2mq "^0.2.0" + lodash.debounce "^4.0.8" + resize-observer-polyfill "^1.5.0" + react-string-replace@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/react-string-replace/-/react-string-replace-1.1.0.tgz" @@ -5471,6 +5506,11 @@ requizzle@^0.2.3: dependencies: lodash "^4.17.21" +resize-observer-polyfill@^1.5.0: + version "1.5.1" + resolved "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" @@ -5680,6 +5720,11 @@ slash@^4.0.0: resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== +slick-carousel@^1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz" + integrity sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA== + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" @@ -5728,6 +5773,11 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +string-convert@^0.2.0: + version "0.2.1" + resolved "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz" + integrity sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A== + "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"