diff --git a/package.json b/package.json index d9f457e..f71414a 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,8 @@ "preview": "vite preview" }, "dependencies": { + "@react-three/drei": "^9.105.6", + "@react-three/fiber": "^8.16.6", "@types/react-router-dom": "^5.3.3", "gsap": "^3.12.5", "react": "^18.2.0", @@ -22,6 +24,7 @@ "react-swipeable": "^7.0.1", "react-transition-group": "^4.4.5", "react-zoom-pan-pinch": "^3.4.4", + "three": "^0.164.1", "zustand": "^4.5.2" }, "devDependencies": { diff --git a/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-01.webp b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-01.webp new file mode 100644 index 0000000..35e7e7d Binary files /dev/null and b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-01.webp differ diff --git a/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-02.webp b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-02.webp new file mode 100644 index 0000000..660e266 Binary files /dev/null and b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-02.webp differ diff --git a/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-03.webp b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-03.webp new file mode 100644 index 0000000..4cae68f Binary files /dev/null and b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-03.webp differ diff --git a/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-04.webp b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-04.webp new file mode 100644 index 0000000..7d9f556 Binary files /dev/null and b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-04.webp differ diff --git a/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-05.webp b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-05.webp new file mode 100644 index 0000000..f7677fa Binary files /dev/null and b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-05.webp differ diff --git a/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-06.webp b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-06.webp new file mode 100644 index 0000000..01e3a00 Binary files /dev/null and b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-06.webp differ diff --git a/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-07.webp b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-07.webp new file mode 100644 index 0000000..23b0a7c Binary files /dev/null and b/public/images/virtual-tour/studio1/Studio1_w-12_13_sp-07.webp differ diff --git a/src/components/ButtomPanel.tsx b/src/components/ButtomPanel.tsx index ba6f20c..c7502a6 100644 --- a/src/components/ButtomPanel.tsx +++ b/src/components/ButtomPanel.tsx @@ -14,12 +14,12 @@ const ButtomPanel = () => {
diff --git a/src/components/ComplexButtomPanel.tsx b/src/components/ComplexButtomPanel.tsx index 2b88bc0..435eea1 100644 --- a/src/components/ComplexButtomPanel.tsx +++ b/src/components/ComplexButtomPanel.tsx @@ -18,12 +18,12 @@ const ComplexButtomPanel = () => {
diff --git a/src/components/MultiRangeSlider.tsx b/src/components/MultiRangeSlider.tsx index 999d25d..549ab3d 100644 --- a/src/components/MultiRangeSlider.tsx +++ b/src/components/MultiRangeSlider.tsx @@ -50,12 +50,20 @@ const MultiRangeSlider = ({ }; useEffect(() => { - if (!firstInputRef.current) return; + if ( + !firstInputRef.current || + multirangeSlider.startValue === multirangeSlider.minValue + ) + return; (firstInputRef.current as HTMLInputElement).focus(); }, [multirangeSlider.startValue]); useEffect(() => { - if (!secondInputRef.current) return; + if ( + !secondInputRef.current || + multirangeSlider.maxValue === multirangeSlider.endValue + ) + return; (secondInputRef.current as HTMLInputElement).focus(); }, [multirangeSlider.endValue]); diff --git a/src/components/Switch.tsx b/src/components/Switch.tsx index 3fbd63b..73441ba 100644 --- a/src/components/Switch.tsx +++ b/src/components/Switch.tsx @@ -2,7 +2,7 @@ import { ISwitcher } from "../types/switcher"; interface ISwitchProps { switcher: ISwitcher; - onClick: (id: string) => void; + onClick: ((id: string) => void) | (() => void); } const Switch = ({ switcher, onClick }: ISwitchProps) => { @@ -18,9 +18,8 @@ const Switch = ({ switcher, onClick }: ISwitchProps) => { onClick={handleOnClick} >
); diff --git a/src/components/complexWingPage/SequenceWing.tsx b/src/components/complexWingPage/SequenceWing.tsx index 9ba6b39..29a82a8 100644 --- a/src/components/complexWingPage/SequenceWing.tsx +++ b/src/components/complexWingPage/SequenceWing.tsx @@ -148,7 +148,7 @@ const SequenceWing = () => { }, [isSidebar]); return ( -
+
{ - const { - roveHome, - floorEnd, - floorStart, - wing, - units, - apartmentType, - square, - cost, - } = card; + const { roveHome, floorEnd, floorStart, wing, apartmentType, square, cost } = + card; + const { setModal } = useModal(); + + const handleOnSendEquiryClick = () => { + setModal(); + }; return (
@@ -55,10 +54,65 @@ const FavoriteAppartmentCard = ({ card }: FavoriteAppartmentCardProps) => { text="Send Enquiry" className="flex justify-center" buttonType="cta" + onClick={handleOnSendEquiryClick} />
); }; +const SendEnquiryModal = () => { + const { setModal } = useModal(); + + const handleOnModalClick = () => { + setModal(null); + }; + return ( +
+
+
+
+

+ Apartment purchase enquiry +

+
+
+
+

+ 1 bedroom, 609 Sqft{" "} +

+

+ AED 1,668,888 +

+
+
+

1 bedroom, 609 Sqft

+
+
+

+ East Wing +

+
+

+ Floor 11 +

+
+

+ № 213 +

+
+
+
+
+
+
+
+ ); +}; + export default FavoriteAppartmentCard; diff --git a/src/components/favoritesPage/FavoriteCardList.tsx b/src/components/favoritesPage/FavoriteCardList.tsx new file mode 100644 index 0000000..74839e9 --- /dev/null +++ b/src/components/favoritesPage/FavoriteCardList.tsx @@ -0,0 +1,18 @@ +import { ILayoutCard } from "../../types/layoutCard"; +import FavoriteAppartmentCard from "./FavoriteApartmentCard"; + +interface FavoriteCardListProps { + cards: ILayoutCard[]; +} + +const FavoriteCardList = ({ cards }: FavoriteCardListProps) => { + return ( +
+ {cards.map((card) => ( + + ))} +
+ ); +}; + +export default FavoriteCardList; diff --git a/src/components/favoritesPage/FavoriteSlider.tsx b/src/components/favoritesPage/FavoriteSlider.tsx new file mode 100644 index 0000000..153737b --- /dev/null +++ b/src/components/favoritesPage/FavoriteSlider.tsx @@ -0,0 +1,99 @@ +import { useState, useRef, useEffect } from "react"; +import { ILayoutCard } from "../../types/layoutCard"; +import FavoriteSliderCard from "./FavoriteSliderCard"; +import Button from "../Button"; +import RightArrowIcon from "../icons/RightArrowIcon"; +import LeftArrowIcon from "../icons/LeftArrowIcon"; + +interface FavoritesSliderProps { + cards: ILayoutCard[]; +} + +const cols = 4; + +const FavoritesSlider = ({ cards }: FavoritesSliderProps) => { + const [offset, setOffset] = useState(0); + const cardRef = useRef(null); + const [cardWidth, setCardWidth] = useState(0); + const [buttonTopPos, setButtonTopPos] = useState(0); + + useEffect(() => { + const cardElement = cardRef.current; + if (cardElement) { + const gap = 16; + const width = cardElement.clientWidth + gap; + const buttonHeight = cardElement.clientHeight; + const _buttonTopPos = buttonHeight / 2 + 20; + setCardWidth(width); + setButtonTopPos(_buttonTopPos); + } + }, []); + + const handleOnLeftBtnClick = () => { + if (0 > offset) { + setOffset((prev) => prev + 1); + } + }; + + const handleOnRightBtnClick = () => { + if (offset > -cards.length + cols) { + setOffset((prev) => prev - 1); + } + }; + + return ( +
+
+
+
+
+
+
+
+ {Array.from({ length: Math.floor(cards.length / cols) }).map( + (_, index) => { + return ( +
+ {cards + .slice(index * cols, cols + index * cols) + .map((card) => ( + + ))} +
+ ); + } + )} +
+
+
+
+ ); +}; + +export default FavoritesSlider; diff --git a/src/components/favoritesPage/FavoriteSliderCard.tsx b/src/components/favoritesPage/FavoriteSliderCard.tsx new file mode 100644 index 0000000..4cd3564 --- /dev/null +++ b/src/components/favoritesPage/FavoriteSliderCard.tsx @@ -0,0 +1,59 @@ +import { ILayoutCard } from "../../types/layoutCard"; +import Button from "../Button"; +import BookingIcon from "../icons/BookingIcon"; +import HeartIcon from "../icons/Heart"; + +interface FavoriteSliderCardProps { + card: ILayoutCard; + elementRef: React.MutableRefObject; +} + +const FavoriteSliderCard = ({ card, elementRef }: FavoriteSliderCardProps) => { + return ( +
+
+
+
+

+ {card.apartmentType}, {card.square} Sqft +

+
+
+ +
+
+

Price

+

AED {card.cost}

+
+
+

Total Area

+

{card.square} Sqft

+
+
+

Project

+

Rove Home {card.roveHome}

+
+
+

Section

+

{card.wing}

+
+
+

Floor

+

Floor 11

+
+
+

Number

+

213

+
+
+ ); +}; + +export default FavoriteSliderCard; diff --git a/src/components/icons/LeftArrowIcon.tsx b/src/components/icons/LeftArrowIcon.tsx new file mode 100644 index 0000000..bcad06d --- /dev/null +++ b/src/components/icons/LeftArrowIcon.tsx @@ -0,0 +1,21 @@ +const LeftArrowIcon = () => { + return ( + + + + ); +}; + +export default LeftArrowIcon; diff --git a/src/components/searchApartment/ApartmentLayout.tsx b/src/components/searchApartment/ApartmentLayout.tsx index 48a3cc2..f1da687 100644 --- a/src/components/searchApartment/ApartmentLayout.tsx +++ b/src/components/searchApartment/ApartmentLayout.tsx @@ -14,11 +14,6 @@ const ApartmentLayout = () => { }; return (
-
@@ -27,6 +22,11 @@ const ApartmentLayout = () => { alt="" className="absolute right-10 bottom-10" /> +
); }; diff --git a/src/components/searchApartment/SimilarSlider.tsx b/src/components/searchApartment/SimilarSlider.tsx index 34af41c..5d5c84d 100644 --- a/src/components/searchApartment/SimilarSlider.tsx +++ b/src/components/searchApartment/SimilarSlider.tsx @@ -1,24 +1,19 @@ -import { useEffect, useLayoutEffect, useRef, useState } from "react"; +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { useLayoutEffect, useRef, useState } from "react"; import { layoutsCards } from "../../consts/initialSearchPage"; -import LayoutCard from "../searchPage/LayoutCard"; import SimilarAppartmentCard from "./SimilarAppartmentCard"; import Button from "../Button"; import RightArrowIcon from "../icons/RightArrowIcon"; +const cols = 4; + const SimilarSlider = () => { - const [cards, setCards] = useState(layoutsCards.slice(0, 4)); + const [cards, setCards] = useState(layoutsCards); const [offset, setOffset] = useState(0); - const sliderRef = useRef(null); const cardRef = useRef(null); - const [sliderHeight, setSliderHeight] = useState(0); const [cardWidth, setCardWidth] = useState(0); useLayoutEffect(() => { - const sliderElement = sliderRef.current; - if (sliderElement) { - const height = sliderElement.clientHeight; - setSliderHeight(height); - } const cardElement = cardRef.current; if (cardElement) { const gap = 16; @@ -27,21 +22,20 @@ const SimilarSlider = () => { } }, []); - useEffect(() => { - console.log("offset", offset); - - return () => {}; - }, [offset]); - const handleOnLeftBtnClick = () => { - if (0 < offset) { + if (0 > offset) { setOffset((prev) => prev + 1); } }; const handleOnRightBtnClick = () => { - // if (0 > offset) { - setOffset((prev) => prev - 1); + if (offset > -cards.length + cols) { + setOffset((prev) => prev - 1); + } + // if (offset === -cards.length + cols) { + // const updatedCards = [...cards, ...cards.slice(0, 4)]; + // setCards(updatedCards); + // setOffset((prev) => prev - 1); // } }; @@ -68,32 +62,32 @@ const SimilarSlider = () => {
-
-
- {cards.map((layoutsCard) => ( - - ))} -
-
- {cards.map((layoutsCard) => ( - - ))} -
+
+ {Array.from({ length: Math.floor(cards.length / cols) }).map( + (_, index) => { + return ( +
+ {cards + .slice(index * cols, cols + index * cols) + .map((card) => ( + + ))} +
+ ); + } + )}
diff --git a/src/components/searchPage/SortButton.tsx b/src/components/searchPage/SortButton.tsx index 9ee53c7..15b61fa 100644 --- a/src/components/searchPage/SortButton.tsx +++ b/src/components/searchPage/SortButton.tsx @@ -34,7 +34,7 @@ const SortButton = ({ sortList, onClick }: SortButtonProps) => {
diff --git a/src/components/virtualTour/VirtualTourWrapper.tsx b/src/components/virtualTour/VirtualTourWrapper.tsx new file mode 100644 index 0000000..98b5f00 --- /dev/null +++ b/src/components/virtualTour/VirtualTourWrapper.tsx @@ -0,0 +1,43 @@ +import { BackSide, MeshBasicMaterial } from "three"; +import { OrbitControls, Html, Sphere, useTexture } from "@react-three/drei"; +import { Suspense, useRef } from "react"; +import { OrbitControls as OrbitControlsImpl } from "three-stdlib"; +import { useParams } from "react-router-dom"; + +const VirtualTourWrapper = () => { + const orbitRef = useRef(null); + const materialRef = useRef(null); + const texture = useTexture( + "/images/virtual-tour/studio1/Studio1_w-12_13_sp-01.webp" + ); + const { id } = useParams(); + + return ( + Loading ...
}> + + + + console.log("e", orbitRef.current?.getAzimuthalAngle())} + target={[-14.16, 0, 24.11]} + /> + + ); +}; + +export default VirtualTourWrapper; diff --git a/src/consts/buttonStyles.ts b/src/consts/buttonStyles.ts index de7750b..712dd4f 100644 --- a/src/consts/buttonStyles.ts +++ b/src/consts/buttonStyles.ts @@ -4,27 +4,30 @@ const backgroundColors: ButtonStyle = { cta: "bg-[#00BED7] hover:bg-[#00A8BE]", primary: "bg-[#ffffff] hover:bg-[#F3F3F2] active:bg-[#fff]", secondary: "bg-[#ffffff] hover:bg-[#F3F3F2] active:bg-[#fff]", - tertiary: "bg-[#0D192266] hover:bg-[#0D1922B2]", + tertiary: "", fab: "bg-[#ffffff] hover:bg-[#F3F3F2]", favorite: "bg-[#FFFFFF] hover:bg-[#F3F3F2]", + special: "bg-[#0D192266] hover:bg-[#0D1922B2]", }; const textColors: ButtonStyle = { cta: "text-[#ffffff]", primary: "text-[#0D1922]", secondary: "text-[#0D1922]", - tertiary: "text-[#ffffff]", + tertiary: "text-[#73787C] hover:text-[#0D1922] active:text-[#00BED7]", fab: "text-[#0D1922]", favorite: "text-[#F3F3F2]", + special: "text-[#ffffff]", }; const borders: ButtonStyle = { cta: "rounded-lg", primary: "rounded-lg border border-[#ffffff] active:border-[#00BED7]", secondary: "rounded-lg border border-[#E2E2DC] active:border-[#00BED7]", - tertiary: "rounded-full", + tertiary: "", fab: "rounded-full", - favorite: "rounded-lg border border-[#E2E2DC]", + favorite: "rounded-full border border-[#E2E2DC]", + special: "rounded-full", }; const paddings: ButtonStyle = { @@ -34,6 +37,7 @@ const paddings: ButtonStyle = { tertiary: "py-1 px-3", fab: "py-3 px-6", favorite: "p-[10px]", + special: "py-1 px-3", }; export { textColors, backgroundColors, borders, paddings }; diff --git a/src/data/appartments-studio-1.json b/src/data/appartments-studio-1.json new file mode 100644 index 0000000..1c06a76 --- /dev/null +++ b/src/data/appartments-studio-1.json @@ -0,0 +1,77 @@ +[ + { + "id": "studio-1-sp-01", + "src": "/images/virtual-tour/studio1/Studio1_w-12_13_sp-01.webp", + "position": [-23.12, 0, -13.4], + "mapPosition": [97.61, 281.92], + "links": [ + { "toId": "Dvor_16", "label": "" }, + { "toId": "Dvor_17", "label": "Детская площадка" } + ] + }, + { + "id": "studio-1-sp-02", + "src": "/images/virtual-tour/studio1/Studio1_w-12_13_sp-02.webp", + "position": [-14.16, 0, 24.11], + "mapPosition": [39.57, 347.47], + "links": [ + { "toId": "Dvor_16", "label": "" }, + { "toId": "Dvor_2", "label": "" }, + { "toId": "Hall_1", "label": "Лобби" } + ] + }, + { + "id": "studio-1-sp-03", + "src": "/images/virtual-tour/studio1/Studio1_w-12_13_sp-03.webp", + "position": [-22.27, 0, 19.69], + "mapPosition": [36.26, 327.64], + "links": [ + { "toId": "Dvor_1", "label": "" }, + { "toId": "Dvor_14", "label": "" } + ] + }, + { + "id": "studio-1-sp-04", + "src": "/images/virtual-tour/studio1/Studio1_w-12_13_sp-04.webp", + "position": [-52.03, 0, -3.63], + "mapPosition": [41.11, 241.29], + "links": [ + { "toId": "Dvor_15", "label": "" }, + { "toId": "Dvor_4", "label": "" }, + { "toId": "Dvor_9", "label": "Детская площадка" } + ] + }, + { + "id": "studio-1-sp-05", + "src": "/images/virtual-tour/studio1/Studio1_w-12_13_sp-05.webp", + "position": [-50.6, 0, -15.06], + "mapPosition": [64.39, 228.91], + "links": [ + { "toId": "Dvor_9", "label": "Детская площадка" }, + { "toId": "Dvor_5", "label": "" }, + { "toId": "Dvor_3", "label": "" }, + { "toId": "Dvor_6", "label": "Детская площадка" } + ] + }, + { + "id": "studio-1-sp-06", + "src": "/images/virtual-tour/studio1/Studio1_w-12_13_sp-06.webp", + "position": [-34.36, 0, -4.72], + "mapPosition": [66.41, 273.23], + "links": [ + { "toId": "Dvor_4", "label": "" }, + { "toId": "Dvor_17", "label": "Детская площадка" } + ] + }, + { + "id": "studio-1-sp-07", + "src": "/images/virtual-tour/studio1/Studio1_w-12_13_sp-07.webp", + "position": [-40.94, 0, -23.93], + "mapPosition": [93.88, 235.03], + "links": [ + { "toId": "Dvor_17", "label": "Детская площадка" }, + { "toId": "Dvor_7", "label": "" }, + { "toId": "Dvor_4", "label": "" } + ] + } +] diff --git a/src/main.tsx b/src/main.tsx index 08e41c1..babe790 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -10,6 +10,7 @@ import Search from "./pages/Search"; import SearchParticularApartments from "./pages/SearchParticularApartments"; import SearchApartment from "./pages/SearchApartment"; import Favorites from "./pages/Favorites"; +import VirtualTour from "./pages/VirtualTour"; const router = createBrowserRouter([ { @@ -52,6 +53,10 @@ const router = createBrowserRouter([ path: "/favorites", element: , }, + { + path: "virtual-tour/:appartmentTypeId", + element: , + }, ], }, ]); diff --git a/src/pages/Favorites.tsx b/src/pages/Favorites.tsx index 9155a44..eb5a112 100644 --- a/src/pages/Favorites.tsx +++ b/src/pages/Favorites.tsx @@ -2,12 +2,14 @@ import { useState, useEffect } from "react"; import { sortCardBy } from "../calc/sortCard"; import Button from "../components/Button"; import Footer from "../components/Footer"; -import FiltersIcon from "../components/icons/FiltersIcon"; import TrashIcon from "../components/icons/TrashIcon"; import SortButton from "../components/searchPage/SortButton"; import { initialSortList } from "../consts/initialSearchPage"; import { ILayoutCard } from "../types/layoutCard"; -import FavoriteAppartmentCard from "../components/favoritesPage/FavoriteApartmentCard"; +import Switch from "../components/Switch"; +import { ISwitcher } from "../types/switcher"; +import FavoritesSlider from "../components/favoritesPage/FavoriteSlider"; +import FavoriteCardList from "../components/favoritesPage/FavoriteCardList"; const favoriteCards: ILayoutCard[] = [ { @@ -144,9 +146,16 @@ const favoriteCards: ILayoutCard[] = [ }, ]; +const initialCollectionCompareSwitcher: ISwitcher = { + id: "1", + title: "collection/compare", + isSwitched: false, +}; + const Favorites = () => { const [sortList, setSortList] = useState(initialSortList); const [cards, setCards] = useState(favoriteCards); + const [switcher, setSwitcher] = useState(initialCollectionCompareSwitcher); const handleOnSortClick = (sortId: string) => { const updatedSortList = sortList.map((sort) => { @@ -156,6 +165,12 @@ const Favorites = () => { setSortList(updatedSortList); }; + const handleOnSwitchClick = () => { + setSwitcher((prev) => { + return { ...prev, isSwitched: !prev.isSwitched }; + }); + }; + useEffect(() => { const sortedCards = sortCardBy(sortList, favoriteCards); @@ -164,37 +179,50 @@ const Favorites = () => { return (
-
+
-
-

Units

-

145

+
+
+

Units

+

145

+
+
-
-
- {cards.map((card) => ( - - ))} -
+ {switcher.isSwitched ? ( + + ) : ( + + )}
diff --git a/src/pages/VirtualTour.tsx b/src/pages/VirtualTour.tsx new file mode 100644 index 0000000..30a91fc --- /dev/null +++ b/src/pages/VirtualTour.tsx @@ -0,0 +1,39 @@ +import { Canvas } from "@react-three/fiber"; +import ButtomPanel from "../components/ButtomPanel"; +import VirtualTourWrapper from "../components/virtualTour/VirtualTourWrapper"; + +const VirtualTour = () => { + return ( +
+ {/* */} +
+
+
+
+

+ Rove Home Marasi Drive{" "} +

+
+

+ East Wing +

+
+

+ Floor 11 +

+
+

№ 213

+
+
+
+
+
+ + + + +
+ ); +}; + +export default VirtualTour; diff --git a/src/types/button.ts b/src/types/button.ts index c485327..c1a6926 100644 --- a/src/types/button.ts +++ b/src/types/button.ts @@ -4,7 +4,8 @@ type ButtonType = | "cta" | "fab" | "secondary" - | "favorite"; + | "favorite" + | "special"; type ButtonStyle = { [key in ButtonType]: string; }; diff --git a/yarn.lock b/yarn.lock index c298fb5..81e4721 100644 --- a/yarn.lock +++ b/yarn.lock @@ -185,7 +185,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.24.0" -"@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": +"@babel/runtime@^7.11.2", "@babel/runtime@^7.17.8", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": version "7.24.5" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz" integrity sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g== @@ -436,6 +436,18 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@mediapipe/tasks-vision@0.10.8": + version "0.10.8" + resolved "https://registry.yarnpkg.com/@mediapipe/tasks-vision/-/tasks-vision-0.10.8.tgz#a78e137018a19933b7a1d0e887d553d4ab833d10" + integrity sha512-Rp7ll8BHrKB3wXaRFKhrltwZl1CiXGdibPxuWXvqGnKTnv8fqa/nvftYNuSbf+pbJWKYCXdBtYTITdAUTGGh0Q== + +"@monogrid/gainmap-js@^3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@monogrid/gainmap-js/-/gainmap-js-3.0.5.tgz#8c736088012ae8cd1f7b3d5adbd221c3905ab4ed" + integrity sha512-53sCTG4FaJBaAq/tcufARtVYDMDGqyBT9i7F453pWGhZ5LqubDHDWtYoHo9VhQqMcHTEexdJqSsR58y+9HVmQA== + dependencies: + promise-worker-transferable "^1.0.4" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -462,6 +474,98 @@ resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@react-spring/animated@~9.6.1": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.6.1.tgz#ccc626d847cbe346f5f8815d0928183c647eb425" + integrity sha512-ls/rJBrAqiAYozjLo5EPPLLOb1LM0lNVQcXODTC1SMtS6DbuBCPaKco5svFUQFMP2dso3O+qcC4k9FsKc0KxMQ== + dependencies: + "@react-spring/shared" "~9.6.1" + "@react-spring/types" "~9.6.1" + +"@react-spring/core@~9.6.1": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.6.1.tgz#ebe07c20682b360b06af116ea24e2b609e778c10" + integrity sha512-3HAAinAyCPessyQNNXe5W0OHzRfa8Yo5P748paPcmMowZ/4sMfaZ2ZB6e5x5khQI8NusOHj8nquoutd6FRY5WQ== + dependencies: + "@react-spring/animated" "~9.6.1" + "@react-spring/rafz" "~9.6.1" + "@react-spring/shared" "~9.6.1" + "@react-spring/types" "~9.6.1" + +"@react-spring/rafz@~9.6.1": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.6.1.tgz#d71aafb92b78b24e4ff84639f52745afc285c38d" + integrity sha512-v6qbgNRpztJFFfSE3e2W1Uz+g8KnIBs6SmzCzcVVF61GdGfGOuBrbjIcp+nUz301awVmREKi4eMQb2Ab2gGgyQ== + +"@react-spring/shared@~9.6.1": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.6.1.tgz#4e2e4296910656c02bd9fd54c559702bc836ac4e" + integrity sha512-PBFBXabxFEuF8enNLkVqMC9h5uLRBo6GQhRMQT/nRTnemVENimgRd+0ZT4yFnAQ0AxWNiJfX3qux+bW2LbG6Bw== + dependencies: + "@react-spring/rafz" "~9.6.1" + "@react-spring/types" "~9.6.1" + +"@react-spring/three@~9.6.1": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@react-spring/three/-/three-9.6.1.tgz#095fcd1dc6509127c33c14486d88289b89baeb9d" + integrity sha512-Tyw2YhZPKJAX3t2FcqvpLRb71CyTe1GvT3V+i+xJzfALgpk10uPGdGaQQ5Xrzmok1340DAeg2pR/MCfaW7b8AA== + dependencies: + "@react-spring/animated" "~9.6.1" + "@react-spring/core" "~9.6.1" + "@react-spring/shared" "~9.6.1" + "@react-spring/types" "~9.6.1" + +"@react-spring/types@~9.6.1": + version "9.6.1" + resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.6.1.tgz#913d3a68c5cbc1124fdb18eff919432f7b6abdde" + integrity sha512-POu8Mk0hIU3lRXB3bGIGe4VHIwwDsQyoD1F394OK7STTiX9w4dG3cTLljjYswkQN+hDSHRrj4O36kuVa7KPU8Q== + +"@react-three/drei@^9.105.6": + version "9.105.6" + resolved "https://registry.yarnpkg.com/@react-three/drei/-/drei-9.105.6.tgz#62a576149d179a02a3aaf5f9d962bcf9e1540eb2" + integrity sha512-JBgYeV36N9N9f1c3o1ZfLYW4rXZA7UQTq32Y8s3DEF6lwj1/y+RP/yq2VG5I8OzUPl7gsmWdy8fpWZgrlAqUpQ== + dependencies: + "@babel/runtime" "^7.11.2" + "@mediapipe/tasks-vision" "0.10.8" + "@monogrid/gainmap-js" "^3.0.5" + "@react-spring/three" "~9.6.1" + "@use-gesture/react" "^10.2.24" + camera-controls "^2.4.2" + cross-env "^7.0.3" + detect-gpu "^5.0.28" + glsl-noise "^0.0.0" + hls.js "1.3.5" + maath "^0.10.7" + meshline "^3.1.6" + react-composer "^5.0.3" + stats-gl "^2.0.0" + stats.js "^0.17.0" + suspend-react "^0.1.3" + three-mesh-bvh "^0.7.0" + three-stdlib "^2.29.9" + troika-three-text "^0.49.0" + tunnel-rat "^0.1.2" + utility-types "^3.10.0" + uuid "^9.0.1" + zustand "^3.7.1" + +"@react-three/fiber@^8.16.6": + version "8.16.6" + resolved "https://registry.yarnpkg.com/@react-three/fiber/-/fiber-8.16.6.tgz#8ee71f6b10b3420c03f2ab3758909e6d98fd8f31" + integrity sha512-sKEqocYKRI3deW7z9CAVjedDID1an2i8FwxQVv2reMJxzIxIlyxCYXMIAqXBCgHTFtVX2hWGTZYhLL5nyne8kA== + dependencies: + "@babel/runtime" "^7.17.8" + "@types/react-reconciler" "^0.26.7" + "@types/webxr" "*" + base64-js "^1.5.1" + buffer "^6.0.3" + its-fine "^1.0.6" + react-reconciler "^0.27.0" + react-use-measure "^2.1.1" + scheduler "^0.21.0" + suspend-react "^0.1.3" + zustand "^3.7.1" + "@remix-run/router@1.16.1": version "1.16.1" resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.16.1.tgz#73db3c48b975eeb06d0006481bde4f5f2d17d1cd" @@ -547,6 +651,11 @@ resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.3.tgz" integrity sha512-/BypzV0H1y1HzgYpxqRaXGBRqfodgoBBCcsrujT6QRcakDQdfU+Lq9PENPh5jB4I44YWq+0C2eHsHya+nZY1sA== +"@tweenjs/tween.js@~23.1.1": + version "23.1.2" + resolved "https://registry.yarnpkg.com/@tweenjs/tween.js/-/tween.js-23.1.2.tgz#4e5357fd6742f5aa50447d3fa808aed4cda93ed7" + integrity sha512-kMCNaZCJugWI86xiEHaY338CU5JpD0B97p1j1IKNn/Zto8PgACjQx0UxbHjmOcLl/dDOBnItwD07KmCs75pxtQ== + "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" @@ -580,6 +689,11 @@ dependencies: "@babel/types" "^7.20.7" +"@types/draco3d@^1.4.0": + version "1.4.10" + resolved "https://registry.yarnpkg.com/@types/draco3d/-/draco3d-1.4.10.tgz#63ec0ba78b30bd58203ec031f4e4f0198c596dca" + integrity sha512-AX22jp8Y7wwaBgAixaSvkoG4M/+PlAcm3Qs4OW8yT9DM4xUpWKeFhLueTAyZF39pviAdcDdeJoACapiAceqNcw== + "@types/estree@1.0.5": version "1.0.5" resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" @@ -595,6 +709,11 @@ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/offscreencanvas@^2019.6.4": + version "2019.7.3" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz#90267db13f64d6e9ccb5ae3eac92786a7c77a516" + integrity sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A== + "@types/prop-types@*": version "15.7.12" resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz" @@ -607,6 +726,20 @@ dependencies: "@types/react" "*" +"@types/react-reconciler@^0.26.7": + version "0.26.7" + resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.26.7.tgz#0c4643f30821ae057e401b0d9037e03e8e9b2a36" + integrity sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ== + dependencies: + "@types/react" "*" + +"@types/react-reconciler@^0.28.0": + version "0.28.8" + resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.8.tgz#e51710572bcccf214306833c2438575d310b3e98" + integrity sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g== + dependencies: + "@types/react" "*" + "@types/react-router-dom@^5.3.3": version "5.3.3" resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" @@ -644,6 +777,27 @@ resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== +"@types/stats.js@*": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@types/stats.js/-/stats.js-0.17.3.tgz#705446e12ce0fad618557dd88236f51148b7a935" + integrity sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ== + +"@types/three@^0.163.0": + version "0.163.0" + resolved "https://registry.yarnpkg.com/@types/three/-/three-0.163.0.tgz#96f5440fcd39452d2c84dfe0c9b7a9cf0247b9e6" + integrity sha512-uIdDhsXRpQiBUkflBS/i1l3JX14fW6Ot9csed60nfbZNXHDTRsnV2xnTVwXcgbvTiboAR4IW+t+lTL5f1rqIqA== + dependencies: + "@tweenjs/tween.js" "~23.1.1" + "@types/stats.js" "*" + "@types/webxr" "*" + fflate "~0.8.2" + meshoptimizer "~0.18.1" + +"@types/webxr@*", "@types/webxr@^0.5.2": + version "0.5.16" + resolved "https://registry.yarnpkg.com/@types/webxr/-/webxr-0.5.16.tgz#28955aa2d1197d1ef0b9826ae0f7e68f7eca0601" + integrity sha512-0E0Cl84FECtzrB4qG19TNTqpunw0F1YF0QZZnFMF6pDw1kNKJtrlTKlVB34stGIsHbZsYQ7H0tNjPfZftkHHoA== + "@typescript-eslint/eslint-plugin@^7.2.0": version "7.6.0" resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz" @@ -735,6 +889,18 @@ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== +"@use-gesture/core@10.3.1": + version "10.3.1" + resolved "https://registry.yarnpkg.com/@use-gesture/core/-/core-10.3.1.tgz#976c9421e905f0079d49822cfd5c2e56b808fc56" + integrity sha512-WcINiDt8WjqBdUXye25anHiNxPc0VOrlT8F6LLkU6cycrOGUDyY/yyFmsg3k8i5OLvv25llc0QC45GhR/C8llw== + +"@use-gesture/react@^10.2.24": + version "10.3.1" + resolved "https://registry.yarnpkg.com/@use-gesture/react/-/react-10.3.1.tgz#17a743a894d9bd9a0d1980c618f37f0164469867" + integrity sha512-Yy19y6O2GJq8f7CHf7L0nxL8bf4PZCPaVOCgJrusOeFHY1LvHgYXnmnXg6N5iwAnbgbZCDjo60SiM6IPJi9C5g== + dependencies: + "@use-gesture/core" "10.3.1" + "@vitejs/plugin-react@^4.2.1": version "4.2.1" resolved "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz" @@ -840,6 +1006,18 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bidi-js@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bidi-js/-/bidi-js-1.0.3.tgz#6f8bcf3c877c4d9220ddf49b9bb6930c88f877d2" + integrity sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw== + dependencies: + require-from-string "^2.0.2" + binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" @@ -877,6 +1055,14 @@ browserslist@^4.22.2, browserslist@^4.23.0: node-releases "^2.0.14" update-browserslist-db "^1.0.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" @@ -887,6 +1073,11 @@ camelcase-css@^2.0.1: resolved "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== +camera-controls@^2.4.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/camera-controls/-/camera-controls-2.8.3.tgz#54c296d21564dede84e56ffd6b75b3daa3c76e90" + integrity sha512-zFjqUR6onLkG+z1A6vAWfzovxZxWVSvp6e5t3lfZgfgPZtX3n74aykNAUaoRbq8Y3tOxadHkDjbfGDOP9hFf2w== + caniuse-lite@^1.0.30001587, caniuse-lite@^1.0.30001599: version "1.0.30001610" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001610.tgz" @@ -973,7 +1164,14 @@ core-js@^3.22.4: resolved "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz" integrity sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug== -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -992,6 +1190,11 @@ csstype@^3.0.2: resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== +debounce@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" + integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== + debug@^4.1.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" @@ -1004,6 +1207,13 @@ deep-is@^0.1.3: resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +detect-gpu@^5.0.28: + version "5.0.38" + resolved "https://registry.yarnpkg.com/detect-gpu/-/detect-gpu-5.0.38.tgz#1c05ce728ea1229d16db15b865631609bf0d6952" + integrity sha512-36QeGHSXYcJ/RfrnPEScR8GDprbXFG4ZhXsfVNVHztZr38+fRxgHnJl3CjYXXjbeRUhu3ZZBJh6Lg0A9v0Qd8A== + dependencies: + webgl-constants "^1.1.1" + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" @@ -1036,6 +1246,11 @@ dom-helpers@^5.0.1: "@babel/runtime" "^7.8.7" csstype "^3.0.2" +draco3d@^1.4.1: + version "1.5.7" + resolved "https://registry.yarnpkg.com/draco3d/-/draco3d-1.5.7.tgz#94f9bce293eb8920c159dc91a4ce9124a9e899e0" + integrity sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ== + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" @@ -1233,6 +1448,16 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fflate@^0.6.9: + version "0.6.10" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.6.10.tgz#5f40f9659205936a2d18abf88b2e7781662b6d43" + integrity sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg== + +fflate@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea" + integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A== + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" @@ -1368,6 +1593,11 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +glsl-noise@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/glsl-noise/-/glsl-noise-0.0.0.tgz#367745f3a33382c0eeec4cb54b7e99cfc1d7670b" + integrity sha512-b/ZCF6amfAUb7dJM/MxRs7AetQEahYzJ8PtgfrmEdtw6uyGOr+ZSGtgjFm6mfsBkxJ4d2W7kg+Nlqzqvn3Bc0w== + graphemer@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" @@ -1395,11 +1625,26 @@ hasown@^2.0.0: dependencies: function-bind "^1.1.2" +hls.js@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/hls.js/-/hls.js-1.3.5.tgz#0e8b0799ecf2feb7ba199f5e95f35ba9552e04f4" + integrity sha512-uybAvKS6uDe0MnWNEPnO0krWVr+8m2R0hJ/viql8H3MVK+itq8gGQuIYoFHL3rECkIpNH98Lw8YuuWMKZxp3Ew== + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0, ignore@^5.3.1: version "5.3.1" resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" @@ -1467,11 +1712,23 @@ is-path-inside@^3.0.3: resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +its-fine@^1.0.6: + version "1.2.5" + resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.2.5.tgz#5466c287f86a0a73e772c8d8d515626c97195dc9" + integrity sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA== + dependencies: + "@types/react-reconciler" "^0.28.0" + jackspeak@^2.3.6: version "2.3.6" resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" @@ -1538,6 +1795,13 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lie@^3.0.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + lilconfig@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" @@ -1591,11 +1855,26 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +maath@^0.10.7: + version "0.10.7" + resolved "https://registry.yarnpkg.com/maath/-/maath-0.10.7.tgz#9289b42a5db8ac5b26407b3bfca4e3bebefe50b4" + integrity sha512-zQ2xd7dNOIVTjAS+hj22fyj1EFYmOJX6tzKjZ92r6WDoq8hyFxjuGA2q950tmR4iC/EKXoMQdSipkaJVuUHDTg== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +meshline@^3.1.6: + version "3.3.0" + resolved "https://registry.yarnpkg.com/meshline/-/meshline-3.3.0.tgz#8d926d3889ea9c37b37484961fbfbff0a464cd51" + integrity sha512-EKKf2TLnfyqUeA7ryWFKgT9HchTMATvECGZnMQjtlcyxK0sB8shVLVkemBUp9dB3tkDEmoqQDLJCPStjkH8D7A== + +meshoptimizer@~0.18.1: + version "0.18.1" + resolved "https://registry.yarnpkg.com/meshoptimizer/-/meshoptimizer-0.18.1.tgz#cdb90907f30a7b5b1190facd3b7ee6b7087797d8" + integrity sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw== + micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" @@ -1818,12 +2097,25 @@ postcss@^8.4.23, postcss@^8.4.38: picocolors "^1.0.0" source-map-js "^1.2.0" +potpack@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.2.tgz#23b99e64eb74f5741ffe7656b5b5c4ddce8dfc14" + integrity sha512-choctRBIV9EMT9WGAZHn3V7t0Z2pMQyl0EZE6pFc/6ml3ssw7Dlf/oAOvFwjm1HVsqfQN8GfeFyJ+d8tRzqueQ== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prop-types@^15.6.2: +promise-worker-transferable@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/promise-worker-transferable/-/promise-worker-transferable-1.0.4.tgz#2c72861ba053e5ae42b487b4a83b1ed3ae3786e8" + integrity sha512-bN+0ehEnrXfxV2ZQvU2PetO0n4gqBD4ulq3MI1WOPLgr7/Mg9yRQkX5+0v1vagr74ZTsl7XtzlaYDo2EuCeYJw== + dependencies: + is-promise "^2.1.0" + lie "^3.0.2" + +prop-types@^15.6.0, prop-types@^15.6.2: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -1842,6 +2134,13 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +react-composer@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-composer/-/react-composer-5.0.3.tgz#7beb9513da5e8687f4f434ea1333ef36a4f3091b" + integrity sha512-1uWd07EME6XZvMfapwZmc7NgCZqDemcvicRi3wMJzXsQLvZ3L7fTHVyPy1bZdnWXM4iPjYuNE+uJ41MLKeTtnA== + dependencies: + prop-types "^15.6.0" + react-device-detect@^2.2.3: version "2.2.3" resolved "https://registry.npmjs.org/react-device-detect/-/react-device-detect-2.2.3.tgz" @@ -1882,6 +2181,14 @@ react-range-slider-input@^3.0.7: clsx "^1.1.1" core-js "^3.22.4" +react-reconciler@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.27.0.tgz#360124fdf2d76447c7491ee5f0e04503ed9acf5b" + integrity sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.21.0" + react-refresh@^0.14.0: version "0.14.0" resolved "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz" @@ -1917,6 +2224,13 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" +react-use-measure@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-use-measure/-/react-use-measure-2.1.1.tgz#5824537f4ee01c9469c45d5f7a8446177c6cc4ba" + integrity sha512-nocZhN26cproIiIduswYpV5y5lQpSQS1y/4KuvUCjSKmw7ZWIS/+g3aFnX3WdBkyuGUtTLif3UTqnLLhbDoQig== + dependencies: + debounce "^1.2.1" + react-zoom-pan-pinch@^3.4.4: version "3.4.4" resolved "https://registry.npmjs.org/react-zoom-pan-pinch/-/react-zoom-pan-pinch-3.4.4.tgz" @@ -1948,6 +2262,11 @@ regenerator-runtime@^0.14.0: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" @@ -2006,6 +2325,13 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +scheduler@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" + integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ== + dependencies: + loose-envify "^1.1.0" + scheduler@^0.23.0: version "0.23.0" resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" @@ -2052,6 +2378,18 @@ source-map-js@^1.2.0: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz" integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg== +stats-gl@^2.0.0: + version "2.2.8" + resolved "https://registry.yarnpkg.com/stats-gl/-/stats-gl-2.2.8.tgz#72566abc8e4a66e91c26b7d9abf659d032379d68" + integrity sha512-94G5nZvduDmzxBS7K0lYnynYwreZpkknD8g5dZmU6mpwIhy3caCrjAm11Qm1cbyx7mqix7Fp00RkbsonzKWnoQ== + dependencies: + "@types/three" "^0.163.0" + +stats.js@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/stats.js/-/stats.js-0.17.0.tgz#b1c3dc46d94498b578b7fd3985b81ace7131cc7d" + integrity sha512-hNKz8phvYLPEcRkeG1rsGmV5ChMjKDAWU7/OJJdDErPBNChQXxCo3WZurGpnWc6gZhAzEPFad1aVgyOANH1sMw== + "string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: name string-width-cjs version "4.2.3" @@ -2122,6 +2460,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== +suspend-react@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/suspend-react/-/suspend-react-0.1.3.tgz#a52f49d21cfae9a2fb70bd0c68413d3f9d90768e" + integrity sha512-aqldKgX9aZqpoDp3e8/BZ8Dm7x1pJl+qI3ZKxDN0i/IQTWUwBx/ManmlVJ3wowqbno6c2bmiIfs+Um6LbsjJyQ== + tailwindcss@^3.4.3: version "3.4.3" resolved "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz" @@ -2169,6 +2512,28 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" +three-mesh-bvh@^0.7.0: + version "0.7.4" + resolved "https://registry.yarnpkg.com/three-mesh-bvh/-/three-mesh-bvh-0.7.4.tgz#a5c799856a3f26f73537a73b6ec632c30f712ba8" + integrity sha512-flxe0A4uflTPR6elgq/Y8VrLoljDNS899i422SxQcU3EtMj6o8z4kZRyqZqGWzR0qMf1InTZzY1/0xZl/rnvVw== + +three-stdlib@^2.29.9: + version "2.30.0" + resolved "https://registry.yarnpkg.com/three-stdlib/-/three-stdlib-2.30.0.tgz#c6133f5e16ba2ab702d8dc05203ed9aa89595c9f" + integrity sha512-ALL7rn57jq/MovDRk5hGjeWCvOeZlZhFCWIdpbBAQNudCO3nMwxEba5ZulsMgiI1ymQMzUzTMcxhLTCVlUaKDw== + dependencies: + "@types/draco3d" "^1.4.0" + "@types/offscreencanvas" "^2019.6.4" + "@types/webxr" "^0.5.2" + draco3d "^1.4.1" + fflate "^0.6.9" + potpack "^1.0.1" + +three@^0.164.1: + version "0.164.1" + resolved "https://registry.yarnpkg.com/three/-/three-0.164.1.tgz#b742f76bd8dfd3736ba0d86a12dfddb73c5cdcc0" + integrity sha512-iC/hUBbl1vzFny7f5GtqzVXYjMJKaTPxiCxXfrvVdBi1Sf+jhd1CAkitiFwC7mIBFCo3MrDLJG97yisoaWig0w== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" @@ -2181,6 +2546,26 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +troika-three-text@^0.49.0: + version "0.49.1" + resolved "https://registry.yarnpkg.com/troika-three-text/-/troika-three-text-0.49.1.tgz#1aaa75337e507ea4120103fb69a5e4687fff97dd" + integrity sha512-lXGWxgjJP9kw4i4Wh+0k0Q/7cRfS6iOME4knKht/KozPu9GcFA9NnNpRvehIhrUawq9B0ZRw+0oiFHgRO+4Wig== + dependencies: + bidi-js "^1.0.2" + troika-three-utils "^0.49.0" + troika-worker-utils "^0.49.0" + webgl-sdf-generator "1.1.1" + +troika-three-utils@^0.49.0: + version "0.49.0" + resolved "https://registry.yarnpkg.com/troika-three-utils/-/troika-three-utils-0.49.0.tgz#3fbdbf8783740ce3c1f7acac642e7e957ea4f090" + integrity sha512-umitFL4cT+Fm/uONmaQEq4oZlyRHWwVClaS6ZrdcueRvwc2w+cpNQ47LlJKJswpqtMFWbEhOLy0TekmcPZOdYA== + +troika-worker-utils@^0.49.0: + version "0.49.0" + resolved "https://registry.yarnpkg.com/troika-worker-utils/-/troika-worker-utils-0.49.0.tgz#e5e200a09d2e0e4eb9fe818a83effa912e2ec4b4" + integrity sha512-1xZHoJrG0HFfCvT/iyN41DvI/nRykiBtHqFkGaGgJwq5iXfIZFBiPPEHFpPpgyKM3Oo5ITHXP5wM2TNQszYdVg== + ts-api-utils@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz" @@ -2191,6 +2576,13 @@ ts-interface-checker@^0.1.9: resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== +tunnel-rat@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tunnel-rat/-/tunnel-rat-0.1.2.tgz#1717efbc474ea2d8aa05a91622457a6e201c0aeb" + integrity sha512-lR5VHmkPhzdhrM092lI2nACsLO4QubF0/yoOhzX7c+wIpbN1GjHNzCc91QlpxBi+cnx8vVJ+Ur6vL5cEoQPFpQ== + dependencies: + zustand "^4.3.2" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" @@ -2238,6 +2630,16 @@ util-deprecate@^1.0.2: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +utility-types@^3.10.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.11.0.tgz#607c40edb4f258915e901ea7995607fdf319424c" + integrity sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== + +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + vite@^5.2.0: version "5.2.8" resolved "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz" @@ -2249,6 +2651,16 @@ vite@^5.2.0: optionalDependencies: fsevents "~2.3.3" +webgl-constants@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/webgl-constants/-/webgl-constants-1.1.1.tgz#f9633ee87fea56647a60b9ce735cbdfb891c6855" + integrity sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg== + +webgl-sdf-generator@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/webgl-sdf-generator/-/webgl-sdf-generator-1.1.1.tgz#3e1b422b3d87cd3cc77f2602c9db63bc0f6accbd" + integrity sha512-9Z0JcMTFxeE+b2x1LJTdnaT8rT8aEp7MVxkNwoycNmJWwPdzoXzMh0BjJSh/AEFP+KPYZUli814h8bJZFIZ2jA== + which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" @@ -2299,7 +2711,12 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zustand@^4.5.2: +zustand@^3.7.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.7.2.tgz#7b44c4f4a5bfd7a8296a3957b13e1c346f42514d" + integrity sha512-PIJDIZKtokhof+9+60cpockVOq05sJzHCriyvaLBmEJixseQ1a5Kdov6fWZfWOu5SK9c+FhH1jU0tntLxRJYMA== + +zustand@^4.3.2, zustand@^4.5.2: version "4.5.2" resolved "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz" integrity sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==