diff --git a/site/cypress/integration/mon-entreprise/covid19.js b/site/cypress/integration/mon-entreprise/covid19.js index 87b4a65e7..fc367c9e3 100644 --- a/site/cypress/integration/mon-entreprise/covid19.js +++ b/site/cypress/integration/mon-entreprise/covid19.js @@ -9,11 +9,13 @@ describe('Page covid-19', function () { if (!fr) { return } - before(() => cy.visit(encodeURI('/simulateurs/chômage-partiel'))) - it('should not crash', () => { + before(function () { + return cy.visit(encodeURI('/simulateurs/chômage-partiel')) + }) + it('should not crash', function () { cy.contains('Salaire brut mensuel') }) - it('should display 100% de prise en charge pour un SMIC', () => { + it('should display 100% de prise en charge pour un SMIC', function () { cy.contains('SMIC').click() testText('comparaison-net', (text) => expect(text).to.eq('Soit 100 % du revenu net') @@ -22,7 +24,7 @@ describe('Page covid-19', function () { expect(text).to.eq('Soit 0 % du coût habituel') ) }) - it('should display an amount for the prise en charge pour un salaire médian', () => { + it('should display an amount for the prise en charge pour un salaire médian', function () { cy.contains('salaire médian').click() testText('comparaison-net', (text) => expect(text).to.match(/Soit [\d]{2} % du revenu net/) diff --git a/site/cypress/integration/mon-entreprise/demande-mobilité.js b/site/cypress/integration/mon-entreprise/demande-mobilité.js index 2f206a1b6..3ba44f683 100644 --- a/site/cypress/integration/mon-entreprise/demande-mobilité.js +++ b/site/cypress/integration/mon-entreprise/demande-mobilité.js @@ -15,7 +15,7 @@ describe(`Formulaire demande mobilité (${ let responses = {} const hostnamesToRecord = ['geo.api.gouv.fr'] - beforeEach(() => { + beforeEach(function () { pendingRequests = new Set() responses = {} cy.setInterceptResponses( @@ -26,7 +26,7 @@ describe(`Formulaire demande mobilité (${ ) cy.visit(encodeURI('/gérer/demande-mobilité')) }) - afterEach(() => { + afterEach(function () { cy.writeInterceptResponses( pendingRequests, responses, @@ -34,7 +34,7 @@ describe(`Formulaire demande mobilité (${ ) }) - it('should allow to complete and download', () => { + it('should allow to complete and download', function () { cy.contains('Salarié').click().wait(500) cy.focused().tab().type('{downarrow}') diff --git a/site/cypress/integration/mon-entreprise/english/navigation.js b/site/cypress/integration/mon-entreprise/english/navigation.js index 6ca06dc7f..fd20c6a49 100644 --- a/site/cypress/integration/mon-entreprise/english/navigation.js +++ b/site/cypress/integration/mon-entreprise/english/navigation.js @@ -6,7 +6,7 @@ const GERER_FIXTURES_FOLDER = `${FIXTURES_FOLDER}/gérer` const writeFixtures = Cypress.env('record_http') !== undefined describe('General navigation', function () { - it('should enable switching site language', () => { + it('should enable switching site language', function () { cy.visit( fr ? encodeURI('/créer/auto-entrepreneur') : '/create/auto-entrepreneur' ) @@ -17,7 +17,7 @@ describe('General navigation', function () { ) }) - it('should go back to home when clicking on logo', () => { + it('should go back to home when clicking on logo', function () { cy.visit(encodeURI('/documentation/contrat-salarié')) cy.get('[data-test-id="logo img"]').click() cy.url().should('match', new RegExp(`${Cypress.config().baseUrl}/?`)) @@ -33,7 +33,7 @@ describe(`Navigation to income simulator using company name (${ 'search-recherche-entreprises.fabrique.social.gouv.fr', 'geo.api.gouv.fr', ] - beforeEach(() => { + beforeEach(function () { cy.clearLocalStorage() // Try to avoid flaky tests pendingRequests = new Set() @@ -46,7 +46,7 @@ describe(`Navigation to income simulator using company name (${ ) cy.visit('/') }) - afterEach(() => { + afterEach(function () { cy.writeInterceptResponses( pendingRequests, responses, diff --git a/site/cypress/integration/mon-entreprise/english/status.js b/site/cypress/integration/mon-entreprise/english/status.js index f4e7a5d93..d7e18ed70 100644 --- a/site/cypress/integration/mon-entreprise/english/status.js +++ b/site/cypress/integration/mon-entreprise/english/status.js @@ -1,6 +1,6 @@ describe('Status guide', function () { const fr = Cypress.env('language') === 'fr' - beforeEach(() => { + beforeEach(function () { cy.visit(fr ? encodeURI('/créer') : '/create') cy.contains(fr ? 'Trouver le bon statut' : 'Find the right status').click() }) diff --git a/site/cypress/integration/mon-entreprise/localisation-field.js b/site/cypress/integration/mon-entreprise/localisation-field.js index 8b567b98c..2b7591702 100644 --- a/site/cypress/integration/mon-entreprise/localisation-field.js +++ b/site/cypress/integration/mon-entreprise/localisation-field.js @@ -1,10 +1,12 @@ const fr = Cypress.env('language') === 'fr' -describe('Champs localisation (simulateur salarié)', () => { +describe('Champs localisation (simulateur salarié)', function () { if (!fr) { return } - before(() => cy.visit(encodeURI('/simulateurs/salarié'))) + before(function () { + return cy.visit(encodeURI('/simulateurs/salarié')) + }) it('should not crash when selecting localisation', function () { cy.contains('SMIC').click() diff --git a/site/cypress/integration/mon-entreprise/partage-simulation.js b/site/cypress/integration/mon-entreprise/partage-simulation.js index 3e8633394..ab512d322 100644 --- a/site/cypress/integration/mon-entreprise/partage-simulation.js +++ b/site/cypress/integration/mon-entreprise/partage-simulation.js @@ -1,6 +1,6 @@ const fr = Cypress.env('language') === 'fr' -describe('Partage (simulateur salarié)', () => { +describe('Partage (simulateur salarié)', function () { const brutInputSelector = '#contrat\\ salarié\\ \\.\\ rémunération\\ \\.\\ brut\\ de\\ base' const simulatorUrl = '/simulateurs/salaire-brut-net' diff --git a/site/cypress/integration/mon-entreprise/persistence-simulation.js b/site/cypress/integration/mon-entreprise/persistence-simulation.js index cc98d8f73..eeb71cdc7 100644 --- a/site/cypress/integration/mon-entreprise/persistence-simulation.js +++ b/site/cypress/integration/mon-entreprise/persistence-simulation.js @@ -1,11 +1,13 @@ const inputSelector = 'div[aria-labelledby="simulator-legend"] input' const fr = Cypress.env('language') === 'fr' -describe('Persistence (simulateur salarié)', () => { +describe('Persistence (simulateur salarié)', function () { if (!fr) { return } - before(() => cy.visit(encodeURI('/simulateurs/salarié'))) - beforeEach(() => { + before(function () { + return cy.visit(encodeURI('/simulateurs/salarié')) + }) + beforeEach(function () { cy.clearLocalStorage() }) diff --git a/site/cypress/integration/mon-entreprise/recherche.js b/site/cypress/integration/mon-entreprise/recherche.js index cf743b320..b2d0647e0 100644 --- a/site/cypress/integration/mon-entreprise/recherche.js +++ b/site/cypress/integration/mon-entreprise/recherche.js @@ -1,11 +1,11 @@ const fr = Cypress.env('language') === 'fr' -describe('Recherche globales', () => { +describe('Recherche globales', function () { if (!fr || Cypress.config().baseUrl != 'https://mon-entreprise.urssaf.fr') { return } - it('should display the search results when the magnifying glass is clicked', () => { + it('should display the search results when the magnifying glass is clicked', function () { cy.visit('/') cy.contains('Rechercher').click() diff --git a/site/cypress/integration/mon-entreprise/simulateur-ae.js b/site/cypress/integration/mon-entreprise/simulateur-ae.js index d9d80debe..01b1f4214 100644 --- a/site/cypress/integration/mon-entreprise/simulateur-ae.js +++ b/site/cypress/integration/mon-entreprise/simulateur-ae.js @@ -2,20 +2,22 @@ const fr = Cypress.env('language') === 'fr' const inputSelector = 'div[aria-labelledby="simulator-legend"] input[inputmode="numeric"]' -describe('Simulateur auto-entrepreneur', () => { +describe('Simulateur auto-entrepreneur', function () { if (!fr) { return } - before(() => cy.visit('/simulateurs/auto-entrepreneur')) + before(function () { + return cy.visit('/simulateurs/auto-entrepreneur') + }) - it('should allow to enter the date of creation', () => { + it('should allow to enter the date of creation', function () { cy.get(inputSelector).first().type('{selectall}50000') cy.contains('Passer').click() cy.contains('Passer').click() cy.contains('Début 2022').click() cy.contains('ACRE') }) - it('should not have negative value', () => { + it('should not have negative value', function () { cy.contains('Mensuel').click() cy.wait(100) cy.get(inputSelector).first().type('{selectall}5000') diff --git a/site/cypress/integration/mon-entreprise/simulateur-dividendes.js b/site/cypress/integration/mon-entreprise/simulateur-dividendes.js index 3fb258cbb..fb360d58d 100644 --- a/site/cypress/integration/mon-entreprise/simulateur-dividendes.js +++ b/site/cypress/integration/mon-entreprise/simulateur-dividendes.js @@ -1,19 +1,21 @@ const inputSelector = 'div[aria-labelledby="simulator-legend"] input' const fr = Cypress.env('language') === 'fr' -describe('Simulateur dividendes', () => { +describe('Simulateur dividendes', function () { if (!fr) { return } - before(() => cy.visit('/simulateurs/dividendes')) + before(function () { + return cy.visit('/simulateurs/dividendes') + }) - it('should show by default the PFU calculation at 12.8 / 17.2', () => { + it('should show by default the PFU calculation at 12.8 / 17.2', function () { cy.get(inputSelector).first().type('{selectall}5000') cy.contains(/[cC]otisations\s+17,2\s*%/) cy.contains(/[Ii]mpôt\s+12,8\s*%/) }) - it('should allow switching PFU with barème', () => { + it('should allow switching PFU with barème', function () { cy.get('div [role="radiogroup"] input').eq(0).should('not.be.checked') }) }) diff --git a/site/cypress/integration/mon-entreprise/simulateur-salarie.js b/site/cypress/integration/mon-entreprise/simulateur-salarie.js index 92e9c7def..a64515bac 100644 --- a/site/cypress/integration/mon-entreprise/simulateur-salarie.js +++ b/site/cypress/integration/mon-entreprise/simulateur-salarie.js @@ -1,13 +1,15 @@ const fr = Cypress.env('language') === 'fr' -describe('Simulateur salarié', () => { +describe('Simulateur salarié', function () { if (!fr) { return } - before(() => cy.visit(encodeURI('/simulateurs/salarié'))) + before(function () { + return cy.visit(encodeURI('/simulateurs/salarié')) + }) - describe('part time contract', () => { - before(() => { + describe('part time contract', function () { + before(function () { cy.get('button').contains('SMIC').click() cy.contains('Voir mes paramètres').click() cy.get('div[role="dialog"]').contains('Temps partiel').click() @@ -15,7 +17,7 @@ describe('Simulateur salarié', () => { cy.wait(100) }) - it('should permit selecting the smic before part-time contrat', () => { + it('should permit selecting the smic before part-time contrat', function () { cy.get( '#contrat\\ salarié\\ \\.\\ rémunération\\ \\.\\ brut\\ de\\ base' ).should(($input) => { @@ -25,7 +27,7 @@ describe('Simulateur salarié', () => { }) }) - it('should permit customizing the number of worked hours and clear the input value', () => { + it('should permit customizing the number of worked hours and clear the input value', function () { cy.contains('Suivant').click() cy.focused().type(25) cy.get( diff --git a/site/cypress/support/simulateur.js b/site/cypress/support/simulateur.js index 6ea97cfe5..718e295c9 100644 --- a/site/cypress/support/simulateur.js +++ b/site/cypress/support/simulateur.js @@ -5,17 +5,17 @@ const chargeInputSelector = const fr = Cypress.env('language') === 'fr' export const runSimulateurTest = (simulateur) => { - describe(`Simulateur ${simulateur}`, () => { - before(() => - cy.visit( + describe(`Simulateur ${simulateur}`, function () { + before(function () { + return cy.visit( encodeURI(`/${fr ? 'simulateurs' : 'calculators'}/${simulateur}`) ) - ) + }) it('should not crash', function () { cy.get(inputSelector) }) - it('should display a result when entering a value in any of the currency input', () => { + it('should display a result when entering a value in any of the currency input', function () { cy.contains(fr ? 'Annuel' : 'Yearly').click() if (['indépendant', 'profession-liberale'].includes(simulateur)) { cy.get(chargeInputSelector).type(1000) diff --git a/site/package.json b/site/package.json index 82ce7e13c..2264481f6 100644 --- a/site/package.json +++ b/site/package.json @@ -40,7 +40,6 @@ "i18n:rules:translate": "node scripts/i18n/translate-rules.js", "i18n:ui:check": "i18next -c scripts/i18n/parser.config.cjs && node scripts/i18n/check-missing-UI-translation", "i18n:ui:translate": "rm -rf source/locales/static-analysis-fr.json && i18next -c scripts/i18n/parser.config.cjs && node scripts/i18n/translate-ui.js" - }, "resolutions": { "@mui/styled-engine": "npm:@mui/styled-engine-sc@latest" @@ -72,7 +71,6 @@ "@sentry/tracing": "^6.3.5", "algoliasearch": "^4.10.2", "fuse.js": "^6.4.6", - "iframe-resizer": "^4.1.1", "markdown-to-jsx": "^7.1.5", "modele-social": "^0.5.0", "publicodes": "^1.0.0-beta.30", @@ -112,6 +110,7 @@ "@types/react-router": "^5.1.2", "@types/react-router-dom": "^5.3.2", "@types/recharts": "^1.8.16", + "@types/serve-static": "^1.13.10", "@types/styled-components": "^5.1.9", "@typescript-eslint/eslint-plugin": "^5.10.2", "@typescript-eslint/parser": "^5.10.2", @@ -133,6 +132,7 @@ "prettier": "^2.5.1", "rimraf": "^3.0.2", "rollup-plugin-toml": "^1.0.0", + "serve-static": "^1.14.2", "typescript": "^4.3.2", "vite": "^2.7.13", "vite-plugin-shim-react-pdf": "^1.0.4", diff --git a/site/source/App.tsx b/site/source/App.tsx index 9bd9cfe1f..ab55e00a9 100644 --- a/site/source/App.tsx +++ b/site/source/App.tsx @@ -10,7 +10,6 @@ import { } from 'Components/utils/EngineContext' import { SitePathsContext } from 'Components/utils/SitePathsContext' import { Container, Spacing } from 'DesignSystem/layout' -import 'iframe-resizer' import { StrictMode, useContext, useMemo } from 'react' import { Helmet } from 'react-helmet-async' import { useTranslation } from 'react-i18next' diff --git a/site/source/Provider.tsx b/site/source/Provider.tsx index 8d4072ec4..470fe1564 100644 --- a/site/source/Provider.tsx +++ b/site/source/Provider.tsx @@ -12,9 +12,9 @@ import { Link } from 'DesignSystem/typography/link' import { Body, Intro } from 'DesignSystem/typography/paragraphs' import { createBrowserHistory } from 'history' import i18next from 'i18next' -import 'iframe-resizer' import logo from 'Images/logo-monentreprise.svg' -import React, { createContext, useEffect, useMemo, useState } from 'react' +import { useIframeResizer } from 'Hooks/useIframeResizer' +import React, { createContext, useMemo } from 'react' import { HelmetProvider } from 'react-helmet-async' import { I18nextProvider } from 'react-i18next' import { Provider as ReduxProvider } from 'react-redux' @@ -28,6 +28,7 @@ import { PreloadedState, Store, } from 'redux' + // ATInternet Tracking import { TrackingContext } from './ATInternetTracking' import { createTracker } from './ATInternetTracking/Tracker' @@ -83,6 +84,8 @@ export default function Provider({ }, []) onStoreCreated?.(store) + useIframeResizer() + return ( diff --git a/site/source/components/Simulation/SimulationGoals.tsx b/site/source/components/Simulation/SimulationGoals.tsx index 11784f7f1..72b1d2445 100644 --- a/site/source/components/Simulation/SimulationGoals.tsx +++ b/site/source/components/Simulation/SimulationGoals.tsx @@ -87,7 +87,7 @@ function TopSection({ toggles }: { toggles?: React.ReactNode }) { justifyContent="center" > diff --git a/site/source/components/utils/embeddedContext.tsx b/site/source/components/utils/embeddedContext.tsx index 7fedf879d..dc1a1fc7b 100644 --- a/site/source/components/utils/embeddedContext.tsx +++ b/site/source/components/utils/embeddedContext.tsx @@ -1,4 +1,10 @@ -import React, { createContext, ReactNode, useContext, useState } from 'react' +import React, { + createContext, + ReactNode, + useContext, + useEffect, + useState, +} from 'react' /* Instead of relying on a contextual Provider that activates the diff --git a/site/source/hooks/useIframeResizer.ts b/site/source/hooks/useIframeResizer.ts new file mode 100644 index 000000000..6ac74f637 --- /dev/null +++ b/site/source/hooks/useIframeResizer.ts @@ -0,0 +1,20 @@ +import { useEffect } from 'react' + +export function useIframeResizer() { + useEffect(() => { + // The code below communicate with the iframe.js script on a host site + // to automatically resize the iframe when its inner content height + // change. + if (!window.location.search.includes('iframe')) { + return + } + const minHeight = 700 // Also used in iframe.js + const observer = new ResizeObserver(([entry]) => { + const value = Math.max(minHeight, entry.contentRect.height) + window.parent?.postMessage({ kind: 'resize-height', value }, '*') + }) + observer.observe(window.document.body) + + return () => observer.disconnect() + }, []) +} diff --git a/site/source/iframe-integration-script.js b/site/source/iframe-integration-script.js index a68c14c93..a3b301c3d 100644 --- a/site/source/iframe-integration-script.js +++ b/site/source/iframe-integration-script.js @@ -1,5 +1,3 @@ -import { iframeResizer } from 'iframe-resizer' - import { hexToHSL } from './hexToHSL' let script = @@ -37,13 +35,6 @@ const iframeAttributes = { for (var key in iframeAttributes) { iframe.setAttribute(key, iframeAttributes[key]) } -iframeResizer( - { - interval: 0, - heightCalculationMethod: 'taggedElement', - }, - iframe -) const links = document.createElement('div') const moduleToSitePath = { @@ -54,8 +45,11 @@ const moduleToSitePath = { } const simulateurLink = import.meta.env.VITE_FR_BASE_URL + moduleToSitePath[moduleName] ?? '' + const url = new URL(simulateurLink) + const params = new URLSearchParams(url.search) + params.append('utm_source', 'iframe') params.append('utm_medium', 'iframe') params.append('utm_campaign', 'newtext') @@ -73,3 +67,9 @@ links.innerHTML = ` script.parentNode.insertBefore(iframe, script) script.parentNode.insertBefore(links, script) + +window.addEventListener('message', function (evt) { + if (evt.data.kind === 'resize-height') { + iframe.style.height = evt.data.value + 'px' + } +}) diff --git a/site/vite.config.ts b/site/vite.config.ts index 4cc47058e..1beeab608 100644 --- a/site/vite.config.ts +++ b/site/vite.config.ts @@ -7,6 +7,7 @@ import toml from 'rollup-plugin-toml' import { defineConfig, Plugin } from 'vite' import { watchDottedNames } from '../modele-social/build.js' import shimReactPdf from 'vite-plugin-shim-react-pdf' +import serveStatic from 'serve-static' export default defineConfig({ resolve: { @@ -85,12 +86,17 @@ function multipleSPA(options: MultipleSPAOptions): Plugin { .replace(/\{\{(.+)\}\}/g, (_match, p1) => siteData[p1.trim()]) return filledTemplate } - return { name: 'multiple-spa', enforce: 'pre', configureServer(vite) { + vite.middlewares.use( + '/simulateur-iframe-integration.js', + serveStatic(new URL('./dist', import.meta.url).pathname, { + index: 'simulateur-iframe-integration.js', + }) + ) // eslint-disable-next-line @typescript-eslint/no-misused-promises vite.middlewares.use(async (req, res, next) => { const url = req.originalUrl diff --git a/yarn.lock b/yarn.lock index a527aaa9f..209371cb3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1665,6 +1665,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" @@ -1804,6 +1809,14 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== +"@types/serve-static@^1.13.10": + version "1.13.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/sinonjs__fake-timers@^6.0.2": version "6.0.4" resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.4.tgz#0ecc1b9259b76598ef01942f547904ce61a6a77d" @@ -2848,7 +2861,7 @@ debounce@^1.2.1: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@^2.2.0: +debug@2.6.9, debug@^2.2.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2910,6 +2923,16 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + dfa@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/dfa/-/dfa-1.2.0.tgz#96ac3204e2d29c49ea5b57af8d92c2ae12790657" @@ -3009,6 +3032,11 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + electron-to-chromium@^1.4.17: version "1.4.53" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.53.tgz#5d80a91c399b44952ef485857fb5b9d4387d2e60" @@ -3019,6 +3047,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + encoding@^0.1.11: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -3215,6 +3248,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -3428,6 +3466,11 @@ esutils@~1.0.0: resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.0.0.tgz#8151d358e20c8acc7fb745e7472c0025fe496570" integrity sha1-gVHTWOIMisx/t0XnRywAJf5JZXA= +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + eventemitter2@^6.4.3: version "6.4.5" resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.5.tgz#97380f758ae24ac15df8353e0cc27f8b95644655" @@ -3616,6 +3659,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + fs-extra@^10.0.0: version "10.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" @@ -3947,6 +3995,17 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + http-signature@~1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" @@ -4009,11 +4068,6 @@ ieee754@^1.2.1: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -iframe-resizer@^4.1.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/iframe-resizer/-/iframe-resizer-4.3.2.tgz#42dd88345d18b9e377b6044dddb98c664ab0ce6b" - integrity sha512-gOWo2hmdPjMQsQ+zTKbses08mDfDEMh4NneGQNP4qwePYujY1lguqP6gnbeJkf154gojWlBhIltlgnMfYjGHWA== - ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -4050,7 +4104,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4635,6 +4689,11 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.51.0" +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -4680,7 +4739,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -4828,6 +4887,13 @@ object.values@^1.1.5: define-properties "^1.1.3" es-abstract "^1.19.1" +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -4917,6 +4983,11 @@ parse5@^6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -5166,6 +5237,11 @@ randexp@0.4.6: discontinuous-range "1.0.0" ret "~0.1.10" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + react-color@^2.14.0: version "2.19.3" resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.19.3.tgz#ec6c6b4568312a3c6a18420ab0472e146aa5683d" @@ -5716,6 +5792,40 @@ semver@^7.3.5: dependencies: lru-cache "^6.0.0" +send@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" + integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "1.8.1" + mime "1.6.0" + ms "2.1.3" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serve-static@^1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" + integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.2" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" @@ -5836,6 +5946,11 @@ sshpk@^1.14.1: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" @@ -6090,6 +6205,11 @@ to-through@^2.0.0: dependencies: through2 "^2.0.3" +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + toml@^2.3.3: version "2.3.6" resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.6.tgz#25b0866483a9722474895559088b436fd11f861b"