├── public
├── _redirects
├── robots.txt
├── favicon.ico
├── logo192.png
├── logo512.png
├── static
│ ├── filter-definition.json
│ ├── model-definition.json
│ └── component-definition.json
├── manifest.json
└── index.html
├── src
├── images
│ ├── footer.jpeg
│ ├── wknd-card.jpeg
│ ├── icon-close.svg
│ ├── Back.svg
│ ├── icon-loading.svg
│ └── wknd-logo-dk.svg
├── styles
│ ├── Poppins-Medium.ttf
│ ├── Poppins-Regular.ttf
│ ├── AktivGroteskCorp-Medium.woff
│ ├── AktivGroteskCorp-Regular.woff
│ ├── _fonts.scss
│ └── _variables.scss
├── index.css
├── index.jsx
├── utils
│ ├── commons.js
│ ├── fetchData.js
│ └── renderRichText.jsx
├── components
│ ├── base
│ │ ├── Error.jsx
│ │ ├── Loading.jsx
│ │ ├── Image.jsx
│ │ ├── Text.jsx
│ │ ├── Title.jsx
│ │ ├── Container.jsx
│ │ ├── Accordion.scss
│ │ └── Accordion.jsx
│ ├── About.jsx
│ ├── Articles.scss
│ ├── Home.scss
│ ├── Teaser.scss
│ ├── Home.jsx
│ ├── Teaser.jsx
│ ├── Adventures.scss
│ ├── Articles.jsx
│ ├── Adventures.jsx
│ ├── AdventureDetail.scss
│ ├── ArticleDetail.jsx
│ └── AdventureDetail.jsx
├── api
│ └── useGraphQL.js
├── App.jsx
├── logo.svg
└── App.scss
├── vite.config.js
├── vite.config.manual-ssl.js
├── .gitignore
├── index.html
├── package.json
├── README.md
└── yarn.lock
/public/_redirects:
--------------------------------------------------------------------------------
1 | /* /index.html 200
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adobe/universal-editor-sample-editable-app/HEAD/public/favicon.ico
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adobe/universal-editor-sample-editable-app/HEAD/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adobe/universal-editor-sample-editable-app/HEAD/public/logo512.png
--------------------------------------------------------------------------------
/src/images/footer.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adobe/universal-editor-sample-editable-app/HEAD/src/images/footer.jpeg
--------------------------------------------------------------------------------
/src/images/wknd-card.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adobe/universal-editor-sample-editable-app/HEAD/src/images/wknd-card.jpeg
--------------------------------------------------------------------------------
/src/styles/Poppins-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adobe/universal-editor-sample-editable-app/HEAD/src/styles/Poppins-Medium.ttf
--------------------------------------------------------------------------------
/src/styles/Poppins-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adobe/universal-editor-sample-editable-app/HEAD/src/styles/Poppins-Regular.ttf
--------------------------------------------------------------------------------
/src/styles/AktivGroteskCorp-Medium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adobe/universal-editor-sample-editable-app/HEAD/src/styles/AktivGroteskCorp-Medium.woff
--------------------------------------------------------------------------------
/src/styles/AktivGroteskCorp-Regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/adobe/universal-editor-sample-editable-app/HEAD/src/styles/AktivGroteskCorp-Regular.woff
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | }
4 |
5 | code {
6 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
7 | monospace;
8 | }
9 |
--------------------------------------------------------------------------------
/public/static/filter-definition.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": "container",
4 | "components": [
5 | "text", "image", "title", "accordion", "container", "richtext"
6 | ]
7 | },
8 | {
9 | "id": "accordion",
10 | "components": [
11 | "accordion-item"
12 | ]
13 | }
14 | ]
--------------------------------------------------------------------------------
/src/index.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 | import App from "./App";
4 | import "./index.css";
5 |
6 | const root = ReactDOM.createRoot(document.getElementById("root"));
7 | root.render(
8 |
9 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/src/images/icon-close.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 | import basicSsl from '@vitejs/plugin-basic-ssl'
4 |
5 | // https://vitejs.dev/config/
6 | export default defineConfig(({ command, mode }) => {
7 | return {
8 | plugins: [react(), basicSsl()],
9 | base: '/',
10 | server: {
11 | https: true,
12 | port: 3000,
13 | }
14 | }
15 | })
16 |
17 |
--------------------------------------------------------------------------------
/src/utils/commons.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Helper function to get the first adventure from the response
3 | * @param {*} response
4 | */
5 | function getArticle(data) {
6 | if (data && data.articleList && data.articleList.items) {
7 | // expect there only to be a single adventure in the array
8 | if (data.articleList.items.length === 1) {
9 | return data.articleList.items[0];
10 | }
11 | }
12 | return undefined;
13 | }
14 |
15 | export { getArticle };
--------------------------------------------------------------------------------
/src/components/base/Error.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 Adobe
3 | All Rights Reserved.
4 |
5 | NOTICE: Adobe permits you to use, modify, and distribute this file in
6 | accordance with the terms of the Adobe license agreement accompanying
7 | it.
8 | */
9 | import React from 'react';
10 |
11 | const Error = ({ errorMessage }) => (
12 |
13 | {`Error: ${errorMessage}`}
14 |
15 | );
16 |
17 | export default Error;
--------------------------------------------------------------------------------
/src/components/base/Loading.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 Adobe
3 | All Rights Reserved.
4 |
5 | NOTICE: Adobe permits you to use, modify, and distribute this file in
6 | accordance with the terms of the Adobe license agreement accompanying
7 | it.
8 | */
9 | import React from 'react';
10 | import loadingIcon from '../../images/icon-loading.svg';
11 |
12 | const Loading = () => (
13 |
14 |
15 |
16 | );
17 |
18 | export default Loading;
--------------------------------------------------------------------------------
/vite.config.manual-ssl.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 | import fs from 'fs'
4 | import path from 'path'
5 |
6 | // https://vitejs.dev/config/
7 | export default defineConfig({
8 | plugins: [react()],
9 | base: '/githubpages/',
10 | server: {
11 | https: {
12 | key: fs.readFileSync(path.resolve(__dirname, 'localhost-key.pem')),
13 | cert: fs.readFileSync(path.resolve(__dirname, 'localhost.pem')),
14 | },
15 | port: 3000,
16 | }
17 | })
18 |
19 |
--------------------------------------------------------------------------------
/src/images/Back.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | #auth_credentials
15 | /src/auth
16 |
17 | # misc
18 | .DS_Store
19 | .env.local
20 | .env.development.local
21 | .env.test.local
22 | .env.production.local
23 |
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 | .yalc
28 |
29 | # local Netlify folder
30 | .netlify
31 |
32 | # demo app
33 | auth/
34 | bin/
35 | lib/
36 | yalc.lock
37 | .idea/
38 |
39 | dist/
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/src/images/icon-loading.svg:
--------------------------------------------------------------------------------
1 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/src/components/About.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import image from '../images/wknd-card.jpeg';
3 |
4 | const About = () => (
5 |
6 |
About Us
7 |
8 |
The WKND is a fictional online magazine and adventure company that focuses
9 | on outdoor activities and trips across the globe. The WKND site is designed
10 | to demonstrate functionality for Adobe Experience Manager. There is also a
11 | corresponding tutorial that walks a developer through the development.
12 | Special thanks to Lorenzo Buosi and Kilian Amendola who created the
13 | beautiful design for the WKND site.
14 |
15 |
16 | );
17 |
18 | export default About;
19 |
--------------------------------------------------------------------------------
/src/components/Articles.scss:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2023 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | @import '../styles/variables';
9 |
10 | .articles {
11 | padding: 70px;
12 | text-align: left;
13 | max-width: $max-width;
14 | margin: 0 auto;
15 | }
16 | .article-item {
17 | list-style: none;
18 | column-gap: 30px;
19 | padding: 10px;
20 | display: flex;
21 | border-bottom: 1px solid #eee;
22 |
23 | &:nth-child(even) {
24 | flex-direction: row-reverse;
25 | }
26 |
27 | .article-item-image {
28 | max-width: 350px;
29 | max-height: 350px;
30 | }
31 |
32 | .article-content{
33 | align-self: flex-end;
34 | }
35 | }
36 | @media only screen and (max-width: $mobile-breakpoint) {
37 | .article-item {
38 | display:inherit;
39 | }
40 | }
--------------------------------------------------------------------------------
/src/components/base/Image.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022 Adobe
3 | All Rights Reserved.
4 |
5 | NOTICE: Adobe permits you to use, modify, and distribute this file in
6 | accordance with the terms of the Adobe license agreement accompanying
7 | it.
8 | */
9 | import React, {useEffect, useMemo} from 'react';
10 | import {fetchData, getImageURL} from '../../utils/fetchData';
11 |
12 | const Image = (props) => {
13 | const {resource, prop = "fileReference", type, className, data: initialData} = props;
14 |
15 | const editorProps = useMemo(() => true && {
16 | "data-aue-resource": resource,
17 | "data-aue-prop":prop,
18 | "data-aue-type": type,
19 | }, [resource, prop, type]);
20 |
21 | const [data,setData] = React.useState(initialData || {});
22 | useEffect(() => {
23 | if(!resource || !prop || initialData) return;
24 | fetchData(resource).then((data) => setData(data));
25 | }, [resource, prop, initialData]);
26 | const path = data?.["fileReference"];
27 |
28 | return (
29 |
30 | );
31 | };
32 |
33 | export default Image;
34 |
--------------------------------------------------------------------------------
/src/components/Home.scss:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2023 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | @import '../styles/variables';
9 |
10 | section {
11 | padding: 80px;
12 | text-align: center;
13 |
14 | .content {
15 | display: grid;
16 | align-items: start;
17 | padding-bottom: 20px;
18 | column-gap: 20px;
19 | max-width: $max-width;
20 | margin: 0 auto;
21 |
22 | h1 {
23 | margin-top: 0;
24 | text-align:left;
25 | }
26 |
27 | .container {
28 | text-align: left;
29 | }
30 | }
31 |
32 | &.about-us .content {
33 | grid-template-columns: 1fr 3fr;
34 | }
35 |
36 | &.newsletter {
37 | background-color: $lime;
38 | color: $black;
39 | .content {
40 | grid-template-columns: repeat(2,1fr);
41 | }
42 | }
43 |
44 | @media only screen and (max-width: $mobile-breakpoint) {
45 | .content {
46 | display: inherit;
47 | }
48 | }
49 | }
50 |
51 | @media only screen and (max-width: $tablet-breakpoint) {
52 | section {
53 | padding: $tablet-padding;
54 | }
55 | }
--------------------------------------------------------------------------------
/src/components/base/Text.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 Adobe
3 | All Rights Reserved.
4 |
5 | NOTICE: Adobe permits you to use, modify, and distribute this file in
6 | accordance with the terms of the Adobe license agreement accompanying
7 | it.
8 | */
9 | import React, {useEffect} from 'react';
10 | import {fetchData} from '../../utils/fetchData';
11 |
12 | const Text = (props) => {
13 | const {resource, prop = "text", type, className, data: initialData} = props;
14 | const [data,setData] = React.useState(initialData);
15 |
16 | const editorProps = {
17 | "data-aue-resource": resource,
18 | "data-aue-prop":prop,
19 | "data-aue-type": type,
20 | };
21 |
22 | useEffect(() => {
23 | if(!resource || !prop ) return;
24 | if(!data) { fetchData(resource).then((data) => setData(data)) };
25 | }, [resource, prop, data]);
26 |
27 |
28 | return data ? (
29 | type !== "richtext" ?(
30 |
31 | {data[prop]}
32 |
33 | ) :
34 | ): <>>;
35 | };
36 |
37 | export default Text;
38 |
--------------------------------------------------------------------------------
/src/images/wknd-logo-dk.svg:
--------------------------------------------------------------------------------
1 | Asset 2
--------------------------------------------------------------------------------
/src/styles/_fonts.scss:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022 Adobe. All rights reserved.
3 | * This file is licensed to you under the Apache License, Version 2.0 (the "License");
4 | * you may not use this file except in compliance with the License. You may obtain a copy
5 | * of the License at http://www.apache.org/licenses/LICENSE-2.0
6 | *
7 | * Unless required by applicable law or agreed to in writing, software distributed under
8 | * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9 | * OF ANY KIND, either express or implied. See the License for the specific language
10 | * governing permissions and limitations under the License.
11 | *
12 | */
13 |
14 | @font-face {
15 | font-family: 'Aktiv Grotesk';
16 | font-style: normal;
17 | font-display: swap;
18 | src: url(AktivGroteskCorp-Regular.woff) format('woff');
19 | }
20 |
21 | @font-face {
22 | font-family: 'Aktiv Grotesk Medium';
23 | font-style: normal;
24 | font-display: swap;
25 | src: url(AktivGroteskCorp-Medium.woff) format('woff');
26 | }
27 |
28 |
29 | @font-face {
30 | font-family: 'Poppins';
31 | font-style: normal;
32 | font-display: swap;
33 | src: url(Poppins-Regular.ttf);
34 | }
35 |
36 | @font-face {
37 | font-family: 'Poppins Medium';
38 | font-style: normal;
39 | font-display: swap;
40 | src: url(Poppins-Medium.ttf);
41 | }
42 |
--------------------------------------------------------------------------------
/public/static/model-definition.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "id": "text",
4 | "fields": [
5 | {
6 | "component": "text",
7 | "name": "text",
8 | "value": "Text",
9 | "label": "Text",
10 | "valueType": "string"
11 | }
12 | ]
13 | },
14 | {
15 | "id": "title",
16 | "fields": [
17 | {
18 | "component": "select",
19 | "name": "type",
20 | "value": "h1",
21 | "label": "Type",
22 | "valueType": "string",
23 | "options": [
24 | { "name": "h1", "value": "h1" },
25 | { "name": "h2", "value": "h2" },
26 | { "name": "h3", "value": "h3" },
27 | { "name": "h4", "value": "h4" },
28 | { "name": "h5", "value": "h5" },
29 | { "name": "h6", "value": "h6" }
30 | ]
31 | }
32 | ]
33 | },
34 | {
35 | "id": "richtext",
36 | "fields": [
37 | {
38 | "component": "richtext",
39 | "name": "text",
40 | "value": "Text",
41 | "label": "Text",
42 | "valueType": "string"
43 | }
44 | ]
45 | },
46 | {
47 | "id": "accordion-item",
48 | "fields": [
49 | {
50 | "component": "text",
51 | "name": "cq:panelTitle",
52 | "value": "",
53 | "label": "Accordion Item Title",
54 | "valueType": "string",
55 | "required": true
56 | }
57 | ]
58 | }
59 | ]
60 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | React App
16 |
27 |
28 |
29 |
30 | You need to enable JavaScript to run this app.
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/src/components/Teaser.scss:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2023 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | @import '../styles/variables';
9 |
10 | .Teaser {
11 | background-color: #141414;
12 | color: #FFFFFF;
13 | padding: 40px 80px 80px;
14 | display: grid;
15 | grid-template-columns: repeat(5, 1fr);
16 | align-items: center;
17 | text-align: left;
18 | max-width: 1280px;
19 | margin: 0 auto;
20 |
21 | article {
22 | grid-column: 1/3;
23 | grid-row: 1;
24 | z-index: 2;
25 | color: $white;
26 |
27 | > div {
28 | margin: 50px 0;
29 | display: -webkit-box;
30 | -webkit-line-clamp: 3;
31 | -webkit-box-orient: vertical;
32 | overflow: hidden;
33 | text-overflow: ellipsis;
34 | }
35 |
36 | .pill {
37 | border: 1px solid $white;
38 | }
39 |
40 | .pill:first-child {
41 | margin-right: 10px;
42 | }
43 | }
44 | img {
45 | border-radius: 16px;
46 | max-width: 100%;
47 | grid-column: span 3;
48 | grid-column: 2 / 6;
49 | grid-row: 1;
50 | opacity: 0.6;
51 | }
52 | }
53 |
54 | @media only screen and (max-width: $tablet-breakpoint) {
55 | .Teaser {
56 | padding: $tablet-padding;
57 | }
58 | }
59 |
60 | @media only screen and (max-width: $mobile-breakpoint) {
61 | .Teaser {
62 | display: flex;
63 | flex-direction: column-reverse;
64 | }
65 | }
--------------------------------------------------------------------------------
/src/components/base/Title.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022 Adobe
3 | All Rights Reserved.
4 |
5 | NOTICE: Adobe permits you to use, modify, and distribute this file in
6 | accordance with the terms of the Adobe license agreement accompanying
7 | it.
8 | */
9 | import React, {useEffect, useMemo} from 'react';
10 | import {fetchData} from '../../utils/fetchData';
11 |
12 | const Title = (props) => {
13 | const {resource, prop = "jcr:title", type, className = "test", data: initialData} = props;
14 | const editorProps = useMemo(() => true && {
15 | "data-aue-resource": resource,
16 | "data-aue-prop":prop,
17 | "data-aue-type": type,
18 | }, [resource, prop, type]);
19 |
20 | const [data,setData] = React.useState(initialData);
21 |
22 | useEffect(() => {
23 | if(!resource || !prop) return;
24 | if (!data) { fetchData(resource, "model").then((data) => setData(data)) };
25 | }, [resource, prop, data]);
26 |
27 | useEffect(() => {
28 | const handleUpdate = (e) => {
29 | const { itemids = [] } = e.detail;
30 | if(itemids.indexOf(resource) >= 0) {
31 | setData(null);
32 | }
33 | e.stopPropagation();
34 | };
35 | document.addEventListener("editor-update", handleUpdate);
36 | return () => {
37 | document.removeEventListener("editor-update", handleUpdate);
38 | }
39 | },[resource]);
40 |
41 | const TitleTag = data?.type ? `${data.type}` : "h1";
42 | return data ? (
43 | {data["jcr:title"] ?? "Default Title"}
44 | ):<>>;
45 | };
46 |
47 | export default Title;
48 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "universal-editor-sample-app",
3 | "version": "1.0.0",
4 | "private": true,
5 | "description": "Adobe Universal Editor Sample App",
6 | "author": "Adobe",
7 | "license": "Apache-2.0",
8 | "homepage": "https://github.com/adobe/universal-editor-sample-app",
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/adobe/universal-editor-sample-app.git"
12 | },
13 | "keywords": [
14 | "adobe",
15 | "universal-editor",
16 | "sample-app"
17 | ],
18 | "type": "module",
19 | "scripts": {
20 | "start": "vite",
21 | "build": "vite build",
22 | "preview": "vite preview",
23 | "deploy": "npm run build && gh-pages -d dist"
24 | },
25 | "dependencies": {
26 | "react": "^18.2.0",
27 | "react-dom": "^18.2.0",
28 | "react-router-dom": "^7.9.6",
29 | "sass": "^1.94.1"
30 | },
31 | "devDependencies": {
32 | "@adobe/aem-headless-client-js": "^4.0.0",
33 | "@adobe/aem-headless-client-nodejs": "^2.0.0",
34 | "@types/react": "^18.2.43",
35 | "@types/react-dom": "^18.2.17",
36 | "@vitejs/plugin-basic-ssl": "^2.1.0",
37 | "@vitejs/plugin-react": "^4.2.1",
38 | "gh-pages": "^6.1.0",
39 | "react-helmet-async": "^2.0.4",
40 | "vite": "^5.0.8"
41 | },
42 | "eslintConfig": {
43 | "extends": [
44 | "react-app",
45 | "react-app/jest"
46 | ]
47 | },
48 | "browserslist": {
49 | "production": [
50 | ">0.2%",
51 | "not dead",
52 | "not op_mini all"
53 | ],
54 | "development": [
55 | "last 1 chrome version",
56 | "last 1 firefox version",
57 | "last 1 safari version"
58 | ]
59 | },
60 | "engines": {
61 | "node": ">=20.0.0"
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/api/useGraphQL.js:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | import {useState, useEffect} from 'react';
9 | import {getAuthorHost} from "../utils/fetchData";
10 | import {AEMHeadless} from '@adobe/aem-headless-client-js';
11 |
12 |
13 | /**
14 | * Custom React Hook to perform a GraphQL query
15 | * @param path - Persistent query path
16 | */
17 | function useGraphQL(path) {
18 | let [data, setData] = useState(null);
19 | let [errorMessage, setErrors] = useState(null);
20 | useEffect(() => {
21 | function makeRequest() {
22 | const sdk = new AEMHeadless({
23 | serviceURL: getAuthorHost(),
24 | endpoint: "/content/graphql/global/endpoint.json",
25 | });
26 | const request = sdk.runPersistedQuery.bind(sdk);
27 |
28 | request(path, {}, {credentials: "include"})
29 | .then(({data, errors}) => {
30 | //If there are errors in the response set the error message
31 | if (errors) {
32 | setErrors(mapErrors(errors));
33 | }
34 | //If data in the response set the data as the results
35 | if (data) {
36 | setData(data);
37 | }
38 | })
39 | .catch((error) => {
40 | setErrors(error);
41 | sessionStorage.removeItem('accessToken');
42 | });
43 | }
44 |
45 | makeRequest();
46 | }, [path]);
47 |
48 |
49 | return {data, errorMessage}
50 | }
51 |
52 | /**
53 | * concatenate error messages into a single string.
54 | * @param {*} errors
55 | */
56 | function mapErrors(errors) {
57 | return errors.map((error) => error.message).join(",");
58 | }
59 |
60 | export default useGraphQL;
61 |
--------------------------------------------------------------------------------
/src/components/Home.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | import React from 'react';
9 | import { Link } from 'react-router-dom';
10 | import Container from './base/Container';
11 | import Title from './base/Title';
12 | import Text from './base/Text';
13 | import Teaser from './Teaser';
14 | import Adventures from './Adventures';
15 | import "./Home.scss";
16 |
17 | /***
18 | * Displays a grid of current adventures
19 | */
20 | function Home() {
21 | return (
22 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | Read more
38 |
39 |
40 |
41 | );
42 | }
43 |
44 | export default Home;
45 |
--------------------------------------------------------------------------------
/src/utils/fetchData.js:
--------------------------------------------------------------------------------
1 | export const fetchData = async (path) => {
2 | const url = `${getAuthorHost()}/${path.split(":/")[1]}.infinity.json`;
3 | const data = await fetch(url, {headers: {"X-Aem-Affinity-Type": "api"}, credentials: "include"});
4 | const json = await data.json();
5 | return json;
6 | };
7 | export const getAuthorHost = () => {
8 | const url = new URL(window.location.href);
9 | const searchParams = new URLSearchParams(url.search);
10 | if (searchParams.has("authorHost")) {
11 | return searchParams.get("authorHost");
12 | } else {
13 | return "https://author-p7452-e12433.adobeaemcloud.com";
14 | }
15 | }
16 |
17 | export const getImageURL = (obj) => {
18 | if (obj === null || obj === undefined) {
19 | return undefined;
20 | }
21 |
22 | if (typeof obj === "string") {
23 | if (obj.startsWith("https://")) {
24 | return obj;
25 | }
26 | return `${getAuthorHost()}${obj}`;
27 | }
28 |
29 | if (obj._authorUrl !== undefined) {
30 | return obj._authorUrl;
31 | }
32 |
33 | if (obj.repositoryId !== undefined && obj.assetId !== undefined) {
34 | return `https://${obj.repositoryId}/adobe/assets/${obj.assetId}`;
35 | }
36 |
37 | if (obj._path !== undefined) {
38 | return `${getAuthorHost()}${obj._path}`;
39 | }
40 |
41 | return undefined;
42 | }
43 |
44 | export const getProtocol = () => {
45 | const url = new URL(window.location.href);
46 | const searchParams = new URLSearchParams(url.search);
47 | if (searchParams.has("protocol")) {
48 | return searchParams.get("protocol");
49 | } else {
50 | return "aem";
51 | }
52 | }
53 |
54 | export const getService = () => {
55 | const url = new URL(window.location.href);
56 | const searchParams = new URLSearchParams(url.search);
57 | if (searchParams.has("service")) {
58 | return searchParams.get("service");
59 | }
60 | return null;
61 | }
62 |
63 |
--------------------------------------------------------------------------------
/src/styles/_variables.scss:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 Adobe
3 | All Rights Reserved.
4 |
5 | NOTICE: Adobe permits you to use, modify, and distribute this file in
6 | accordance with the terms of the Adobe license agreement accompanying
7 | it.
8 | */
9 | //_variables.scss
10 |
11 | //== Colors
12 | //
13 | //## Gray and brand colors for use across theme.
14 |
15 | $black: #141414;
16 | $gray: #696969;
17 | $gray-light: #EBEBEB;
18 | $gray-lighter: #F7F7F7;
19 | $white: #FFFFFF;
20 | $yellow: #FFEA00;
21 | $blue: #0045FF;
22 | $red: #ff0048;
23 | $lime: #DBFF00;
24 | //== Typography
25 | //
26 | //## Font, line-height, and color for body text, headings, and more.
27 |
28 | $font-family-sans-serif: "Poppins", "Aktiv Grotesk Medium", sans-serif;
29 | $font-family-serif: "Asar",Georgia, "Times New Roman", Times, serif;
30 | $font-family-base: system-ui;
31 |
32 | $font-size-xsmall: 12px;
33 | $font-size-small: 14px;
34 | $font-size-medium: 16px;
35 | $font-size-base: 1rem;
36 | $font-size-large: 24px;
37 | $font-size-xlarge: 48px;
38 |
39 | $font-size-h1: 48px;
40 | $font-size-h2: 36px;
41 | $font-size-h3: 28px;
42 | $font-size-h4: 16px;
43 | $font-size-h5: 14px;
44 | $font-size-h6: 10px;
45 |
46 | $font-weight-normal: normal;
47 | $font-weight-bold: 600;
48 |
49 | $line-height-base: 1.1;
50 | $line-height-computed: floor(($font-size-base * $line-height-base));
51 |
52 | // Functional Colors
53 | $brand-primary: $yellow;
54 | $body-bg: $white;
55 | $text-color: $black;
56 | $text-color-inverse: $gray-light;
57 | $link-color: $blue;
58 | $button-color: $lime;
59 | //Layout
60 | $max-width: 1280px;
61 |
62 | // Spacing
63 | $gutter-padding: 12px;
64 |
65 | // Breakpoints
66 | $mobile-breakpoint: 768px;
67 | $tablet-breakpoint: 1024px;
68 |
69 | $tablet-padding: 40px;
--------------------------------------------------------------------------------
/src/components/Teaser.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2023 Adobe
3 | All Rights Reserved.
4 |
5 | NOTICE: Adobe permits you to use, modify, and distribute this file in
6 | accordance with the terms of the Adobe license agreement accompanying
7 | it.
8 | */
9 | import React from 'react';
10 | import { Link } from 'react-router-dom';
11 | import useGraphQL from '../api/useGraphQL';
12 | import { getArticle } from '../utils/commons';
13 | import { mapJsonRichText } from '../utils/renderRichText';
14 | import Loading from './base/Loading';
15 | import "./Teaser.scss";
16 | import {getImageURL} from "../utils/fetchData";
17 |
18 | const Teaser = () => {
19 | const persistentQuery = `wknd-shared/article-by-slug;slug=aloha-spirits-in-northern-norway`;
20 | const {data, errorMessage} = useGraphQL(persistentQuery);
21 | //If there is an error with the GraphQL query
22 | if (errorMessage) return;
23 |
24 | //If query response is null then return a loading icon...
25 | if (!data) return ;
26 |
27 | const article = getArticle(data);
28 | if(!article) return <>>
29 | const { title, _path, featuredImage, main } = article;
30 |
31 | const editorProps = {
32 | "data-aue-resource": "urn:aemconnection:" + _path + "/jcr:content/data/master",
33 | "data-aue-type": "reference",
34 | "data-aue-filter": "cf",
35 | "data-aue-label": "Hero Teaser"
36 | };
37 |
38 | return (
39 |
40 |
41 |
42 | Latest article
43 | {title}
44 | {main && {mapJsonRichText(main.json)}
}
45 |
46 | Read more
47 |
48 |
49 | {featuredImage && }
50 |
51 |
52 | );
53 | }
54 |
55 | export default Teaser;
56 |
57 |
--------------------------------------------------------------------------------
/src/components/base/Container.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {fetchData} from '../../utils/fetchData';
3 | import Text from './Text';
4 | import Title from './Title';
5 | import Image from './Image';
6 | import Accordion from './Accordion';
7 |
8 | const Container = ({ resource, type, label = "Container"}) => {
9 | const [components, setComponents] = React.useState(null);
10 |
11 | const createChildComponents = (items, itemid) => {
12 | const components = [];
13 | for(let key in items) {
14 | const item = items[key];
15 | const type = item["sling:resourceType"]?.split("/").pop();
16 | if (type === undefined) {
17 | continue;
18 | }
19 |
20 | let itemType, Component;
21 | switch(type) {
22 | case "image":
23 | itemType = "media";
24 | Component = Image;
25 | break;
26 | case "text":
27 | itemType = item.textIsRich ? "richtext" : "text";
28 | Component = item.type ? Title : Text;
29 | break;
30 | case "title":
31 | itemType = "text";
32 | Component = Title;
33 | break;
34 | case "accordion":
35 | itemType = "container";
36 | Component = Accordion;
37 | break;
38 | case "container":
39 | itemType = "container";
40 | Component = Container;
41 | break;
42 | default:
43 | itemType = "component";
44 | Component = () => (
);
45 | break;
46 | }
47 |
48 | const props = {
49 | resource: `${itemid}/${key}`,
50 | type: itemType,
51 | data: item,
52 | };
53 | components.push( )
54 | }
55 | return components;
56 | }
57 |
58 | React.useEffect(() => {
59 | if(!resource) return;
60 | fetchData(resource).then((data) => {
61 | setComponents(createChildComponents(data, resource));
62 | });
63 | }, [resource]);
64 |
65 | return (
66 |
67 | {components}
68 |
69 | )
70 | };
71 |
72 | export default Container;
--------------------------------------------------------------------------------
/src/App.jsx:
--------------------------------------------------------------------------------
1 | import {React} from "react";
2 | import { Helmet, HelmetProvider } from 'react-helmet-async';
3 | import {BrowserRouter as Router, Route, Routes} from "react-router-dom";
4 | import Home from "./components/Home";
5 | import AdventureDetail from "./components/AdventureDetail";
6 | import Articles from "./components/Articles";
7 | import ArticleDetail from "./components/ArticleDetail";
8 | import About from "./components/About";
9 | import {getAuthorHost, getProtocol, getService} from "./utils/fetchData";
10 | import logo from "./images/wknd-logo-dk.svg";
11 | import "./App.scss";
12 |
13 | const NavMenu = () => (
14 |
15 |
20 |
21 | );
22 |
23 | const Header = () => {
24 | return (
25 | {/* */}
26 |
27 |
28 | Sign in
29 |
30 | );
31 | };
32 |
33 | const Footer = () => (
34 |
35 |
36 |
37 | Copyright © 2023 Adobe. All rights reserved
38 |
39 | );
40 |
41 | function App() {
42 | return (
43 |
44 |
45 |
46 |
47 | { getService() && }
48 |
49 |
50 |
51 |
52 |
53 |
54 | } />
55 | } />
56 | } />
57 | } />
58 | } />
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | );
67 | }
68 |
69 | export default App;
70 |
--------------------------------------------------------------------------------
/src/components/Adventures.scss:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | @import '../styles/variables';
9 |
10 | $adventureItemWidth: 420px;
11 | $adventureItemHeight: 360px;
12 |
13 | $adventureItemWidthMobile: 300px;
14 | $adventureItemHeightMobile: 250px;
15 |
16 |
17 | .adventures {
18 | padding: 70px;
19 | background-color: $white;
20 | color: $black;
21 | text-align: left;
22 |
23 | & > h1 {
24 | padding-bottom: 40px;
25 | }
26 |
27 | & > h1, &> ul {
28 | max-width: $max-width;
29 | margin: 0 auto;
30 | }
31 | }
32 |
33 | .adventure-items {
34 | display: grid;
35 | grid-template-columns: repeat(3, 1fr);
36 | list-style: none;
37 | grid-column-gap: 40px;
38 | }
39 |
40 | .adventure-item {
41 | margin: 0 0 2rem;
42 | }
43 |
44 | .adventure-image-card {
45 | .adventure-item-image {
46 | border-radius: 8px;
47 | width: 100%;
48 | aspect-ratio: 5/4;
49 | object-fit: cover;
50 | object-position: center;
51 | overflow: hidden;
52 | }
53 | }
54 |
55 | .adventure-item-title {
56 | margin-bottom: 5px;
57 | text-transform: capitalize;
58 | font-weight: 500;
59 | line-height: 41px;
60 | }
61 |
62 | .adventure-item-details {
63 | display: flex;
64 | justify-content: flex-start;
65 | column-gap: 8px;
66 |
67 | > div {
68 | display: flex;
69 | align-items: center;
70 | }
71 |
72 | > :not(.adventure-item-price) {
73 | text-transform: capitalize;
74 | }
75 |
76 | .adventure-item-price{
77 | background: $black;
78 | color: $white;
79 | }
80 | }
81 |
82 |
83 | .card {
84 | padding: 20px 10px;
85 | border-radius: 4px;
86 | font-family: sans-serif;
87 | display: flex;
88 | line-height: 1.5em;
89 | img {
90 | width: 400px;
91 | margin: 0 20px;
92 | }
93 | button {
94 | margin-top: 10px;
95 | }
96 | }
97 |
98 | @media only screen and (max-width: $tablet-breakpoint) {
99 | .adventures {
100 | padding: $tablet-padding;
101 | }
102 |
103 | .adventure-items {
104 | grid-template-columns: repeat(2, 1fr);
105 | }
106 | }
107 |
108 | @media only screen and (max-width: $mobile-breakpoint) {
109 | .adventure-items {
110 | grid-template-columns: 1fr;
111 | }
112 | }
--------------------------------------------------------------------------------
/src/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
16 |
17 |
26 |
27 |
28 |
29 | React App
30 |
41 |
42 |
43 |
44 | You need to enable JavaScript to run this app.
45 |
46 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/src/components/base/Accordion.scss:
--------------------------------------------------------------------------------
1 | .accordion {
2 | width: 100%;
3 | border-radius: 8px;
4 | overflow: hidden;
5 | }
6 |
7 | .accordion-item {
8 | border: 1px solid #e0e0e0;
9 | border-bottom: none;
10 | transition: all 0.3s ease;
11 |
12 | &:last-child {
13 | border-bottom: 1px solid #e0e0e0;
14 | }
15 |
16 | &:hover {
17 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
18 | }
19 | }
20 |
21 | .accordion-item-title {
22 | display: flex;
23 | justify-content: space-between;
24 | align-items: center;
25 | padding: 16px 20px;
26 | cursor: pointer;
27 | user-select: none;
28 | background: #fff;
29 | transition: background-color 0.2s ease;
30 |
31 | &:hover {
32 | background-color: #f5f5f5;
33 | }
34 |
35 | h3 {
36 | margin: 0;
37 | font-size: 18px;
38 | font-weight: 500;
39 | color: #333;
40 | flex: 1;
41 | }
42 | }
43 |
44 | .accordion-item-icon {
45 | display: flex;
46 | align-items: center;
47 | justify-content: center;
48 | width: 24px;
49 | height: 24px;
50 | margin-left: 12px;
51 | transition: transform 0.3s ease;
52 | color: #666;
53 |
54 | svg {
55 | display: block;
56 | }
57 | }
58 |
59 | .accordion-item.is-open .accordion-item-icon {
60 | transform: rotate(180deg);
61 | }
62 |
63 | .accordion-item-content {
64 | max-height: 0;
65 | overflow: hidden;
66 | transition: max-height 0.3s ease;
67 | }
68 |
69 | .accordion-item.is-open .accordion-item-content {
70 | max-height: 2000px; /* Adjust based on your content needs */
71 | }
72 |
73 | .accordion-item-content-inner {
74 | padding: 20px 20px 20px 20px;
75 | }
76 |
77 | /* Optional: Add animation for smooth expansion */
78 | @media (prefers-reduced-motion: no-preference) {
79 | .accordion-item-content {
80 | transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
81 | }
82 | }
83 |
84 | /* Dark mode support (optional) */
85 | @media (prefers-color-scheme: dark) {
86 | .accordion-item {
87 | border-color: #424242;
88 | background: #2d2d2d;
89 | }
90 |
91 | .accordion-item-title {
92 | background: #2d2d2d;
93 |
94 | &:hover {
95 | background-color: #3a3a3a;
96 | }
97 |
98 | h3 {
99 | color: #e0e0e0;
100 | }
101 | }
102 |
103 | .accordion-item-icon {
104 | color: #b0b0b0;
105 | }
106 | }
107 |
108 | /* Adobe Universal Editor: Open all accordion items in edit mode */
109 | html.adobe-ue-edit {
110 | .accordion-item {
111 | .accordion-item-content {
112 | max-height: none !important;
113 | }
114 |
115 | .accordion-item-icon {
116 | transform: rotate(180deg);
117 | }
118 |
119 | .accordion-item-title {
120 | cursor: default;
121 | pointer-events: none;
122 | }
123 | }
124 | }
125 |
126 |
--------------------------------------------------------------------------------
/src/components/Articles.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 Adobe
3 | All Rights Reserved.
4 |
5 | NOTICE: Adobe permits you to use, modify, and distribute this file in
6 | accordance with the terms of the Adobe license agreement accompanying
7 | it.
8 | */
9 | import React from 'react';
10 | import useGraphQL from '../api/useGraphQL';
11 | import {Link} from 'react-router-dom';
12 | import Error from './base/Error';
13 | import Loading from './base/Loading';
14 | import "./Articles.scss";
15 | import { mapJsonRichText } from '../utils/renderRichText';
16 | import {getImageURL} from "../utils/fetchData";
17 |
18 | const Article = ({_path, title, synopsis, authorFragment, slug}) => {
19 | const editorProps = {
20 | "data-aue-resource": "urn:aemconnection:" + _path + "/jcr:content/data/master",
21 | "data-aue-type": "reference",
22 | "data-aue-filter": "cf"
23 | };
24 | return (
25 |
26 |
27 |
30 |
31 |
32 |
33 | {title}
34 |
35 |
36 | {`By ${authorFragment.firstName} ${authorFragment.lastName}`}
37 | { synopsis &&
38 |
39 | {mapJsonRichText(synopsis.json)}
40 |
41 | }
42 |
43 | Read more
44 |
45 |
46 |
47 |
48 | );
49 | };
50 |
51 | const Articles = () => {
52 | const persistentQuery = 'wknd-shared/articles-all';
53 |
54 | //Use a custom React Hook to execute the GraphQL query
55 | const { data, errorMessage } = useGraphQL(persistentQuery);
56 |
57 | //If there is an error with the GraphQL query
58 | if(errorMessage) return ;
59 |
60 | //If data is null then return a loading state...
61 | if(!data) return ;
62 |
63 | return (
64 |
65 | Articles
66 |
67 | {
68 | data.articleList.items.map((article, index) => {
69 | return (
70 |
71 | );
72 | })
73 | }
74 |
75 |
76 | );
77 |
78 | };
79 |
80 | export default Articles;
81 |
82 |
83 |
84 |
85 |
86 |
--------------------------------------------------------------------------------
/src/components/base/Accordion.jsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Container from './Container';
3 | import './Accordion.scss';
4 |
5 | const AccordionItem = (props) => {
6 | const {resource, data, isOpen, onToggle} = props;
7 |
8 | return(
9 |
10 |
11 |
{data["cq:panelTitle"]}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
23 |
24 | );
25 | }
26 |
27 |
28 | const Accordion = (props) => {
29 | const {resource, type, data} = props;
30 | const [items, setItems] = React.useState([]);
31 | const [openItems, setOpenItems] = React.useState(new Set());
32 |
33 | React.useEffect(() => {
34 | if(!data) return;
35 | const itemKeys = Object.keys(data).filter((item) => {
36 | return data[item]["sling:resourceType"] === "wknd/components/container";
37 | });
38 | setItems(itemKeys);
39 |
40 | // Optionally open the first item by default
41 | if (itemKeys.length > 0) {
42 | setOpenItems(new Set([0]));
43 | }
44 | }, [resource, type, data]);
45 |
46 | const toggleItem = (index) => {
47 | setOpenItems(prev => {
48 | const newSet = new Set(prev);
49 | if (newSet.has(index)) {
50 | newSet.delete(index);
51 | } else {
52 | newSet.add(index);
53 | }
54 | return newSet;
55 | });
56 | };
57 |
58 | return (
59 |
60 | {items.map((item, index) => (
61 |
toggleItem(index)}
68 | />
69 | ))}
70 |
71 | )
72 | }
73 |
74 | export default Accordion;
75 |
--------------------------------------------------------------------------------
/public/static/component-definition.json:
--------------------------------------------------------------------------------
1 | {
2 | "groups": [
3 | {
4 | "title": "General Components",
5 | "id": "general",
6 | "components": [
7 | {
8 | "title": "Text",
9 | "id": "text",
10 | "model": "text",
11 | "plugins": {
12 | "aem": {
13 | "page": {
14 | "resourceType": "wknd/components/text",
15 | "template": {
16 | "text": "Default Text"
17 | }
18 | }
19 | }
20 | }
21 | },
22 | {
23 | "title": "Title",
24 | "id": "title",
25 | "model": "title",
26 | "plugins": {
27 | "aem": {
28 | "page": {
29 | "resourceType": "wknd/components/title",
30 | "template": {
31 | "jcr:title": "Default Title"
32 | }
33 | }
34 | }
35 | }
36 | },
37 | {
38 | "title": "Image",
39 | "id": "image",
40 | "plugins": {
41 | "aem": {
42 | "page": {
43 | "resourceType": "wknd/components/image",
44 | "template": {
45 | "fileReference": "/content/dam/wknd-shared/en/magazine/arctic-surfing/camp-tent.jpg"
46 | }
47 | }
48 | }
49 | }
50 | },
51 | {
52 | "title": "Container",
53 | "id": "container",
54 | "filter": "container",
55 | "plugins": {
56 | "aem": {
57 | "page": {
58 | "resourceType": "wknd/components/container"
59 | }
60 | }
61 | }
62 | },
63 | {
64 | "title": "Accordion Item",
65 | "id": "accordion-item",
66 | "model": "accordion-item",
67 | "plugins": {
68 | "aem": {
69 | "page": {
70 | "resourceType": "wknd/components/container"
71 | }
72 | }
73 | }
74 | }
75 | ]
76 | },
77 | {
78 | "title": "Advanced Components",
79 | "id": "advanced",
80 | "components": [
81 | {
82 | "title": "Rich Text",
83 | "id": "richtext",
84 | "model": "richtext",
85 | "plugins": {
86 | "aem": {
87 | "page": {
88 | "resourceType": "wknd/components/text",
89 | "template": {
90 | "textIsRich": true,
91 | "text": "Default Richtext
"
92 | }
93 | }
94 | }
95 | }
96 | },
97 | {
98 | "title": "Accordion",
99 | "id": "accordion",
100 | "model": "accordion",
101 | "filter": "accordion",
102 | "plugins": {
103 | "aem": {
104 | "page": {
105 | "resourceType": "wknd/components/accordion"
106 | }
107 | }
108 | }
109 | }
110 | ]
111 | }
112 | ]
113 | }
114 |
--------------------------------------------------------------------------------
/src/components/Adventures.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | import React from 'react';
9 | import {Link} from 'react-router-dom';
10 | import useGraphQL from '../api/useGraphQL';
11 | import Loading from './base/Loading';
12 | import "./Adventures.scss";
13 | import Title from './base/Title';
14 | import {getImageURL} from "../utils/fetchData";
15 |
16 | function AdventureItem(props) {
17 | const editorProps = {
18 | "data-aue-resource": "urn:aemconnection:" + props?._path + "/jcr:content/data/master",
19 | "data-aue-type": "reference",
20 | "data-aue-filter": "cf",
21 | "data-aue-label": "Adventure: " + props.title
22 | };
23 |
24 | //Must have title, path, and image
25 | if(!props || !props._path || !props.title || !props.primaryImage ) {
26 | return null;
27 | }
28 |
29 | return (
30 |
31 |
32 |
33 |
35 |
36 |
37 | {props.title}
38 |
39 |
40 | {props.tripLength?.toLowerCase()}
43 |
44 |
45 |
$
46 | {props.price}
49 |
50 |
51 |
52 |
53 | );
54 | }
55 |
56 | function Adventures() {
57 | const persistentQuery = 'wknd-shared/adventures-all';
58 | //Use a custom React Hook to execute the GraphQL query
59 | const { data, errorMessage } = useGraphQL(persistentQuery);
60 |
61 | //If there is an error with the GraphQL query
62 | if(errorMessage) return;
63 |
64 | //If data is null then return a loading state...
65 | if(!data) return ;
66 |
67 | return (
68 |
69 |
70 |
71 | {
72 | //Iterate over the returned data items from the query
73 | data.adventureList.items.map((adventure, index) => {
74 | return (
75 |
76 | );
77 | })
78 | }
79 |
80 |
81 | );
82 | }
83 |
84 | export default Adventures;
85 |
--------------------------------------------------------------------------------
/src/components/AdventureDetail.scss:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | @use "sass:math";
9 |
10 | @import '../styles/variables';
11 |
12 | .adventure-detail {
13 | padding: 0 80px;
14 | background: $white;
15 | color: $black;
16 | button.dark {
17 | border: none;
18 | color: inherit;
19 | padding: 0;
20 | }
21 |
22 | .adventure-detail-header {
23 | display: flex;
24 | justify-content: space-between;
25 | flex-flow: wrap;
26 | align-items: center;
27 | row-gap: 40px;
28 | padding-bottom: 40px;
29 | .adventure-detail-back-nav {
30 | width: 24px;
31 | flex-basis: 100%;
32 | text-align: left;
33 | display: flex;
34 | align-items: center;
35 | column-gap: 15px;
36 | }
37 | }
38 | > div {
39 | max-width: $max-width;
40 | margin: 0 auto;
41 | }
42 | }
43 |
44 |
45 |
46 | .adventure-detail-content, .adventure-detail-header {
47 | padding: 40px 20%;
48 | }
49 |
50 | .adventure-detail-content {
51 | .adventure-detail-info {
52 | display: flex;
53 | background: $lime;
54 | border-radius: 16px;
55 | align-items: flex-start;
56 | padding: 24px 40px;
57 | column-gap: 80px;
58 | justify-content: space-evenly;
59 | margin: 40px 0;
60 | }
61 | h6 {
62 | color: rgba(0, 0, 0, 0.4);
63 | font-size: 12px;
64 | text-transform: inherit;
65 | margin: 0 0 8px 0;
66 | }
67 | span {
68 | line-height: 24px;
69 | }
70 | }
71 | .adventure-detail-title {
72 | margin: 0;
73 | }
74 |
75 | .adventure-detail-content h2 {
76 | margin-top: 32px;
77 | padding: 0px;
78 | }
79 |
80 | .adventure-detail-primaryimage {
81 | margin: 0 auto;
82 | border-radius: 16px;
83 | aspect-ratio: 16/8;
84 | width: 100%;
85 | }
86 |
87 | .adventure-detail-itinerary h2 {
88 | font-family: $font-family-base;
89 | font-weight: bold;
90 | font-size: $font-size-large;
91 | }
92 |
93 | @media only screen and (max-width: $mobile-breakpoint) {
94 | .adventure-detail-content {
95 | .adventure-detail-info {
96 | flex-direction: column;
97 | align-items: flex-start;
98 | row-gap: 10px;
99 | }
100 | }
101 | }
102 |
103 | @media only screen and (max-width: $tablet-breakpoint) {
104 | .adventure-detail-content, .adventure-detail-header {
105 | padding: 40px 0;
106 | }
107 | }
108 |
109 | /* Contributer Styles */
110 | $contributor-image-size: 60px;
111 |
112 | .contributor {
113 | width: 100%;
114 | float: left;
115 | margin: 20px 0;
116 | &-image {
117 | width: $contributor-image-size;
118 | height: $contributor-image-size;
119 | border-radius: math.div($contributor-image-size, 2);
120 | object-fit: cover;
121 | float: left;
122 | }
123 |
124 | &-name {
125 | margin-left: $contributor-image-size + 20px;
126 | font-family: $font-family-serif;
127 | }
128 |
129 | &-occupation {
130 | margin-left: $contributor-image-size + 20px;
131 | margin-top: 0em;
132 | }
133 |
134 | &-separator {
135 | border-width: 1px solid $gray-light;
136 | margin-top: 2em;
137 | margin-bottom: 2em;
138 | }
139 |
140 | }
--------------------------------------------------------------------------------
/src/components/ArticleDetail.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | import React from 'react';
9 | import {Link, useNavigate, useParams} from "react-router-dom";
10 | import backIcon from '../images/Back.svg';
11 | import Error from './base/Error';
12 | import Loading from './base/Loading';
13 | import {mapJsonRichText} from '../utils/renderRichText';
14 | import './AdventureDetail.scss';
15 | import useGraphQL from '../api/useGraphQL';
16 | import {getArticle} from '../utils/commons';
17 | import {getImageURL} from "../utils/fetchData";
18 |
19 | function ArticleDetail({article}) {
20 |
21 | // params hook from React router
22 | const {slug} = useParams();
23 | const navigate = useNavigate();
24 | const articleSlug = slug || article;
25 |
26 | const persistentQuery = `wknd-shared/article-by-slug;slug=${articleSlug}`;
27 |
28 | //Use a custom React Hook to execute the GraphQL query
29 | const {data, errorMessage} = useGraphQL(persistentQuery);
30 |
31 | //If there is an error with the GraphQL query
32 | if (errorMessage) return ;
33 |
34 | //If query response is null then return a loading icon...
35 | if (!data) return ;
36 |
37 | //Set adventure properties variable based on graphQL response
38 | const currentArticle = getArticle(data);
39 |
40 | //Must have title, path, and image
41 | if (!currentArticle) {
42 | return ;
43 | }
44 |
45 | const editorProps = {
46 | "data-aue-resource": "urn:aemconnection:" + currentArticle._path + "/jcr:content/data/master",
47 | "data-aue-type": "reference",
48 | "data-aue-filter": "cf"
49 | };
50 |
51 | return ();
62 | }
63 |
64 | function ArticleDetailRender({
65 | _path, title,
66 | featuredImage, slug,
67 | main,
68 | authorFragment
69 | }) {
70 |
71 |
72 | return (
73 |
75 |
76 |
{mapJsonRichText(main.json)}
77 |
78 |
79 | );
80 | }
81 |
82 | function NoArticleFound() {
83 | return (
84 |
85 |
86 |
87 |
88 |
89 |
90 | );
91 | }
92 |
93 | export default ArticleDetail;
94 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Adobe Universal Editor Sample App
2 |
3 | ## Using the Sample App
4 | The Sample App is hosted at https://ue-remote-app.adobe.net.
5 | Per Default the content is retrieved and written back to the Adobe Experience Manager as a Cloud Service ( Production ) Demo Environment:
6 |
7 | The default settings from [.env](.env) can be overwritten using Query parameters:
8 | * `authorHost`: host to retrieve data from and update content to; default=https://author-p7452-e12433.adobeaemcloud.com
9 | * `service`: Universal Editor Service endpoint; default Universal Editor default
10 | * `protocol`: protocol to use with backend, can be `aem`, `aem65`, `aemcsLegacy`; default: `aem`
11 | * `cors`: defining which cors.js - connection between Universal Editor and application shall be used. Can be `stage` or empty; default `null/empty`. `stage` will use the cors library hosted on stage, else it will use the production version
12 |
13 | To retrieve content from another environment add `authorHost` as query parameters, e.g.
14 |
15 | [https://ue-remote-app.adobe.net?authorHost=https://author-p7452-e12433.adobeaemcloud.com](https://ue-remote-app.adobe.net?authorHost=https://author-p7452-e12433.adobeaemcloud.com)
16 |
17 | Similarly, if running the Universal Editor App on local dev environment, add `authorHost` as query parameters like this:
18 |
19 | [https://localhost:3000?authorHost=https://localhost:8443&service=https://localhost:8443/universal-editor](https://localhost:3000?authorHost=https://localhost:8443&service=https://localhost:8443/universal-editor)
20 |
21 | ## Run locally
22 |
23 | - AEM 6.5 or AEMCS instance
24 | - Latest WKND Content installed on the AEM instance[https://github.com/adobe/aem-guides-wknd/releases/latest](https://github.com/adobe/aem-guides-wknd/releases/latest)
25 | - AEM configured to run on HTTPS [https://experienceleague.adobe.com/en/docs/experience-manager-learn/foundation/security/use-the-ssl-wizard](https://experienceleague.adobe.com/en/docs/experience-manager-learn/foundation/security/use-the-ssl-wizard)
26 | - `Adobe Granite Token Authentication Handler` configured to set `token.samesite.cookie.attr=Partitioned`
27 | - Remove `X-FRAME-Options=SAMEORIGIN` from `Apache Sling Main Servlet`'s `sling.additional.response.headers` attribute if run locally
28 | - Add policy for `https://localhost:3000` to `Adobe Granite Cross-Origin Resource Sharing Policy`. The default `adobe` configuraiton can be used as blueprint if run local copy of the app
29 | - Follow configuration on [https://github.com/maximilianvoss/universal-editor-service-proxy](https://github.com/maximilianvoss/universal-editor-service-proxy) for local development set up
30 | - Open Universal Editor either
31 | - under AEM domain for AEMCS, e.g. [https://author-p7452-e12433.adobeaemcloud.com/ui#/aem/universal-editor/canvas/](https://author-p7452-e12433.adobeaemcloud.com/ui#/aem/universal-editor/canvas/)
32 | - or on [https://experience.adobe.com/#/aem/editor/canvas/](https://experience.adobe.com/#/aem/editor/canvas/)
33 | - For experience.adobe.com use the `Local Developer Login` to authenticate against your local AEM instance when using a local SDK or AEM 6.5
34 |
35 | ## Available Scripts
36 |
37 | In the project directory, you can run:
38 |
39 | ### `yarn start`
40 |
41 | Runs the app in the development mode.\
42 | Open [https://localhost:3000](https://localhost:3000) to view it in your browser.
43 |
44 | The page will reload when you make changes.\
45 | You may also see any lint errors in the console.
46 |
47 | ### `yarn build`
48 |
49 | Builds the app for production to the `dist` folder.
50 |
51 | ### `yarn preview`
52 |
53 | Run the built app in production mode locally to verify the build.
54 |
55 | ### `yarn deploy`
56 |
57 | Build the application and push it to GitHub pages
--------------------------------------------------------------------------------
/src/App.scss:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2020 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | /* Normalize */
9 | @import './styles/variables';
10 | @import './styles/fonts';
11 |
12 | body {
13 | background-color: $black;
14 | font-family: $font-family-base;
15 | margin: 0;
16 | padding: 0;
17 | font-size: $font-size-base;
18 | text-align: left;
19 | color: $white;
20 | line-height: $line-height-base;
21 | }
22 |
23 | // Headings
24 | // -------------------------
25 |
26 | h1, h2, h3, h4, h5, h6,
27 | .h1, .h2, .h3, .h4, .h5, .h6 {
28 | line-height: $line-height-base;
29 | font-weight: 500;
30 | }
31 |
32 | h1, .h1,
33 | h2, .h2,
34 | h3, .h3 {
35 | margin-top: $line-height-computed;
36 | margin-bottom: calc($line-height-computed / 2);
37 | }
38 |
39 | h1, .h1 { font-size: $font-size-h1; }
40 | h2, .h2 { font-size: $font-size-h2; }
41 | h3, .h3 { font-size: $font-size-h3; }
42 | h4, .h4 { font-size: $font-size-h4; }
43 | h5, .h5 { font-size: $font-size-h5; }
44 | h6, .h6 { font-size: $font-size-h6; }
45 |
46 | a {
47 | text-decoration: none;
48 | }
49 |
50 | h1 a, h2 a, h3 a {
51 | color: $text-color;
52 | }
53 |
54 | h1 u, h2 u, h3 u {
55 | text-decoration: none;
56 | border-bottom: 1px #ededed solid;
57 | }
58 |
59 | // Body text
60 | // -------------------------
61 |
62 | p {
63 | margin: 0 0 calc($line-height-computed / 2);
64 | font-size: $font-size-base;
65 | line-height: $line-height-base + 0.75;
66 | text-align: justify;
67 | }
68 |
69 | a {
70 | cursor: pointer;
71 | }
72 |
73 | ul {
74 | list-style-position: inside;
75 | }
76 |
77 | ol, ul {
78 | padding-left: 0;
79 | margin-bottom: 0;
80 | list-style: none;
81 | }
82 |
83 | hr {
84 | border: none;
85 | border-bottom: 1px solid $gray;
86 | margin: 0;
87 | }
88 |
89 | button {
90 | background-color: $button-color;
91 | color: $black;
92 | padding: 12px 40px;
93 | font-size: $font-size-base;
94 | font-family: $font-family-base;
95 | border: 1px solid $black;
96 | border-radius: 4px;
97 | min-width: 4rem;
98 | margin-right: 1rem;
99 | cursor: pointer;
100 |
101 | &:hover {
102 | background-color: #C4E018;
103 | }
104 |
105 | &:focus, &:active{
106 | background-color: #ABC123;
107 | }
108 | &.dark {
109 | border: 1px solid $white;
110 | background: inherit;
111 | color: $white;
112 | }
113 | }
114 |
115 | .pill {
116 | padding: 11px 16px 13px;
117 | border-radius: 20px
118 | }
119 | .pill.default {
120 | border: 1px solid #696969;
121 | }
122 |
123 | // Error
124 | .error {
125 | /*position: absolute;
126 | top: 50%;
127 | left: 0;*/
128 | margin-top: 2em;
129 | width: 100%;
130 | text-align: left;
131 |
132 | &-message {
133 | color: $red;
134 | }
135 |
136 | }
137 |
138 | // Loading
139 | .loading {
140 | position: absolute;
141 | top: 40%;
142 | width: 100%;
143 | left: 0;
144 | text-align: center;
145 | }
146 |
147 | .customfont {
148 | font-family: "Crimson Pro", Arial, sans-serif;
149 | }
150 |
151 | .menu a, .article-item article a:first-child {
152 | color: $white;
153 | }
154 |
155 | .article {
156 | > div {
157 | display: grid;
158 | grid-template-columns: 1fr 2fr;
159 | grid-column-gap: 20px;
160 | }
161 | li {
162 | border: 1px solid #ccc;
163 | border-radius: 10px;
164 | padding: 10px;
165 | display: flex;
166 | flex-direction: column;
167 | margin-bottom: 20px;
168 | img {
169 | align-self: end;
170 | }
171 | }
172 | footer {
173 | width: 80%;
174 | margin-top: 50px;
175 | border-top: 1px solid #ccc;
176 | font-size: 0.75rem;
177 |
178 | > p {
179 | font-size: inherit;
180 | }
181 | }
182 | img {
183 | position:relative;
184 | }
185 | img:after {
186 | content: attr(alt);
187 | color: rgb(100, 100, 100);
188 | position: absolute;
189 | z-index: 1;
190 | left: 0;
191 | width: 100%;
192 | color: #fff;
193 | text-align: center;
194 | background-image: url("./images/wknd-card.jpeg")
195 | }
196 | }
197 |
198 | .header, .footer {
199 | background-color: $black;
200 | color: $white;
201 | display: grid;
202 | align-items: center;
203 | max-width: $max-width;
204 | margin: 0 auto;
205 | .logo {
206 | height: 24px;
207 | }
208 | .menu {
209 | margin: 0;
210 | display: flex;
211 | column-gap: 40px;
212 | }
213 | }
214 | .header {
215 | padding: 0 80px;
216 | justify-items: center;
217 | grid-template-columns: 1fr 4fr 1fr;
218 | a {
219 | justify-self: flex-start;
220 | }
221 | .logo {
222 | margin: 44px 0;
223 | }
224 | button {
225 | white-space: nowrap;
226 | justify-self: flex-end;
227 | margin: 0;
228 | }
229 | }
230 | .footer {
231 | padding: 40px 80px;
232 | grid-template-columns: 1fr 1fr;
233 | nav, small {
234 | justify-self: end;
235 | }
236 | small {
237 | padding: 40px 0;
238 | color: $gray;
239 | grid-column: span 2;
240 | }
241 | }
242 |
243 | .container img {
244 | max-width: 50%;
245 | }
246 |
247 | @media only screen and (max-width: $tablet-breakpoint) {
248 | .header, .footer {
249 | padding: $tablet-padding;
250 | }
251 | .header {
252 | .logo {
253 | margin: 0;
254 | }
255 | }
256 | }
257 |
258 | @media only screen and (max-width: $mobile-breakpoint) {
259 | .header {
260 | button {
261 | display:none;
262 | }
263 | }
264 | .header, .footer {
265 | grid-template-columns: 1fr 1.5fr;
266 | white-space: nowrap;
267 | column-gap: 10px;
268 | }
269 | }
--------------------------------------------------------------------------------
/src/utils/renderRichText.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | import React, { isValidElement, cloneElement } from 'react';
9 |
10 | /**
11 | * Map of JSON nodeTypes to HTML formats
12 | */
13 | const defaultNodeMap = {
14 | 'header': (node, children, style) => style[node.style]?.(node, children),
15 | 'paragraph': (node, children) => {children}
,
16 | 'span': ({ format } , children) => {children} ,
17 | 'unordered-list': (node, children) => ,
18 | 'ordered-list': (node, children) => {children} ,
19 | 'list-item': (node, children) => {children} ,
20 | 'table': (node, children) => ,
21 | 'table-body': (node, children) => {children} ,
22 | 'table-row': (node, children) => {children} ,
23 | 'table-data': (node, children) => {children} ,
24 | 'link': node => {node.value} ,
25 | 'text': (node, format) => defaultRenderText(node, format),
26 | 'reference': (node) => defaultRenderImage(node),
27 | }
28 |
29 | /**
30 | * Map of JSON format variants to HTML equivalents
31 | */
32 | const defaultTextFormat = {
33 | 'bold': (value) => {value} ,
34 | 'italic': (value) => {value} ,
35 | 'underline': (value) => {value} ,
36 | 'strong': (value) => {value} ,
37 | 'emphasis': (value) => {value} ,
38 | }
39 |
40 | /**
41 | * Map of Header styles
42 | */
43 | const defaultHeaderStyle = {
44 | 'h1': (node, children) => {children} ,
45 | 'h2': (node, children) => {children} ,
46 | 'h3': (node, children) => {children}
47 | }
48 |
49 | /**
50 | * Default renderer of Text nodeTypes
51 | * @param {*} node
52 | * @returns
53 | */
54 | function defaultRenderText(node, format) {
55 | // iterate over variants array to append formatting
56 | if (node.format?.variants?.length > 0) {
57 | return node.format.variants.reduce((previousValue, currentValue) => {
58 | return format[currentValue]?.(previousValue) ?? null;
59 | }, node.value);
60 | }
61 | // if no formatting, simply return the value of the text
62 | return node.value;
63 | }
64 |
65 | /**
66 | * Renders an image based on a reference
67 | * @param {*} node
68 | */
69 | function defaultRenderImage(node) {
70 | const mimeType = node.data?.mimetype;
71 | if(mimeType && mimeType.startsWith('image')) {
72 | return
73 | }
74 | return null;
75 | }
76 |
77 | /**
78 | * Appends a key to valid React Elements
79 | * (avoids having to pass an index everywhere)
80 | * @param {*} element
81 | * @param {*} key
82 | * @returns
83 | */
84 | function addKeyToElement(element, key) {
85 | if (isValidElement(element) && element.key === null) {
86 | return cloneElement(element, { key });
87 | }
88 | return element;
89 | }
90 |
91 | /**
92 | * Iterates over an array of nodes and renders each node
93 | * @param {*} childNodes array of
94 | * @returns
95 | */
96 | function renderNodeList(childNodes, options) {
97 | if(childNodes && options) {
98 | return childNodes.map((node, index) => {
99 | return addKeyToElement(renderNode(node, options), index);
100 | });
101 | }
102 |
103 | return null;
104 | }
105 |
106 | /**
107 | * Renders an individual node based on nodeType.
108 | * Makes a recursive call to render any children of the current node (node.content)
109 | * @param {*} node
110 | * @param {*} options
111 | * @returns
112 | */
113 | function renderNode(node, options) {
114 | const {nodeMap, textFormat, headerStyle} = options;
115 |
116 | // null check
117 | if(!node || !options) {
118 | return null;
119 | }
120 |
121 | const children = node.content ? renderNodeList(node.content, options) : null;
122 |
123 | // special case for header, since it requires processing of header styles
124 | if(node.nodeType === 'header') {
125 | return nodeMap[node.nodeType]?.(node, children, headerStyle);
126 | }
127 |
128 | // special case for text, since it may require formatting (i.e bold, italic, underline)
129 | if(node.nodeType === 'text') {
130 | return nodeMap[node.nodeType]?.(node, textFormat);
131 | }
132 |
133 | // use a map to render the current node based on its nodeType
134 | // pass the children (if they exist)
135 | return nodeMap[node.nodeType]?.(node, children) ?? null;
136 | }
137 |
138 | /**
139 | * Expose the utility as a public function mapJsonRichText.
140 | * Calling functions can choose to override various mappings and/or formatting
141 | * by passing in an `options` object that may contain overrides for `nodeMap`, `textFormat` and `headerStyle`
142 | * @param {*} json - the json response of a Multi Line rich text field
143 | * @param {*} options {nodeMap, - override defaultNodeMap
144 | * textFormat, - override defaultTextFormat
145 | * headerStyle, - override defaultHeaderStyle
146 | * }
147 | * @returns a JSX representation of the JSON object
148 | */
149 | export function mapJsonRichText(json, options={}) {
150 | // merge options override with default options for nodeMap, textFormat, and headerStyle
151 | return renderNodeList(json , {
152 | nodeMap: {
153 | ...defaultNodeMap,
154 | ...options.nodeMap,
155 | },
156 | textFormat: {
157 | ...defaultTextFormat,
158 | ...options.textFormat,
159 | },
160 | headerStyle: {
161 | ...defaultHeaderStyle,
162 | ...options.headerStyle
163 | }
164 | });
165 | }
--------------------------------------------------------------------------------
/src/components/AdventureDetail.jsx:
--------------------------------------------------------------------------------
1 | /*
2 | Copyright 2022 Adobe
3 | All Rights Reserved.
4 | NOTICE: Adobe permits you to use, modify, and distribute this file in
5 | accordance with the terms of the Adobe license agreement accompanying
6 | it.
7 | */
8 | import React from 'react';
9 | import {Link, useNavigate, useParams} from "react-router-dom";
10 | import backIcon from '../images/Back.svg';
11 | import Error from './base/Error';
12 | import Loading from './base/Loading';
13 | import {mapJsonRichText} from '../utils/renderRichText';
14 | import './AdventureDetail.scss';
15 | import useGraphQL from '../api/useGraphQL';
16 | import {getImageURL} from "../utils/fetchData";
17 |
18 | function AdventureDetail() {
19 | // params hook from React router
20 | const {slug} = useParams();
21 | const navigate = useNavigate();
22 | const persistentQuery = `wknd-shared/adventure-by-slug;slug=${slug}`;
23 |
24 | //Use a custom React Hook to execute the GraphQL query
25 | const {data, errorMessage} = useGraphQL(persistentQuery);
26 |
27 | //If there is an error with the GraphQL query
28 | if (errorMessage) return ;
29 |
30 | //If query response is null then return a loading icon...
31 | if (!data) return ;
32 |
33 | //Set adventure properties variable based on graphQL response
34 | const currentAdventure = getAdventure(data);
35 |
36 | // set references of current adventure
37 | const references = data.adventureList._references;
38 |
39 | //Must have title, path, and image
40 | if (!currentAdventure) {
41 | return ;
42 | }
43 |
44 | const editorProps = {
45 | "data-aue-resource": "urn:aemconnection:" + currentAdventure._path + "/jcr:content/data/master",
46 | "data-aue-type": "reference",
47 | itemfilter: "cf"
48 | };
49 |
50 | return (
51 |
52 |
53 |
navigate(-1)}>
54 | Adventures
55 |
56 |
{currentAdventure.title}
57 |
58 | {currentAdventure.activity}
61 |
62 |
63 |
64 |
65 |
66 | );
67 | }
68 |
69 | function AdventureDetailRender({
70 | title,
71 | primaryImage,
72 | adventureType,
73 | tripLength,
74 | groupSize,
75 | difficulty,
76 | description,
77 | itinerary, references
78 | }) {
79 | return (
80 |
82 |
83 |
84 |
{mapJsonRichText(description.json, customRenderOptions(references))}
86 |
87 |
88 |
Adventure Type
89 | {adventureType}
92 |
93 |
94 |
Trip Length
95 | {tripLength}
98 |
99 |
100 |
Difficulty
101 | {difficulty}
104 |
105 |
106 |
Group Size
107 | {groupSize}
110 |
111 |
112 |
Itinerary
113 |
{mapJsonRichText(itinerary.json)}
115 |
116 |
117 |
118 | );
119 |
120 | }
121 |
122 | function NoAdventureFound() {
123 | return (
124 |
125 |
126 |
127 |
128 |
129 |
130 | );
131 | }
132 |
133 | /**
134 | * Helper function to get the first adventure from the response
135 | * @param {*} response
136 | */
137 | function getAdventure(data) {
138 |
139 | if (data && data.adventureList && data.adventureList.items) {
140 | return data.adventureList.items.find(item => {
141 | return item._path.startsWith("/content/dam/wknd-shared/en");
142 | });
143 | }
144 | return undefined;
145 | }
146 |
147 | /**
148 | * Example of using a custom render for in-line references in a multi line field
149 | */
150 | function customRenderOptions(references) {
151 |
152 | const renderReference = {
153 | // node contains merged properties of the in-line reference and _references object
154 | 'ImageRef': (node) => {
155 | // when __typename === ImageRef
156 | return
157 | },
158 | 'AdventureModel': (node) => {
159 | // when __typename === AdventureModel
160 | return {`${node.title}: ${node.price}`};
161 | }
162 | };
163 |
164 | return {
165 | nodeMap: {
166 | 'reference': (node, children) => {
167 |
168 | // variable for reference in _references object
169 | let reference;
170 |
171 | // asset reference
172 | if (node.data.path) {
173 | // find reference based on path
174 | reference = references.find(ref => ref._path === node.data.path);
175 | }
176 | // Fragment Reference
177 | if (node.data.href) {
178 | // find in-line reference within _references array based on href and _path properties
179 | reference = references.find(ref => ref._path === node.data.href);
180 | }
181 |
182 | // if reference found return render method of it
183 | return reference ? renderReference[reference.__typename]({...reference, ...node}) : null;
184 | }
185 | },
186 | };
187 | }
188 |
189 | export default AdventureDetail;
190 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@adobe/aem-headless-client-js@4.0.0", "@adobe/aem-headless-client-js@^4.0.0":
6 | version "4.0.0"
7 | resolved "https://registry.yarnpkg.com/@adobe/aem-headless-client-js/-/aem-headless-client-js-4.0.0.tgz#cce016fc7d9168a5707dcfedff7d5299074714ea"
8 | integrity sha512-jpFDmym/cjJb54lYjTpQfmP3jyueXlPPI7oQM4852V9v0Ak6F3A3fv+6Bq/CvNGyULza1G6NsZ7gzaSjApxcaA==
9 | dependencies:
10 | "@adobe/aio-lib-core-errors" "4.0.1"
11 |
12 | "@adobe/aem-headless-client-nodejs@^2.0.0":
13 | version "2.0.1"
14 | resolved "https://registry.yarnpkg.com/@adobe/aem-headless-client-nodejs/-/aem-headless-client-nodejs-2.0.1.tgz#4fb4f5867f79c24c99866c3be63744d82104a988"
15 | integrity sha512-cTgSgBSsuvRiZSDDX9A1LLIwZkJ7OkrUT4MgbyrJtwy7FYS+YsEa7aoxCyGx9ivCcbUHLBdlGX3ouY8D6ml/IA==
16 | dependencies:
17 | "@adobe/aem-headless-client-js" "4.0.0"
18 | "@adobe/aio-lib-core-logging" "3.0.2"
19 | "@adobe/aio-lib-core-networking" "5.0.4"
20 | jsonwebtoken "^9.0.2"
21 |
22 | "@adobe/aio-lib-core-config@^5.0.0":
23 | version "5.0.1"
24 | resolved "https://registry.yarnpkg.com/@adobe/aio-lib-core-config/-/aio-lib-core-config-5.0.1.tgz#a04292012a55296a0228333ccb458bfeb4278330"
25 | integrity sha512-OQmQublmy/uXM1HC6qXfxSAXEl85nExh/yiajlEfJheKuJ9iPWwVWXR5vBHVVDlOXgWEVMWRUQPMIUu1lmR5lA==
26 | dependencies:
27 | debug "^4.1.1"
28 | deepmerge "^4.0.0"
29 | dotenv "16.3.1"
30 | hjson "^3.1.2"
31 | js-yaml "^4.1.0"
32 |
33 | "@adobe/aio-lib-core-errors@4.0.1", "@adobe/aio-lib-core-errors@^4.0.0":
34 | version "4.0.1"
35 | resolved "https://registry.yarnpkg.com/@adobe/aio-lib-core-errors/-/aio-lib-core-errors-4.0.1.tgz#535457e43fa626350c0425a15b95dd1fc7990c2f"
36 | integrity sha512-zrQm9TJh13wEHH5O2TQAUQvYGGe01R9DHzKy+b6B0URbl2lcuqXyNiUx896lpcgXD2bzUoH7ARRH97aCW2tlfw==
37 |
38 | "@adobe/aio-lib-core-logging@3.0.2", "@adobe/aio-lib-core-logging@^3.0.0":
39 | version "3.0.2"
40 | resolved "https://registry.yarnpkg.com/@adobe/aio-lib-core-logging/-/aio-lib-core-logging-3.0.2.tgz#95111ddee9b53deaa16f7a46e21933e6aaa15aae"
41 | integrity sha512-f6f9IspB7FjpyGiL7eqUKgBkhZukwDnkPXDhGhYLCjrP3dr+jQnK3uQh9VXZoH4SIWcnpayMUTKZsbDs3WXC+g==
42 | dependencies:
43 | debug "^4.1.1"
44 | winston "^3.2.1"
45 |
46 | "@adobe/aio-lib-core-networking@5.0.4":
47 | version "5.0.4"
48 | resolved "https://registry.yarnpkg.com/@adobe/aio-lib-core-networking/-/aio-lib-core-networking-5.0.4.tgz#9446ceed3aca6431d97306b992699655df544c1a"
49 | integrity sha512-LsFPKIXqfWiMwSjD9NJbb6uUSlZ+DZiV8p9NhpqPyzqAAl9NNONAH0jcIKtsKWSULcHc20INaRAw8dqKzQBTbw==
50 | dependencies:
51 | "@adobe/aio-lib-core-config" "^5.0.0"
52 | "@adobe/aio-lib-core-errors" "^4.0.0"
53 | "@adobe/aio-lib-core-logging" "^3.0.0"
54 | fetch-retry "^6.0.0"
55 | http-proxy-agent "^7"
56 | https-proxy-agent "^7"
57 | node-fetch "^2.6.4"
58 | proxy-from-env "^1.1.0"
59 |
60 | "@babel/code-frame@^7.27.1":
61 | version "7.27.1"
62 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be"
63 | integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
64 | dependencies:
65 | "@babel/helper-validator-identifier" "^7.27.1"
66 | js-tokens "^4.0.0"
67 | picocolors "^1.1.1"
68 |
69 | "@babel/compat-data@^7.27.2":
70 | version "7.28.5"
71 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f"
72 | integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==
73 |
74 | "@babel/core@^7.28.0":
75 | version "7.28.5"
76 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e"
77 | integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==
78 | dependencies:
79 | "@babel/code-frame" "^7.27.1"
80 | "@babel/generator" "^7.28.5"
81 | "@babel/helper-compilation-targets" "^7.27.2"
82 | "@babel/helper-module-transforms" "^7.28.3"
83 | "@babel/helpers" "^7.28.4"
84 | "@babel/parser" "^7.28.5"
85 | "@babel/template" "^7.27.2"
86 | "@babel/traverse" "^7.28.5"
87 | "@babel/types" "^7.28.5"
88 | "@jridgewell/remapping" "^2.3.5"
89 | convert-source-map "^2.0.0"
90 | debug "^4.1.0"
91 | gensync "^1.0.0-beta.2"
92 | json5 "^2.2.3"
93 | semver "^6.3.1"
94 |
95 | "@babel/generator@^7.28.5":
96 | version "7.28.5"
97 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298"
98 | integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==
99 | dependencies:
100 | "@babel/parser" "^7.28.5"
101 | "@babel/types" "^7.28.5"
102 | "@jridgewell/gen-mapping" "^0.3.12"
103 | "@jridgewell/trace-mapping" "^0.3.28"
104 | jsesc "^3.0.2"
105 |
106 | "@babel/helper-compilation-targets@^7.27.2":
107 | version "7.27.2"
108 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz#46a0f6efab808d51d29ce96858dd10ce8732733d"
109 | integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==
110 | dependencies:
111 | "@babel/compat-data" "^7.27.2"
112 | "@babel/helper-validator-option" "^7.27.1"
113 | browserslist "^4.24.0"
114 | lru-cache "^5.1.1"
115 | semver "^6.3.1"
116 |
117 | "@babel/helper-globals@^7.28.0":
118 | version "7.28.0"
119 | resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674"
120 | integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==
121 |
122 | "@babel/helper-module-imports@^7.27.1":
123 | version "7.27.1"
124 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204"
125 | integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==
126 | dependencies:
127 | "@babel/traverse" "^7.27.1"
128 | "@babel/types" "^7.27.1"
129 |
130 | "@babel/helper-module-transforms@^7.28.3":
131 | version "7.28.3"
132 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz#a2b37d3da3b2344fe085dab234426f2b9a2fa5f6"
133 | integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==
134 | dependencies:
135 | "@babel/helper-module-imports" "^7.27.1"
136 | "@babel/helper-validator-identifier" "^7.27.1"
137 | "@babel/traverse" "^7.28.3"
138 |
139 | "@babel/helper-plugin-utils@^7.27.1":
140 | version "7.27.1"
141 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c"
142 | integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==
143 |
144 | "@babel/helper-string-parser@^7.27.1":
145 | version "7.27.1"
146 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687"
147 | integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==
148 |
149 | "@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5":
150 | version "7.28.5"
151 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4"
152 | integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==
153 |
154 | "@babel/helper-validator-option@^7.27.1":
155 | version "7.27.1"
156 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f"
157 | integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==
158 |
159 | "@babel/helpers@^7.28.4":
160 | version "7.28.4"
161 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.28.4.tgz#fe07274742e95bdf7cf1443593eeb8926ab63827"
162 | integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==
163 | dependencies:
164 | "@babel/template" "^7.27.2"
165 | "@babel/types" "^7.28.4"
166 |
167 | "@babel/parser@^7.1.0", "@babel/parser@^7.20.7", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5":
168 | version "7.28.5"
169 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08"
170 | integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==
171 | dependencies:
172 | "@babel/types" "^7.28.5"
173 |
174 | "@babel/plugin-transform-react-jsx-self@^7.27.1":
175 | version "7.27.1"
176 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz#af678d8506acf52c577cac73ff7fe6615c85fc92"
177 | integrity sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==
178 | dependencies:
179 | "@babel/helper-plugin-utils" "^7.27.1"
180 |
181 | "@babel/plugin-transform-react-jsx-source@^7.27.1":
182 | version "7.27.1"
183 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz#dcfe2c24094bb757bf73960374e7c55e434f19f0"
184 | integrity sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==
185 | dependencies:
186 | "@babel/helper-plugin-utils" "^7.27.1"
187 |
188 | "@babel/template@^7.27.2":
189 | version "7.27.2"
190 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.2.tgz#fa78ceed3c4e7b63ebf6cb39e5852fca45f6809d"
191 | integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==
192 | dependencies:
193 | "@babel/code-frame" "^7.27.1"
194 | "@babel/parser" "^7.27.2"
195 | "@babel/types" "^7.27.1"
196 |
197 | "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.5":
198 | version "7.28.5"
199 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b"
200 | integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==
201 | dependencies:
202 | "@babel/code-frame" "^7.27.1"
203 | "@babel/generator" "^7.28.5"
204 | "@babel/helper-globals" "^7.28.0"
205 | "@babel/parser" "^7.28.5"
206 | "@babel/template" "^7.27.2"
207 | "@babel/types" "^7.28.5"
208 | debug "^4.3.1"
209 |
210 | "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5":
211 | version "7.28.5"
212 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b"
213 | integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==
214 | dependencies:
215 | "@babel/helper-string-parser" "^7.27.1"
216 | "@babel/helper-validator-identifier" "^7.28.5"
217 |
218 | "@colors/colors@1.6.0", "@colors/colors@^1.6.0":
219 | version "1.6.0"
220 | resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0"
221 | integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==
222 |
223 | "@dabh/diagnostics@^2.0.8":
224 | version "2.0.8"
225 | resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.8.tgz#ead97e72ca312cf0e6dd7af0d300b58993a31a5e"
226 | integrity sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==
227 | dependencies:
228 | "@so-ric/colorspace" "^1.1.6"
229 | enabled "2.0.x"
230 | kuler "^2.0.0"
231 |
232 | "@esbuild/aix-ppc64@0.21.5":
233 | version "0.21.5"
234 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
235 | integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
236 |
237 | "@esbuild/android-arm64@0.21.5":
238 | version "0.21.5"
239 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
240 | integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
241 |
242 | "@esbuild/android-arm@0.21.5":
243 | version "0.21.5"
244 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
245 | integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
246 |
247 | "@esbuild/android-x64@0.21.5":
248 | version "0.21.5"
249 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
250 | integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
251 |
252 | "@esbuild/darwin-arm64@0.21.5":
253 | version "0.21.5"
254 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
255 | integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
256 |
257 | "@esbuild/darwin-x64@0.21.5":
258 | version "0.21.5"
259 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
260 | integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
261 |
262 | "@esbuild/freebsd-arm64@0.21.5":
263 | version "0.21.5"
264 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
265 | integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
266 |
267 | "@esbuild/freebsd-x64@0.21.5":
268 | version "0.21.5"
269 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
270 | integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
271 |
272 | "@esbuild/linux-arm64@0.21.5":
273 | version "0.21.5"
274 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
275 | integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
276 |
277 | "@esbuild/linux-arm@0.21.5":
278 | version "0.21.5"
279 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
280 | integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
281 |
282 | "@esbuild/linux-ia32@0.21.5":
283 | version "0.21.5"
284 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
285 | integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
286 |
287 | "@esbuild/linux-loong64@0.21.5":
288 | version "0.21.5"
289 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
290 | integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
291 |
292 | "@esbuild/linux-mips64el@0.21.5":
293 | version "0.21.5"
294 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
295 | integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
296 |
297 | "@esbuild/linux-ppc64@0.21.5":
298 | version "0.21.5"
299 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
300 | integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
301 |
302 | "@esbuild/linux-riscv64@0.21.5":
303 | version "0.21.5"
304 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
305 | integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
306 |
307 | "@esbuild/linux-s390x@0.21.5":
308 | version "0.21.5"
309 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
310 | integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
311 |
312 | "@esbuild/linux-x64@0.21.5":
313 | version "0.21.5"
314 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
315 | integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
316 |
317 | "@esbuild/netbsd-x64@0.21.5":
318 | version "0.21.5"
319 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
320 | integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
321 |
322 | "@esbuild/openbsd-x64@0.21.5":
323 | version "0.21.5"
324 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
325 | integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
326 |
327 | "@esbuild/sunos-x64@0.21.5":
328 | version "0.21.5"
329 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
330 | integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
331 |
332 | "@esbuild/win32-arm64@0.21.5":
333 | version "0.21.5"
334 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
335 | integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
336 |
337 | "@esbuild/win32-ia32@0.21.5":
338 | version "0.21.5"
339 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
340 | integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
341 |
342 | "@esbuild/win32-x64@0.21.5":
343 | version "0.21.5"
344 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
345 | integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
346 |
347 | "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5":
348 | version "0.3.13"
349 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f"
350 | integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==
351 | dependencies:
352 | "@jridgewell/sourcemap-codec" "^1.5.0"
353 | "@jridgewell/trace-mapping" "^0.3.24"
354 |
355 | "@jridgewell/remapping@^2.3.5":
356 | version "2.3.5"
357 | resolved "https://registry.yarnpkg.com/@jridgewell/remapping/-/remapping-2.3.5.tgz#375c476d1972947851ba1e15ae8f123047445aa1"
358 | integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==
359 | dependencies:
360 | "@jridgewell/gen-mapping" "^0.3.5"
361 | "@jridgewell/trace-mapping" "^0.3.24"
362 |
363 | "@jridgewell/resolve-uri@^3.1.0":
364 | version "3.1.2"
365 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
366 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
367 |
368 | "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0":
369 | version "1.5.5"
370 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba"
371 | integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==
372 |
373 | "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28":
374 | version "0.3.31"
375 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0"
376 | integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==
377 | dependencies:
378 | "@jridgewell/resolve-uri" "^3.1.0"
379 | "@jridgewell/sourcemap-codec" "^1.4.14"
380 |
381 | "@nodelib/fs.scandir@2.1.5":
382 | version "2.1.5"
383 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
384 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
385 | dependencies:
386 | "@nodelib/fs.stat" "2.0.5"
387 | run-parallel "^1.1.9"
388 |
389 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
390 | version "2.0.5"
391 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
392 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
393 |
394 | "@nodelib/fs.walk@^1.2.3":
395 | version "1.2.8"
396 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
397 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
398 | dependencies:
399 | "@nodelib/fs.scandir" "2.1.5"
400 | fastq "^1.6.0"
401 |
402 | "@parcel/watcher-android-arm64@2.5.1":
403 | version "2.5.1"
404 | resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1"
405 | integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==
406 |
407 | "@parcel/watcher-darwin-arm64@2.5.1":
408 | version "2.5.1"
409 | resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67"
410 | integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==
411 |
412 | "@parcel/watcher-darwin-x64@2.5.1":
413 | version "2.5.1"
414 | resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8"
415 | integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==
416 |
417 | "@parcel/watcher-freebsd-x64@2.5.1":
418 | version "2.5.1"
419 | resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b"
420 | integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==
421 |
422 | "@parcel/watcher-linux-arm-glibc@2.5.1":
423 | version "2.5.1"
424 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1"
425 | integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==
426 |
427 | "@parcel/watcher-linux-arm-musl@2.5.1":
428 | version "2.5.1"
429 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e"
430 | integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==
431 |
432 | "@parcel/watcher-linux-arm64-glibc@2.5.1":
433 | version "2.5.1"
434 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30"
435 | integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==
436 |
437 | "@parcel/watcher-linux-arm64-musl@2.5.1":
438 | version "2.5.1"
439 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2"
440 | integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==
441 |
442 | "@parcel/watcher-linux-x64-glibc@2.5.1":
443 | version "2.5.1"
444 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e"
445 | integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==
446 |
447 | "@parcel/watcher-linux-x64-musl@2.5.1":
448 | version "2.5.1"
449 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee"
450 | integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==
451 |
452 | "@parcel/watcher-win32-arm64@2.5.1":
453 | version "2.5.1"
454 | resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243"
455 | integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==
456 |
457 | "@parcel/watcher-win32-ia32@2.5.1":
458 | version "2.5.1"
459 | resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6"
460 | integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==
461 |
462 | "@parcel/watcher-win32-x64@2.5.1":
463 | version "2.5.1"
464 | resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947"
465 | integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==
466 |
467 | "@parcel/watcher@^2.4.1":
468 | version "2.5.1"
469 | resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200"
470 | integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==
471 | dependencies:
472 | detect-libc "^1.0.3"
473 | is-glob "^4.0.3"
474 | micromatch "^4.0.5"
475 | node-addon-api "^7.0.0"
476 | optionalDependencies:
477 | "@parcel/watcher-android-arm64" "2.5.1"
478 | "@parcel/watcher-darwin-arm64" "2.5.1"
479 | "@parcel/watcher-darwin-x64" "2.5.1"
480 | "@parcel/watcher-freebsd-x64" "2.5.1"
481 | "@parcel/watcher-linux-arm-glibc" "2.5.1"
482 | "@parcel/watcher-linux-arm-musl" "2.5.1"
483 | "@parcel/watcher-linux-arm64-glibc" "2.5.1"
484 | "@parcel/watcher-linux-arm64-musl" "2.5.1"
485 | "@parcel/watcher-linux-x64-glibc" "2.5.1"
486 | "@parcel/watcher-linux-x64-musl" "2.5.1"
487 | "@parcel/watcher-win32-arm64" "2.5.1"
488 | "@parcel/watcher-win32-ia32" "2.5.1"
489 | "@parcel/watcher-win32-x64" "2.5.1"
490 |
491 | "@rolldown/pluginutils@1.0.0-beta.27":
492 | version "1.0.0-beta.27"
493 | resolved "https://registry.yarnpkg.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz#47d2bf4cef6d470b22f5831b420f8964e0bf755f"
494 | integrity sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==
495 |
496 | "@rollup/rollup-android-arm-eabi@4.53.3":
497 | version "4.53.3"
498 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz#7e478b66180c5330429dd161bf84dad66b59c8eb"
499 | integrity sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==
500 |
501 | "@rollup/rollup-android-arm64@4.53.3":
502 | version "4.53.3"
503 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz#2b025510c53a5e3962d3edade91fba9368c9d71c"
504 | integrity sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==
505 |
506 | "@rollup/rollup-darwin-arm64@4.53.3":
507 | version "4.53.3"
508 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz#3577c38af68ccf34c03e84f476bfd526abca10a0"
509 | integrity sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==
510 |
511 | "@rollup/rollup-darwin-x64@4.53.3":
512 | version "4.53.3"
513 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz#2bf5f2520a1f3b551723d274b9669ba5b75ed69c"
514 | integrity sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==
515 |
516 | "@rollup/rollup-freebsd-arm64@4.53.3":
517 | version "4.53.3"
518 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz#4bb9cc80252564c158efc0710153c71633f1927c"
519 | integrity sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==
520 |
521 | "@rollup/rollup-freebsd-x64@4.53.3":
522 | version "4.53.3"
523 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz#2301289094d49415a380cf942219ae9d8b127440"
524 | integrity sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==
525 |
526 | "@rollup/rollup-linux-arm-gnueabihf@4.53.3":
527 | version "4.53.3"
528 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz#1d03d776f2065e09fc141df7d143476e94acca88"
529 | integrity sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==
530 |
531 | "@rollup/rollup-linux-arm-musleabihf@4.53.3":
532 | version "4.53.3"
533 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz#8623de0e040b2fd52a541c602688228f51f96701"
534 | integrity sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==
535 |
536 | "@rollup/rollup-linux-arm64-gnu@4.53.3":
537 | version "4.53.3"
538 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz#ce2d1999bc166277935dde0301cde3dd0417fb6e"
539 | integrity sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==
540 |
541 | "@rollup/rollup-linux-arm64-musl@4.53.3":
542 | version "4.53.3"
543 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz#88c2523778444da952651a2219026416564a4899"
544 | integrity sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==
545 |
546 | "@rollup/rollup-linux-loong64-gnu@4.53.3":
547 | version "4.53.3"
548 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz#578ca2220a200ac4226c536c10c8cc6e4f276714"
549 | integrity sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==
550 |
551 | "@rollup/rollup-linux-ppc64-gnu@4.53.3":
552 | version "4.53.3"
553 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz#aa338d3effd4168a20a5023834a74ba2c3081293"
554 | integrity sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==
555 |
556 | "@rollup/rollup-linux-riscv64-gnu@4.53.3":
557 | version "4.53.3"
558 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz#16ba582f9f6cff58119aa242782209b1557a1508"
559 | integrity sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==
560 |
561 | "@rollup/rollup-linux-riscv64-musl@4.53.3":
562 | version "4.53.3"
563 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz#e404a77ebd6378483888b8064c703adb011340ab"
564 | integrity sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==
565 |
566 | "@rollup/rollup-linux-s390x-gnu@4.53.3":
567 | version "4.53.3"
568 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz#92ad52d306227c56bec43d96ad2164495437ffe6"
569 | integrity sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==
570 |
571 | "@rollup/rollup-linux-x64-gnu@4.53.3":
572 | version "4.53.3"
573 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz#fd0dea3bb9aa07e7083579f25e1c2285a46cb9fa"
574 | integrity sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==
575 |
576 | "@rollup/rollup-linux-x64-musl@4.53.3":
577 | version "4.53.3"
578 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz#37a3efb09f18d555f8afc490e1f0444885de8951"
579 | integrity sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==
580 |
581 | "@rollup/rollup-openharmony-arm64@4.53.3":
582 | version "4.53.3"
583 | resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz#c489bec9f4f8320d42c9b324cca220c90091c1f7"
584 | integrity sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==
585 |
586 | "@rollup/rollup-win32-arm64-msvc@4.53.3":
587 | version "4.53.3"
588 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz#152832b5f79dc22d1606fac3db946283601b7080"
589 | integrity sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==
590 |
591 | "@rollup/rollup-win32-ia32-msvc@4.53.3":
592 | version "4.53.3"
593 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz#54d91b2bb3bf3e9f30d32b72065a4e52b3a172a5"
594 | integrity sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==
595 |
596 | "@rollup/rollup-win32-x64-gnu@4.53.3":
597 | version "4.53.3"
598 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz#df9df03e61a003873efec8decd2034e7f135c71e"
599 | integrity sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==
600 |
601 | "@rollup/rollup-win32-x64-msvc@4.53.3":
602 | version "4.53.3"
603 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz#38ae84f4c04226c1d56a3b17296ef1e0460ecdfe"
604 | integrity sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==
605 |
606 | "@so-ric/colorspace@^1.1.6":
607 | version "1.1.6"
608 | resolved "https://registry.yarnpkg.com/@so-ric/colorspace/-/colorspace-1.1.6.tgz#62515d8b9f27746b76950a83bde1af812d91923b"
609 | integrity sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==
610 | dependencies:
611 | color "^5.0.2"
612 | text-hex "1.0.x"
613 |
614 | "@types/babel__core@^7.20.5":
615 | version "7.20.5"
616 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
617 | integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
618 | dependencies:
619 | "@babel/parser" "^7.20.7"
620 | "@babel/types" "^7.20.7"
621 | "@types/babel__generator" "*"
622 | "@types/babel__template" "*"
623 | "@types/babel__traverse" "*"
624 |
625 | "@types/babel__generator@*":
626 | version "7.27.0"
627 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9"
628 | integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==
629 | dependencies:
630 | "@babel/types" "^7.0.0"
631 |
632 | "@types/babel__template@*":
633 | version "7.4.4"
634 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f"
635 | integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==
636 | dependencies:
637 | "@babel/parser" "^7.1.0"
638 | "@babel/types" "^7.0.0"
639 |
640 | "@types/babel__traverse@*":
641 | version "7.28.0"
642 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.28.0.tgz#07d713d6cce0d265c9849db0cbe62d3f61f36f74"
643 | integrity sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==
644 | dependencies:
645 | "@babel/types" "^7.28.2"
646 |
647 | "@types/estree@1.0.8":
648 | version "1.0.8"
649 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e"
650 | integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
651 |
652 | "@types/prop-types@*":
653 | version "15.7.15"
654 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.15.tgz#e6e5a86d602beaca71ce5163fadf5f95d70931c7"
655 | integrity sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==
656 |
657 | "@types/react-dom@^18.2.17":
658 | version "18.3.7"
659 | resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.7.tgz#b89ddf2cd83b4feafcc4e2ea41afdfb95a0d194f"
660 | integrity sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==
661 |
662 | "@types/react@^18.2.43":
663 | version "18.3.27"
664 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.27.tgz#74a3b590ea183983dc65a474dc17553ae1415c34"
665 | integrity sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w==
666 | dependencies:
667 | "@types/prop-types" "*"
668 | csstype "^3.2.2"
669 |
670 | "@types/triple-beam@^1.3.2":
671 | version "1.3.5"
672 | resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c"
673 | integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==
674 |
675 | "@vitejs/plugin-basic-ssl@^2.1.0":
676 | version "2.1.0"
677 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-2.1.0.tgz#c70d2a922bc437f154089d7ef0505db4b383eb7b"
678 | integrity sha512-dOxxrhgyDIEUADhb/8OlV9JIqYLgos03YorAueTIeOUskLJSEsfwCByjbu98ctXitUN3znXKp0bYD/WHSudCeA==
679 |
680 | "@vitejs/plugin-react@^4.2.1":
681 | version "4.7.0"
682 | resolved "https://registry.yarnpkg.com/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz#647af4e7bb75ad3add578e762ad984b90f4a24b9"
683 | integrity sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==
684 | dependencies:
685 | "@babel/core" "^7.28.0"
686 | "@babel/plugin-transform-react-jsx-self" "^7.27.1"
687 | "@babel/plugin-transform-react-jsx-source" "^7.27.1"
688 | "@rolldown/pluginutils" "1.0.0-beta.27"
689 | "@types/babel__core" "^7.20.5"
690 | react-refresh "^0.17.0"
691 |
692 | agent-base@^7.1.0, agent-base@^7.1.2:
693 | version "7.1.4"
694 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8"
695 | integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
696 |
697 | argparse@^2.0.1:
698 | version "2.0.1"
699 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
700 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
701 |
702 | array-union@^2.1.0:
703 | version "2.1.0"
704 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
705 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
706 |
707 | async@^3.2.3, async@^3.2.4:
708 | version "3.2.6"
709 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
710 | integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
711 |
712 | baseline-browser-mapping@^2.8.25:
713 | version "2.8.29"
714 | resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.29.tgz#d8800b71399c783cb1bf2068c2bcc3b6cfd7892c"
715 | integrity sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==
716 |
717 | braces@^3.0.3:
718 | version "3.0.3"
719 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
720 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
721 | dependencies:
722 | fill-range "^7.1.1"
723 |
724 | browserslist@^4.24.0:
725 | version "4.28.0"
726 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.0.tgz#9cefece0a386a17a3cd3d22ebf67b9deca1b5929"
727 | integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==
728 | dependencies:
729 | baseline-browser-mapping "^2.8.25"
730 | caniuse-lite "^1.0.30001754"
731 | electron-to-chromium "^1.5.249"
732 | node-releases "^2.0.27"
733 | update-browserslist-db "^1.1.4"
734 |
735 | buffer-equal-constant-time@^1.0.1:
736 | version "1.0.1"
737 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
738 | integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
739 |
740 | caniuse-lite@^1.0.30001754:
741 | version "1.0.30001756"
742 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz#fe80104631102f88e58cad8aa203a2c3e5ec9ebd"
743 | integrity sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==
744 |
745 | chokidar@^4.0.0:
746 | version "4.0.3"
747 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
748 | integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==
749 | dependencies:
750 | readdirp "^4.0.1"
751 |
752 | color-convert@^3.1.3:
753 | version "3.1.3"
754 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-3.1.3.tgz#db6627b97181cb8facdfce755ae26f97ab0711f1"
755 | integrity sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==
756 | dependencies:
757 | color-name "^2.0.0"
758 |
759 | color-name@^2.0.0:
760 | version "2.1.0"
761 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-2.1.0.tgz#0b677385c1c4b4edfdeaf77e38fa338e3a40b693"
762 | integrity sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==
763 |
764 | color-string@^2.1.3:
765 | version "2.1.4"
766 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-2.1.4.tgz#9dcf566ff976e23368c8bd673f5c35103ab41058"
767 | integrity sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==
768 | dependencies:
769 | color-name "^2.0.0"
770 |
771 | color@^5.0.2:
772 | version "5.0.3"
773 | resolved "https://registry.yarnpkg.com/color/-/color-5.0.3.tgz#f79390b1b778e222ffbb54304d3dbeaef633f97f"
774 | integrity sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==
775 | dependencies:
776 | color-convert "^3.1.3"
777 | color-string "^2.1.3"
778 |
779 | commander@^13.0.0:
780 | version "13.1.0"
781 | resolved "https://registry.yarnpkg.com/commander/-/commander-13.1.0.tgz#776167db68c78f38dcce1f9b8d7b8b9a488abf46"
782 | integrity sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==
783 |
784 | commondir@^1.0.1:
785 | version "1.0.1"
786 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
787 | integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
788 |
789 | convert-source-map@^2.0.0:
790 | version "2.0.0"
791 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
792 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
793 |
794 | cookie@^1.0.1:
795 | version "1.0.2"
796 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610"
797 | integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==
798 |
799 | csstype@^3.2.2:
800 | version "3.2.3"
801 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.2.3.tgz#ec48c0f3e993e50648c86da559e2610995cf989a"
802 | integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==
803 |
804 | debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4:
805 | version "4.4.3"
806 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
807 | integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
808 | dependencies:
809 | ms "^2.1.3"
810 |
811 | deepmerge@^4.0.0:
812 | version "4.3.1"
813 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
814 | integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
815 |
816 | detect-libc@^1.0.3:
817 | version "1.0.3"
818 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
819 | integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==
820 |
821 | dir-glob@^3.0.1:
822 | version "3.0.1"
823 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
824 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
825 | dependencies:
826 | path-type "^4.0.0"
827 |
828 | dotenv@16.3.1:
829 | version "16.3.1"
830 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e"
831 | integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==
832 |
833 | ecdsa-sig-formatter@1.0.11:
834 | version "1.0.11"
835 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
836 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
837 | dependencies:
838 | safe-buffer "^5.0.1"
839 |
840 | electron-to-chromium@^1.5.249:
841 | version "1.5.256"
842 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.256.tgz#f07f78de0893ab060f60ac897195c029a3b50d1a"
843 | integrity sha512-uqYq1IQhpXXLX+HgiXdyOZml7spy4xfy42yPxcCCRjswp0fYM2X+JwCON07lqnpLEGVCj739B7Yr+FngmHBMEQ==
844 |
845 | email-addresses@^5.0.0:
846 | version "5.0.0"
847 | resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-5.0.0.tgz#7ae9e7f58eef7d5e3e2c2c2d3ea49b78dc854fa6"
848 | integrity sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==
849 |
850 | enabled@2.0.x:
851 | version "2.0.0"
852 | resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2"
853 | integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==
854 |
855 | esbuild@^0.21.3:
856 | version "0.21.5"
857 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d"
858 | integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
859 | optionalDependencies:
860 | "@esbuild/aix-ppc64" "0.21.5"
861 | "@esbuild/android-arm" "0.21.5"
862 | "@esbuild/android-arm64" "0.21.5"
863 | "@esbuild/android-x64" "0.21.5"
864 | "@esbuild/darwin-arm64" "0.21.5"
865 | "@esbuild/darwin-x64" "0.21.5"
866 | "@esbuild/freebsd-arm64" "0.21.5"
867 | "@esbuild/freebsd-x64" "0.21.5"
868 | "@esbuild/linux-arm" "0.21.5"
869 | "@esbuild/linux-arm64" "0.21.5"
870 | "@esbuild/linux-ia32" "0.21.5"
871 | "@esbuild/linux-loong64" "0.21.5"
872 | "@esbuild/linux-mips64el" "0.21.5"
873 | "@esbuild/linux-ppc64" "0.21.5"
874 | "@esbuild/linux-riscv64" "0.21.5"
875 | "@esbuild/linux-s390x" "0.21.5"
876 | "@esbuild/linux-x64" "0.21.5"
877 | "@esbuild/netbsd-x64" "0.21.5"
878 | "@esbuild/openbsd-x64" "0.21.5"
879 | "@esbuild/sunos-x64" "0.21.5"
880 | "@esbuild/win32-arm64" "0.21.5"
881 | "@esbuild/win32-ia32" "0.21.5"
882 | "@esbuild/win32-x64" "0.21.5"
883 |
884 | escalade@^3.2.0:
885 | version "3.2.0"
886 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5"
887 | integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
888 |
889 | escape-string-regexp@^1.0.2:
890 | version "1.0.5"
891 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
892 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
893 |
894 | fast-glob@^3.2.9:
895 | version "3.3.3"
896 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
897 | integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
898 | dependencies:
899 | "@nodelib/fs.stat" "^2.0.2"
900 | "@nodelib/fs.walk" "^1.2.3"
901 | glob-parent "^5.1.2"
902 | merge2 "^1.3.0"
903 | micromatch "^4.0.8"
904 |
905 | fastq@^1.6.0:
906 | version "1.19.1"
907 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5"
908 | integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==
909 | dependencies:
910 | reusify "^1.0.4"
911 |
912 | fecha@^4.2.0:
913 | version "4.2.3"
914 | resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd"
915 | integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==
916 |
917 | fetch-retry@^6.0.0:
918 | version "6.0.0"
919 | resolved "https://registry.yarnpkg.com/fetch-retry/-/fetch-retry-6.0.0.tgz#4ffdf92c834d72ae819e42a4ee2a63f1e9454426"
920 | integrity sha512-BUFj1aMubgib37I3v4q78fYo63Po7t4HUPTpQ6/QE6yK6cIQrP+W43FYToeTEyg5m2Y7eFUtijUuAv/PDlWuag==
921 |
922 | filename-reserved-regex@^2.0.0:
923 | version "2.0.0"
924 | resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229"
925 | integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==
926 |
927 | filenamify@^4.3.0:
928 | version "4.3.0"
929 | resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106"
930 | integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg==
931 | dependencies:
932 | filename-reserved-regex "^2.0.0"
933 | strip-outer "^1.0.1"
934 | trim-repeated "^1.0.0"
935 |
936 | fill-range@^7.1.1:
937 | version "7.1.1"
938 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
939 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
940 | dependencies:
941 | to-regex-range "^5.0.1"
942 |
943 | find-cache-dir@^3.3.1:
944 | version "3.3.2"
945 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b"
946 | integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==
947 | dependencies:
948 | commondir "^1.0.1"
949 | make-dir "^3.0.2"
950 | pkg-dir "^4.1.0"
951 |
952 | find-up@^4.0.0:
953 | version "4.1.0"
954 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
955 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
956 | dependencies:
957 | locate-path "^5.0.0"
958 | path-exists "^4.0.0"
959 |
960 | fn.name@1.x.x:
961 | version "1.1.0"
962 | resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc"
963 | integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==
964 |
965 | fs-extra@^11.1.1:
966 | version "11.3.2"
967 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.2.tgz#c838aeddc6f4a8c74dd15f85e11fe5511bfe02a4"
968 | integrity sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==
969 | dependencies:
970 | graceful-fs "^4.2.0"
971 | jsonfile "^6.0.1"
972 | universalify "^2.0.0"
973 |
974 | fsevents@~2.3.2, fsevents@~2.3.3:
975 | version "2.3.3"
976 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
977 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
978 |
979 | gensync@^1.0.0-beta.2:
980 | version "1.0.0-beta.2"
981 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
982 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
983 |
984 | gh-pages@^6.1.0:
985 | version "6.3.0"
986 | resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-6.3.0.tgz#a5b9476dd4385ceaf85c6467b2e05397093e7613"
987 | integrity sha512-Ot5lU6jK0Eb+sszG8pciXdjMXdBJ5wODvgjR+imihTqsUWF2K6dJ9HST55lgqcs8wWcw6o6wAsUzfcYRhJPXbA==
988 | dependencies:
989 | async "^3.2.4"
990 | commander "^13.0.0"
991 | email-addresses "^5.0.0"
992 | filenamify "^4.3.0"
993 | find-cache-dir "^3.3.1"
994 | fs-extra "^11.1.1"
995 | globby "^11.1.0"
996 |
997 | glob-parent@^5.1.2:
998 | version "5.1.2"
999 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1000 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1001 | dependencies:
1002 | is-glob "^4.0.1"
1003 |
1004 | globby@^11.1.0:
1005 | version "11.1.0"
1006 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
1007 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
1008 | dependencies:
1009 | array-union "^2.1.0"
1010 | dir-glob "^3.0.1"
1011 | fast-glob "^3.2.9"
1012 | ignore "^5.2.0"
1013 | merge2 "^1.4.1"
1014 | slash "^3.0.0"
1015 |
1016 | graceful-fs@^4.1.6, graceful-fs@^4.2.0:
1017 | version "4.2.11"
1018 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
1019 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
1020 |
1021 | hjson@^3.1.2:
1022 | version "3.2.2"
1023 | resolved "https://registry.yarnpkg.com/hjson/-/hjson-3.2.2.tgz#a5a81138f4c0bb427e4b2ac917fafd4b454436cf"
1024 | integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==
1025 |
1026 | http-proxy-agent@^7:
1027 | version "7.0.2"
1028 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
1029 | integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
1030 | dependencies:
1031 | agent-base "^7.1.0"
1032 | debug "^4.3.4"
1033 |
1034 | https-proxy-agent@^7:
1035 | version "7.0.6"
1036 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9"
1037 | integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
1038 | dependencies:
1039 | agent-base "^7.1.2"
1040 | debug "4"
1041 |
1042 | ignore@^5.2.0:
1043 | version "5.3.2"
1044 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
1045 | integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
1046 |
1047 | immutable@^5.0.2:
1048 | version "5.1.4"
1049 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.1.4.tgz#e3f8c1fe7b567d56cf26698f31918c241dae8c1f"
1050 | integrity sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==
1051 |
1052 | inherits@^2.0.3:
1053 | version "2.0.4"
1054 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1055 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1056 |
1057 | invariant@^2.2.4:
1058 | version "2.2.4"
1059 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
1060 | integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
1061 | dependencies:
1062 | loose-envify "^1.0.0"
1063 |
1064 | is-extglob@^2.1.1:
1065 | version "2.1.1"
1066 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1067 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1068 |
1069 | is-glob@^4.0.1, is-glob@^4.0.3:
1070 | version "4.0.3"
1071 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1072 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1073 | dependencies:
1074 | is-extglob "^2.1.1"
1075 |
1076 | is-number@^7.0.0:
1077 | version "7.0.0"
1078 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1079 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1080 |
1081 | is-stream@^2.0.0:
1082 | version "2.0.1"
1083 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
1084 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
1085 |
1086 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
1087 | version "4.0.0"
1088 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1089 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1090 |
1091 | js-yaml@^4.1.0:
1092 | version "4.1.1"
1093 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b"
1094 | integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==
1095 | dependencies:
1096 | argparse "^2.0.1"
1097 |
1098 | jsesc@^3.0.2:
1099 | version "3.1.0"
1100 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d"
1101 | integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==
1102 |
1103 | json5@^2.2.3:
1104 | version "2.2.3"
1105 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
1106 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
1107 |
1108 | jsonfile@^6.0.1:
1109 | version "6.2.0"
1110 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.2.0.tgz#7c265bd1b65de6977478300087c99f1c84383f62"
1111 | integrity sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==
1112 | dependencies:
1113 | universalify "^2.0.0"
1114 | optionalDependencies:
1115 | graceful-fs "^4.1.6"
1116 |
1117 | jsonwebtoken@^9.0.2:
1118 | version "9.0.2"
1119 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
1120 | integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
1121 | dependencies:
1122 | jws "^3.2.2"
1123 | lodash.includes "^4.3.0"
1124 | lodash.isboolean "^3.0.3"
1125 | lodash.isinteger "^4.0.4"
1126 | lodash.isnumber "^3.0.3"
1127 | lodash.isplainobject "^4.0.6"
1128 | lodash.isstring "^4.0.1"
1129 | lodash.once "^4.0.0"
1130 | ms "^2.1.1"
1131 | semver "^7.5.4"
1132 |
1133 | jwa@^1.4.1:
1134 | version "1.4.2"
1135 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.2.tgz#16011ac6db48de7b102777e57897901520eec7b9"
1136 | integrity sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==
1137 | dependencies:
1138 | buffer-equal-constant-time "^1.0.1"
1139 | ecdsa-sig-formatter "1.0.11"
1140 | safe-buffer "^5.0.1"
1141 |
1142 | jws@^3.2.2:
1143 | version "3.2.2"
1144 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
1145 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
1146 | dependencies:
1147 | jwa "^1.4.1"
1148 | safe-buffer "^5.0.1"
1149 |
1150 | kuler@^2.0.0:
1151 | version "2.0.0"
1152 | resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
1153 | integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
1154 |
1155 | locate-path@^5.0.0:
1156 | version "5.0.0"
1157 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
1158 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
1159 | dependencies:
1160 | p-locate "^4.1.0"
1161 |
1162 | lodash.includes@^4.3.0:
1163 | version "4.3.0"
1164 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
1165 | integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==
1166 |
1167 | lodash.isboolean@^3.0.3:
1168 | version "3.0.3"
1169 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
1170 | integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==
1171 |
1172 | lodash.isinteger@^4.0.4:
1173 | version "4.0.4"
1174 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
1175 | integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==
1176 |
1177 | lodash.isnumber@^3.0.3:
1178 | version "3.0.3"
1179 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
1180 | integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==
1181 |
1182 | lodash.isplainobject@^4.0.6:
1183 | version "4.0.6"
1184 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
1185 | integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
1186 |
1187 | lodash.isstring@^4.0.1:
1188 | version "4.0.1"
1189 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
1190 | integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==
1191 |
1192 | lodash.once@^4.0.0:
1193 | version "4.1.1"
1194 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
1195 | integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==
1196 |
1197 | logform@^2.7.0:
1198 | version "2.7.0"
1199 | resolved "https://registry.yarnpkg.com/logform/-/logform-2.7.0.tgz#cfca97528ef290f2e125a08396805002b2d060d1"
1200 | integrity sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==
1201 | dependencies:
1202 | "@colors/colors" "1.6.0"
1203 | "@types/triple-beam" "^1.3.2"
1204 | fecha "^4.2.0"
1205 | ms "^2.1.1"
1206 | safe-stable-stringify "^2.3.1"
1207 | triple-beam "^1.3.0"
1208 |
1209 | loose-envify@^1.0.0, loose-envify@^1.1.0:
1210 | version "1.4.0"
1211 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
1212 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
1213 | dependencies:
1214 | js-tokens "^3.0.0 || ^4.0.0"
1215 |
1216 | lru-cache@^5.1.1:
1217 | version "5.1.1"
1218 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
1219 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
1220 | dependencies:
1221 | yallist "^3.0.2"
1222 |
1223 | make-dir@^3.0.2:
1224 | version "3.1.0"
1225 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
1226 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
1227 | dependencies:
1228 | semver "^6.0.0"
1229 |
1230 | merge2@^1.3.0, merge2@^1.4.1:
1231 | version "1.4.1"
1232 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1233 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1234 |
1235 | micromatch@^4.0.5, micromatch@^4.0.8:
1236 | version "4.0.8"
1237 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
1238 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
1239 | dependencies:
1240 | braces "^3.0.3"
1241 | picomatch "^2.3.1"
1242 |
1243 | ms@^2.1.1, ms@^2.1.3:
1244 | version "2.1.3"
1245 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1246 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1247 |
1248 | nanoid@^3.3.11:
1249 | version "3.3.11"
1250 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b"
1251 | integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==
1252 |
1253 | node-addon-api@^7.0.0:
1254 | version "7.1.1"
1255 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558"
1256 | integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==
1257 |
1258 | node-fetch@^2.6.4:
1259 | version "2.7.0"
1260 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d"
1261 | integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==
1262 | dependencies:
1263 | whatwg-url "^5.0.0"
1264 |
1265 | node-releases@^2.0.27:
1266 | version "2.0.27"
1267 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e"
1268 | integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==
1269 |
1270 | one-time@^1.0.0:
1271 | version "1.0.0"
1272 | resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45"
1273 | integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==
1274 | dependencies:
1275 | fn.name "1.x.x"
1276 |
1277 | p-limit@^2.2.0:
1278 | version "2.3.0"
1279 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1280 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1281 | dependencies:
1282 | p-try "^2.0.0"
1283 |
1284 | p-locate@^4.1.0:
1285 | version "4.1.0"
1286 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1287 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1288 | dependencies:
1289 | p-limit "^2.2.0"
1290 |
1291 | p-try@^2.0.0:
1292 | version "2.2.0"
1293 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1294 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1295 |
1296 | path-exists@^4.0.0:
1297 | version "4.0.0"
1298 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1299 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1300 |
1301 | path-type@^4.0.0:
1302 | version "4.0.0"
1303 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1304 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1305 |
1306 | picocolors@^1.1.1:
1307 | version "1.1.1"
1308 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
1309 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
1310 |
1311 | picomatch@^2.3.1:
1312 | version "2.3.1"
1313 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1314 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1315 |
1316 | pkg-dir@^4.1.0:
1317 | version "4.2.0"
1318 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
1319 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
1320 | dependencies:
1321 | find-up "^4.0.0"
1322 |
1323 | postcss@^8.4.43:
1324 | version "8.5.6"
1325 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c"
1326 | integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==
1327 | dependencies:
1328 | nanoid "^3.3.11"
1329 | picocolors "^1.1.1"
1330 | source-map-js "^1.2.1"
1331 |
1332 | proxy-from-env@^1.1.0:
1333 | version "1.1.0"
1334 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
1335 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
1336 |
1337 | queue-microtask@^1.2.2:
1338 | version "1.2.3"
1339 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
1340 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
1341 |
1342 | react-dom@^18.2.0:
1343 | version "18.3.1"
1344 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4"
1345 | integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==
1346 | dependencies:
1347 | loose-envify "^1.1.0"
1348 | scheduler "^0.23.2"
1349 |
1350 | react-fast-compare@^3.2.2:
1351 | version "3.2.2"
1352 | resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49"
1353 | integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==
1354 |
1355 | react-helmet-async@^2.0.4:
1356 | version "2.0.5"
1357 | resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.5.tgz#cfc70cd7bb32df7883a8ed55502a1513747223ec"
1358 | integrity sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg==
1359 | dependencies:
1360 | invariant "^2.2.4"
1361 | react-fast-compare "^3.2.2"
1362 | shallowequal "^1.1.0"
1363 |
1364 | react-refresh@^0.17.0:
1365 | version "0.17.0"
1366 | resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.17.0.tgz#b7e579c3657f23d04eccbe4ad2e58a8ed51e7e53"
1367 | integrity sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==
1368 |
1369 | react-router-dom@^7.9.6:
1370 | version "7.9.6"
1371 | resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-7.9.6.tgz#f2a0d12961d67bd87ab48e5ef42fa1f45beae357"
1372 | integrity sha512-2MkC2XSXq6HjGcihnx1s0DBWQETI4mlis4Ux7YTLvP67xnGxCvq+BcCQSO81qQHVUTM1V53tl4iVVaY5sReCOA==
1373 | dependencies:
1374 | react-router "7.9.6"
1375 |
1376 | react-router@7.9.6:
1377 | version "7.9.6"
1378 | resolved "https://registry.yarnpkg.com/react-router/-/react-router-7.9.6.tgz#003c8de335fdd7390286a478dcfd9579c1826137"
1379 | integrity sha512-Y1tUp8clYRXpfPITyuifmSoE2vncSME18uVLgaqyxh9H35JWpIfzHo+9y3Fzh5odk/jxPW29IgLgzcdwxGqyNA==
1380 | dependencies:
1381 | cookie "^1.0.1"
1382 | set-cookie-parser "^2.6.0"
1383 |
1384 | react@^18.2.0:
1385 | version "18.3.1"
1386 | resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891"
1387 | integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==
1388 | dependencies:
1389 | loose-envify "^1.1.0"
1390 |
1391 | readable-stream@^3.4.0, readable-stream@^3.6.2:
1392 | version "3.6.2"
1393 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
1394 | integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
1395 | dependencies:
1396 | inherits "^2.0.3"
1397 | string_decoder "^1.1.1"
1398 | util-deprecate "^1.0.1"
1399 |
1400 | readdirp@^4.0.1:
1401 | version "4.1.2"
1402 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d"
1403 | integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==
1404 |
1405 | reusify@^1.0.4:
1406 | version "1.1.0"
1407 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f"
1408 | integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==
1409 |
1410 | rollup@^4.20.0:
1411 | version "4.53.3"
1412 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.53.3.tgz#dbc8cd8743b38710019fb8297e8d7a76e3faa406"
1413 | integrity sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==
1414 | dependencies:
1415 | "@types/estree" "1.0.8"
1416 | optionalDependencies:
1417 | "@rollup/rollup-android-arm-eabi" "4.53.3"
1418 | "@rollup/rollup-android-arm64" "4.53.3"
1419 | "@rollup/rollup-darwin-arm64" "4.53.3"
1420 | "@rollup/rollup-darwin-x64" "4.53.3"
1421 | "@rollup/rollup-freebsd-arm64" "4.53.3"
1422 | "@rollup/rollup-freebsd-x64" "4.53.3"
1423 | "@rollup/rollup-linux-arm-gnueabihf" "4.53.3"
1424 | "@rollup/rollup-linux-arm-musleabihf" "4.53.3"
1425 | "@rollup/rollup-linux-arm64-gnu" "4.53.3"
1426 | "@rollup/rollup-linux-arm64-musl" "4.53.3"
1427 | "@rollup/rollup-linux-loong64-gnu" "4.53.3"
1428 | "@rollup/rollup-linux-ppc64-gnu" "4.53.3"
1429 | "@rollup/rollup-linux-riscv64-gnu" "4.53.3"
1430 | "@rollup/rollup-linux-riscv64-musl" "4.53.3"
1431 | "@rollup/rollup-linux-s390x-gnu" "4.53.3"
1432 | "@rollup/rollup-linux-x64-gnu" "4.53.3"
1433 | "@rollup/rollup-linux-x64-musl" "4.53.3"
1434 | "@rollup/rollup-openharmony-arm64" "4.53.3"
1435 | "@rollup/rollup-win32-arm64-msvc" "4.53.3"
1436 | "@rollup/rollup-win32-ia32-msvc" "4.53.3"
1437 | "@rollup/rollup-win32-x64-gnu" "4.53.3"
1438 | "@rollup/rollup-win32-x64-msvc" "4.53.3"
1439 | fsevents "~2.3.2"
1440 |
1441 | run-parallel@^1.1.9:
1442 | version "1.2.0"
1443 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
1444 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
1445 | dependencies:
1446 | queue-microtask "^1.2.2"
1447 |
1448 | safe-buffer@^5.0.1, safe-buffer@~5.2.0:
1449 | version "5.2.1"
1450 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1451 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1452 |
1453 | safe-stable-stringify@^2.3.1:
1454 | version "2.5.0"
1455 | resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd"
1456 | integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==
1457 |
1458 | sass@^1.94.1:
1459 | version "1.94.1"
1460 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.94.1.tgz#79f726f2bdc347a387a954d4c967ac73efdb6676"
1461 | integrity sha512-/YVm5FRQaRlr3oNh2LLFYne1PdPlRZGyKnHh1sLleOqLcohTR4eUUvBjBIqkl1fEXd1MGOHgzJGJh+LgTtV4KQ==
1462 | dependencies:
1463 | chokidar "^4.0.0"
1464 | immutable "^5.0.2"
1465 | source-map-js ">=0.6.2 <2.0.0"
1466 | optionalDependencies:
1467 | "@parcel/watcher" "^2.4.1"
1468 |
1469 | scheduler@^0.23.2:
1470 | version "0.23.2"
1471 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3"
1472 | integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==
1473 | dependencies:
1474 | loose-envify "^1.1.0"
1475 |
1476 | semver@^6.0.0, semver@^6.3.1:
1477 | version "6.3.1"
1478 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
1479 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
1480 |
1481 | semver@^7.5.4:
1482 | version "7.7.3"
1483 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946"
1484 | integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==
1485 |
1486 | set-cookie-parser@^2.6.0:
1487 | version "2.7.2"
1488 | resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz#ccd08673a9ae5d2e44ea2a2de25089e67c7edf68"
1489 | integrity sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==
1490 |
1491 | shallowequal@^1.1.0:
1492 | version "1.1.0"
1493 | resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8"
1494 | integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
1495 |
1496 | slash@^3.0.0:
1497 | version "3.0.0"
1498 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
1499 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
1500 |
1501 | "source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.1:
1502 | version "1.2.1"
1503 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
1504 | integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
1505 |
1506 | stack-trace@0.0.x:
1507 | version "0.0.10"
1508 | resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
1509 | integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==
1510 |
1511 | string_decoder@^1.1.1:
1512 | version "1.3.0"
1513 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
1514 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1515 | dependencies:
1516 | safe-buffer "~5.2.0"
1517 |
1518 | strip-outer@^1.0.1:
1519 | version "1.0.1"
1520 | resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
1521 | integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==
1522 | dependencies:
1523 | escape-string-regexp "^1.0.2"
1524 |
1525 | text-hex@1.0.x:
1526 | version "1.0.0"
1527 | resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"
1528 | integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==
1529 |
1530 | to-regex-range@^5.0.1:
1531 | version "5.0.1"
1532 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1533 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1534 | dependencies:
1535 | is-number "^7.0.0"
1536 |
1537 | tr46@~0.0.3:
1538 | version "0.0.3"
1539 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
1540 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
1541 |
1542 | trim-repeated@^1.0.0:
1543 | version "1.0.0"
1544 | resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
1545 | integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==
1546 | dependencies:
1547 | escape-string-regexp "^1.0.2"
1548 |
1549 | triple-beam@^1.3.0:
1550 | version "1.4.1"
1551 | resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984"
1552 | integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==
1553 |
1554 | universalify@^2.0.0:
1555 | version "2.0.1"
1556 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d"
1557 | integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==
1558 |
1559 | update-browserslist-db@^1.1.4:
1560 | version "1.1.4"
1561 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a"
1562 | integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==
1563 | dependencies:
1564 | escalade "^3.2.0"
1565 | picocolors "^1.1.1"
1566 |
1567 | util-deprecate@^1.0.1:
1568 | version "1.0.2"
1569 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
1570 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
1571 |
1572 | vite@^5.0.8:
1573 | version "5.4.21"
1574 | resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.21.tgz#84a4f7c5d860b071676d39ba513c0d598fdc7027"
1575 | integrity sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==
1576 | dependencies:
1577 | esbuild "^0.21.3"
1578 | postcss "^8.4.43"
1579 | rollup "^4.20.0"
1580 | optionalDependencies:
1581 | fsevents "~2.3.3"
1582 |
1583 | webidl-conversions@^3.0.0:
1584 | version "3.0.1"
1585 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
1586 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
1587 |
1588 | whatwg-url@^5.0.0:
1589 | version "5.0.0"
1590 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
1591 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
1592 | dependencies:
1593 | tr46 "~0.0.3"
1594 | webidl-conversions "^3.0.0"
1595 |
1596 | winston-transport@^4.9.0:
1597 | version "4.9.0"
1598 | resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.9.0.tgz#3bba345de10297654ea6f33519424560003b3bf9"
1599 | integrity sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==
1600 | dependencies:
1601 | logform "^2.7.0"
1602 | readable-stream "^3.6.2"
1603 | triple-beam "^1.3.0"
1604 |
1605 | winston@^3.2.1:
1606 | version "3.18.3"
1607 | resolved "https://registry.yarnpkg.com/winston/-/winston-3.18.3.tgz#93ac10808c8e1081d723bc8811cd2f445ddfdcd1"
1608 | integrity sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==
1609 | dependencies:
1610 | "@colors/colors" "^1.6.0"
1611 | "@dabh/diagnostics" "^2.0.8"
1612 | async "^3.2.3"
1613 | is-stream "^2.0.0"
1614 | logform "^2.7.0"
1615 | one-time "^1.0.0"
1616 | readable-stream "^3.4.0"
1617 | safe-stable-stringify "^2.3.1"
1618 | stack-trace "0.0.x"
1619 | triple-beam "^1.3.0"
1620 | winston-transport "^4.9.0"
1621 |
1622 | yallist@^3.0.2:
1623 | version "3.1.1"
1624 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
1625 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
1626 |
--------------------------------------------------------------------------------