diff --git a/docs/basi-del-linguaggio/input.mdx b/docs/basi-del-linguaggio/input.mdx
index 0571b07..de50d9c 100644
--- a/docs/basi-del-linguaggio/input.mdx
+++ b/docs/basi-del-linguaggio/input.mdx
@@ -16,7 +16,7 @@ variabile = input("Messaggio per l'utente: ")
### Esempio
-```py live_py
+```py live
name = input("Come ti chiami? ")
print(f"Ciao, {name}!")
```
@@ -44,7 +44,7 @@ Se si inserisce un valore non valido per la conversione (ad esempio, testo anzic
### Esempio con numeri interi:
-```py live_py
+```py live
age = input("Quanti anni hai? ")
year_of_birth = 2025 - int(age) # Converte la stringa in un intero
print(f"Sei nato nell'anno {year_of_birth}.")
@@ -52,7 +52,7 @@ print(f"Sei nato nell'anno {year_of_birth}.")
### Esempio con numeri decimali:
-```py live_py
+```py live
height = input("Qual è la tua altezza in metri? ")
height = float(height) # Converte la stringa in un numero decimale
print(f"La tua altezza in centimetri è {height * 100}.")
diff --git a/docs/basi-del-linguaggio/le-stringhe.mdx b/docs/basi-del-linguaggio/le-stringhe.mdx
index 1d470e8..3070096 100644
--- a/docs/basi-del-linguaggio/le-stringhe.mdx
+++ b/docs/basi-del-linguaggio/le-stringhe.mdx
@@ -24,7 +24,7 @@ hacker = "Kevin \"Condor\" Mitnick"
## Unire più stringhe: la concatenazione
La **concatenazione** di stringhe è una pratica comune in programmazione e consiste nell'unire due o più stringhe per formarne una più lunga. Questa operazione è utile quando si desidera costruire un messaggio o una frase combinando parti di testo. Python offre diverse modalità per eseguire la concatenazione, una delle quali è l'utilizzo dell'operatore `+`. Ecco un esempio:
-```py live_py
+```py live
# Esempio di concatenazione di stringhe
greeting = "It's-a me"
name = "Mario"
@@ -33,7 +33,7 @@ print(message)
```
Oltre all'operatore `+`, in alcune occasioni può essere utile l'operatore `*`, che consente di ripetere una stringa un certo numero di volte. Ad esempio:
-```py live_py
+```py live
lol = "😂" * 10
print(lol)
```
@@ -49,7 +49,7 @@ f"Testo normale {espressione} altro testo"
```
Dove `{espressione}` può essere sostituito con qualsiasi espressione Python valida, comprese variabili, operazioni, chiamate di funzioni, ecc.
-```py live_py
+```py live
name1 = "Tony"
name2 = "Steve"
message = f"{name1} and {name2} are BFFs"
@@ -64,7 +64,7 @@ In Python, come in molti altri linguaggi di programmazione, gli indici delle seq
:::
La sintassi per accedere a un carattere di una stringa è `stringa[indice]`. Ad esempio:
-```py live_py
+```py live
name = "Luigi"
first_letter = name[0]
print(first_letter)
@@ -77,7 +77,7 @@ Vediamo di seguito alcune delle più utili e comuni.
### `len()`
La funzione `len(stringa)` restituisce la lunghezza di una stringa, ovvero il numero di caratteri che la compongono. Ad esempio:
-```py live_py
+```py live
motto = "supercalifragilistichespiralidoso"
print(f"{motto} ha {len(motto)} caratteri")
```
@@ -87,14 +87,14 @@ A differenza degli altri metodi, `len()` è una funzione propria di Python e non
### `upper()` e `lower()`
Le funzioni `upper()` e `lower()`, che al contrario di `len()` sono funzioni specifiche delle stringhe, permettono di convertire una stringa in maiuscolo o minuscolo rispettivamente. Ad esempio:
-```py live_py
+```py live
message = "A vEry sTrAnge mEsSaGe"
print(f"'{message.upper()}' is the same as '{message.lower()}'")
```
### `replace()`
La funzione `replace(old, new)` serve a rimpiazzare una parte di una stringa con un'altra. Questa funzione ha una particolarità: riceve in input due parametri e non uno solo. I parametri vanno elencati separandoli con una virgola. Il parametro `old` rappresenta la parte della stringa da cercare e sostituire, mentre `new` rappresenta la parte di stringa nuova. Ad esempio:
-```py live_py
+```py live
name = "Mario"
print(name.replace("M", "W"))
```
diff --git a/docs/basi-del-linguaggio/le-variabili.mdx b/docs/basi-del-linguaggio/le-variabili.mdx
index 8a60b88..d41ec77 100644
--- a/docs/basi-del-linguaggio/le-variabili.mdx
+++ b/docs/basi-del-linguaggio/le-variabili.mdx
@@ -96,7 +96,7 @@ condizione = True # tipo bool
Se vuoi conoscere il tipo di una variabile, puoi usare la funzione `type()`:
-```py live_py
+```py live
esempio1 = 10
esempio2 = "10"
print(type(esempio1))
@@ -104,7 +104,7 @@ print(type(esempio2))
```
Conoscere il tipo di una variabile è importante perché determina le operazioni che possono essere eseguite su quella variabile. Osserva il seguente esempio:
-```py live_py
+```py live
esempio1 = 10
esempio2 = "10"
print(esempio1 * 10)
diff --git a/docs/basi-del-linguaggio/output.mdx b/docs/basi-del-linguaggio/output.mdx
index d9ee015..13a2418 100644
--- a/docs/basi-del-linguaggio/output.mdx
+++ b/docs/basi-del-linguaggio/output.mdx
@@ -26,7 +26,7 @@ Avrai notato la prima riga nel codice qui sopra: è un **commento**. In Python,
### Prova tu
All'interno di questo libro troverai spesso esempi di codice che potrai eseguire direttamente nel tuo browser. Prova a completare il codice qui sotto per visualizzare il tuo primo output in Python.
-```py live_py
+```py live
# Completa il codice per stampare il tuo nome
print("Benvenuti al corso di Python!")
print()
@@ -41,7 +41,7 @@ Il comando `print()` accetta un parametro opzionale chiamato `end`, che consente
Prova a eseguire il codice: cosa succede se modifichi il valore del parametro `end`?
-```py live_py
+```py live
print("1", end=", ")
print("2", end=", ")
print("3")
diff --git a/docs/pyrunner-test.mdx b/docs/pyrunner-test.mdx
new file mode 100644
index 0000000..b63fd51
--- /dev/null
+++ b/docs/pyrunner-test.mdx
@@ -0,0 +1,121 @@
+---
+unlisted: true
+title: PyRunner — pagina di test
+description: Sandbox di verifica del componente PyRunner (PR1)
+---
+
+# PyRunner — sandbox di test
+
+Pagina temporanea per validare la PR1 del nuovo PyRunner. Non è linkata dalla sidebar (`unlisted: true`).
+
+## 1. Fence inline `py live` — esempio base
+
+```py live
+nome = "Lia"
+print(f"Ciao, {nome}!")
+print("Questo è il primo esempio.")
+```
+
+## 2. Da file `.py` esterno
+
+import PyRunner from '@theme/PyRunner';
+
+
+
+## 3. File `.py` con `### PRE` / `### POST`
+
+Il blocco `PRE` definisce `risultato_atteso`, il blocco `POST` non c'è. Solo il corpo è visibile/editabile.
+
+
+
+## 4. Fence con errore runtime (deve mostrare stderr in rosso)
+
+```py live
+def dividi(a, b):
+ return a / b
+
+print(dividi(10, 2))
+print(dividi(5, 0)) # ZeroDivisionError
+```
+
+## 5. Snippet a una riga (no line numbers attesi)
+
+```py live
+print("Una riga sola, niente gutter.")
+```
+
+## 6. Readonly
+
+```py live readonly
+# Questo non si edita.
+for i in range(3):
+ print(f"iterazione {i}")
+```
+
+## 7. maxLines piccolo per forzare scroll interno
+
+`maxLines=5` limita l'altezza dell'editor: il codice qui ha ~15 righe, quindi
+deve comparire una scrollbar verticale interna al box, senza espandere la pagina.
+Quando l'editor scrolla, deve comparire anche il bottone _fullscreen_ in toolbar.
+
+```py live maxLines=5
+def saluta(nome):
+ print(f"Ciao, {nome}!")
+
+def somma(a, b):
+ return a + b
+
+def fattoriale(n):
+ if n <= 1:
+ return 1
+ return n * fattoriale(n - 1)
+
+saluta("Lia")
+saluta("Marco")
+print("2 + 3 =", somma(2, 3))
+print("5! =", fattoriale(5))
+```
+
+## 8. "Spiegamelo facile" — prompt di default
+
+Cliccando l'icona ✨ in toolbar viene copiato negli appunti un prompt didattico
+che usa il titolo di questa pagina come `{contextTitle}` e il codice corrente
+(edit-aware).
+
+```py live
+parola = "ciao"
+print(parola.upper())
+print(parola[::-1])
+```
+
+## 9. "Spiegamelo facile" con prompt custom
+
+```py live
+n = 5
+print(sum(range(n + 1)))
+```
+
+import PyRunnerCustom from '@theme/PyRunner';
+
+
+
+## 10. `noExplain` — niente icona spiega
+
+```py live noExplain
+print("Niente bottone bacchetta magica qui.")
+```
+
+## 11. Fullscreen forzato (`maxLines=3` per attivare overflow)
+
+```py live maxLines=3
+print("Riga 1")
+print("Riga 2")
+print("Riga 3")
+print("Riga 4")
+print("Riga 5")
+```
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index b2ea482..c72ad8a 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -2,6 +2,9 @@ import { themes as prismThemes } from 'prism-react-renderer';
import type { Config } from '@docusaurus/types';
import type * as Preset from '@docusaurus/preset-classic';
+// eslint-disable-next-line @typescript-eslint/no-require-imports
+const remarkPyRunner = require('./plugins/pyrunner/remark.js');
+
const config: Config = {
title: 'Python Doesn\'t Byte',
tagline: 'Il libro di testo, reinventato.',
@@ -45,6 +48,7 @@ const config: Config = {
// Please change this to your repo.
// Remove this to remove the "edit this page" links.
editUrl: 'https://github.com/marcofarina/python-doesnt-byte',
+ beforeDefaultRemarkPlugins: [remarkPyRunner],
},
blog: {
showReadingTime: true,
@@ -77,6 +81,54 @@ const config: Config = {
clientModules: ['./src/fonts.ts'],
+ plugins: [
+ './plugins/pyrunner/index.js',
+ [
+ '@docusaurus/plugin-content-docs',
+ {
+ id: 'programmatore',
+ path: 'volumes/programmatore',
+ routeBasePath: 'programmatore',
+ sidebarPath: './sidebars/programmatore.ts',
+ editUrl: 'https://github.com/marcofarina/python-doesnt-byte',
+ beforeDefaultRemarkPlugins: [remarkPyRunner],
+ },
+ ],
+ [
+ '@docusaurus/plugin-content-docs',
+ {
+ id: 'artefice',
+ path: 'volumes/artefice',
+ routeBasePath: 'artefice',
+ sidebarPath: './sidebars/artefice.ts',
+ editUrl: 'https://github.com/marcofarina/python-doesnt-byte',
+ beforeDefaultRemarkPlugins: [remarkPyRunner],
+ },
+ ],
+ [
+ '@docusaurus/plugin-content-docs',
+ {
+ id: 'archivista',
+ path: 'volumes/archivista',
+ routeBasePath: 'archivista',
+ sidebarPath: './sidebars/archivista.ts',
+ editUrl: 'https://github.com/marcofarina/python-doesnt-byte',
+ beforeDefaultRemarkPlugins: [remarkPyRunner],
+ },
+ ],
+ [
+ '@docusaurus/plugin-content-docs',
+ {
+ id: 'apprendista',
+ path: 'volumes/apprendista',
+ routeBasePath: 'apprendista',
+ sidebarPath: './sidebars/apprendista.ts',
+ editUrl: 'https://github.com/marcofarina/python-doesnt-byte',
+ beforeDefaultRemarkPlugins: [remarkPyRunner],
+ },
+ ],
+ ],
+
themeConfig: {
// Replace with your project's social card
image: 'img/docusaurus-social-card.jpg',
@@ -93,36 +145,43 @@ const config: Config = {
},
items: [
{
- type: 'docSidebar',
- sidebarId: 'docs',
+ type: 'dropdown',
+ label: 'Libri',
position: 'left',
- label: 'Libro',
+ items: [
+ {
+ type: 'doc',
+ docId: 'intro',
+ docsPluginId: 'programmatore',
+ label: 'Manuale del Programmatore',
+ },
+ {
+ type: 'doc',
+ docId: 'intro',
+ docsPluginId: 'artefice',
+ label: 'Manuale dell\'Artefice',
+ },
+ {
+ type: 'doc',
+ docId: 'intro',
+ docsPluginId: 'archivista',
+ label: 'Manuale dell\'Archivista',
+ },
+ {
+ type: 'doc',
+ docId: 'intro',
+ docsPluginId: 'apprendista',
+ label: 'Biblioteca dell\'Apprendista',
+ },
+ ],
},
/* {
to: '/blog',
label: 'Blog',
position: 'left'},*/
- {
- to: '/support/',
- label: 'Support',
- position: 'right',
- className: 'sponsorship-link',
- },
- {
- to: 'https://github.com/marcofarina/python-doesnt-byte',
- label: 'GitHub',
- position: 'right',
- target: '_blank',
- className: 'github-link',
- 'aria-label': 'GitHub repository',
- },
- {
- to: 'https://www.rainbowbits.cloud',
- label: 'Rainbow Bits',
- position: 'right',
- target: '_blank',
- className: 'rainbowbits-link',
- },
+ // GitHub e "Offrimi un caffè" sono renderizzati come icone+popup
+ // (NavbarIconButton) dal swizzle src/theme/Navbar/Content, non
+ // tramite navbar items standard.
],
},
footer: {
@@ -172,9 +231,6 @@ const config: Config = {
darkTheme: prismThemes.dracula,
},
} satisfies Preset.ThemeConfig,
- themes: [
- 'docusaurus-live-brython'
- ],
};
export default config;
diff --git a/package-lock.json b/package-lock.json
index 419a879..ab68d9e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,6 +8,11 @@
"name": "python-doesnt-byte",
"version": "0.1.0",
"dependencies": {
+ "@codemirror/commands": "^6.10.3",
+ "@codemirror/lang-python": "^6.2.1",
+ "@codemirror/language": "^6.12.3",
+ "@codemirror/state": "^6.6.0",
+ "@codemirror/view": "^6.43.0",
"@docusaurus/core": "^3.10.1",
"@docusaurus/preset-classic": "^3.10.1",
"@fontsource/monaspace-argon": "^5.2.5",
@@ -20,7 +25,6 @@
"@fortawesome/react-fontawesome": "^0.2.2",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
- "docusaurus-live-brython": "^3.0.0-beta.28",
"prism-react-renderer": "^2.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
@@ -1905,18 +1909,6 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/runtime-corejs3": {
- "version": "7.28.4",
- "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz",
- "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==",
- "license": "MIT",
- "dependencies": {
- "core-js-pure": "^3.43.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/template": {
"version": "7.27.2",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
@@ -1962,6 +1954,78 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@codemirror/autocomplete": {
+ "version": "6.20.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.20.2.tgz",
+ "integrity": "sha512-G5FPkgIiLjOgZMjqVjvuKQ1rGPtHogLldJr33eFJdVLtmwY+giGrlv/ewljLz6b9BSQLkjxuwBc6g6omDM+YxQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.17.0",
+ "@lezer/common": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/commands": {
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.3.tgz",
+ "integrity": "sha512-JFRiqhKu+bvSkDLI+rUhJwSxQxYb759W5GBezE8Uc8mHLqC9aV/9aTC7yJSqCtB3F00pylrLCwnyS91Ap5ej4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.6.0",
+ "@codemirror/view": "^6.27.0",
+ "@lezer/common": "^1.1.0"
+ }
+ },
+ "node_modules/@codemirror/lang-python": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-python/-/lang-python-6.2.1.tgz",
+ "integrity": "sha512-IRjC8RUBhn9mGR9ywecNhB51yePWCGgvHfY1lWN/Mrp3cKuHr0isDKia+9HnvhiWNnMpbGhWrkhuWOc09exRyw==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.3.2",
+ "@codemirror/language": "^6.8.0",
+ "@codemirror/state": "^6.0.0",
+ "@lezer/common": "^1.2.1",
+ "@lezer/python": "^1.1.4"
+ }
+ },
+ "node_modules/@codemirror/language": {
+ "version": "6.12.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.3.tgz",
+ "integrity": "sha512-QwCZW6Tt1siP37Jet9Tb02Zs81TQt6qQrZR2H+eGMcFsL1zMrk2/b9CLC7/9ieP1fjIUMgviLWMmgiHoJrj+ZA==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.23.0",
+ "@lezer/common": "^1.5.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0",
+ "style-mod": "^4.0.0"
+ }
+ },
+ "node_modules/@codemirror/state": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.6.0.tgz",
+ "integrity": "sha512-4nbvra5R5EtiCzr9BTHiTLc+MLXK2QGiAVYMyi8PkQd3SR+6ixar/Q/01Fa21TBIDOZXgeWV4WppsQolSreAPQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@marijn/find-cluster-break": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/view": {
+ "version": "6.43.0",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.43.0.tgz",
+ "integrity": "sha512-V7ZCLQO3Jus9hzh2jVCCPW3mO4IBMr43O37PqSUYautJSnnJF41YlgLw21x0fLJTYvJ+Vkm6Gp+qKGH9pltgXA==",
+ "license": "MIT",
+ "dependencies": {
+ "@codemirror/state": "^6.6.0",
+ "crelt": "^1.0.6",
+ "style-mod": "^4.1.0",
+ "w3c-keyname": "^2.2.4"
+ }
+ },
"node_modules/@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -4158,120 +4222,11 @@
"node": ">=20.0"
}
},
- "node_modules/@emotion/babel-plugin": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz",
- "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-imports": "^7.16.7",
- "@babel/runtime": "^7.18.3",
- "@emotion/hash": "^0.9.2",
- "@emotion/memoize": "^0.9.0",
- "@emotion/serialize": "^1.2.0",
- "babel-plugin-macros": "^3.1.0",
- "convert-source-map": "^1.5.0",
- "escape-string-regexp": "^4.0.0",
- "find-root": "^1.1.0",
- "source-map": "^0.5.7",
- "stylis": "4.2.0"
- }
- },
- "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "license": "MIT"
- },
- "node_modules/@emotion/babel-plugin/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@emotion/cache": {
- "version": "11.13.1",
- "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz",
- "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==",
- "license": "MIT",
- "dependencies": {
- "@emotion/memoize": "^0.9.0",
- "@emotion/sheet": "^1.4.0",
- "@emotion/utils": "^1.4.0",
- "@emotion/weak-memoize": "^0.4.0",
- "stylis": "4.2.0"
- }
- },
- "node_modules/@emotion/css": {
- "version": "11.13.4",
- "resolved": "https://registry.npmjs.org/@emotion/css/-/css-11.13.4.tgz",
- "integrity": "sha512-CthbOD5EBw+iN0rfM96Tuv5kaZN4nxPyYDvGUs0bc7wZBBiU/0mse+l+0O9RshW2d+v5HH1cme+BAbLJ/3Folw==",
- "license": "MIT",
- "dependencies": {
- "@emotion/babel-plugin": "^11.12.0",
- "@emotion/cache": "^11.13.0",
- "@emotion/serialize": "^1.3.0",
- "@emotion/sheet": "^1.4.0",
- "@emotion/utils": "^1.4.0"
- }
- },
- "node_modules/@emotion/hash": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
- "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
- "license": "MIT"
- },
- "node_modules/@emotion/memoize": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
- "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
- "license": "MIT"
- },
- "node_modules/@emotion/serialize": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz",
- "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==",
- "license": "MIT",
- "dependencies": {
- "@emotion/hash": "^0.9.2",
- "@emotion/memoize": "^0.9.0",
- "@emotion/unitless": "^0.10.0",
- "@emotion/utils": "^1.4.1",
- "csstype": "^3.0.2"
- }
- },
- "node_modules/@emotion/sheet": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
- "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
- "license": "MIT"
- },
- "node_modules/@emotion/unitless": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
- "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
- "license": "MIT"
- },
- "node_modules/@emotion/utils": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz",
- "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==",
- "license": "MIT"
- },
- "node_modules/@emotion/weak-memoize": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
- "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
- "license": "MIT"
- },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.9.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
"integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"eslint-visitor-keys": "^3.4.3"
@@ -4290,7 +4245,7 @@
"version": "4.12.2",
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
"integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
@@ -4300,7 +4255,7 @@
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
"integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"ajv": "^6.12.4",
@@ -4324,7 +4279,7 @@
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -4341,7 +4296,7 @@
"version": "13.24.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"type-fest": "^0.20.2"
@@ -4357,14 +4312,14 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/@eslint/eslintrc/node_modules/type-fest": {
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "devOptional": true,
+ "dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
@@ -4377,7 +4332,7 @@
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
"integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -4500,7 +4455,7 @@
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
"integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
"deprecated": "Use @eslint/config-array instead",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"@humanwhocodes/object-schema": "^2.0.3",
@@ -4515,7 +4470,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"engines": {
"node": ">=12.22"
@@ -4530,7 +4485,7 @@
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
"integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
"deprecated": "Use @eslint/object-schema instead",
- "devOptional": true,
+ "dev": true,
"license": "BSD-3-Clause"
},
"node_modules/@jest/schemas": {
@@ -4740,6 +4695,47 @@
"integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
"license": "MIT"
},
+ "node_modules/@lezer/common": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.2.tgz",
+ "integrity": "sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==",
+ "license": "MIT"
+ },
+ "node_modules/@lezer/highlight": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz",
+ "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.3.0"
+ }
+ },
+ "node_modules/@lezer/lr": {
+ "version": "1.4.10",
+ "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.10.tgz",
+ "integrity": "sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/python": {
+ "version": "1.1.18",
+ "resolved": "https://registry.npmjs.org/@lezer/python/-/python-1.1.18.tgz",
+ "integrity": "sha512-31FiUrU7z9+d/ElGQLJFXl+dKOdx0jALlP3KEOsGTex8mvj+SoE1FgItcHWK/axkxCHGUSpqIHt6JAWfWu9Rhg==",
+ "license": "MIT",
+ "dependencies": {
+ "@lezer/common": "^1.2.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@marijn/find-cluster-break": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz",
+ "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==",
+ "license": "MIT"
+ },
"node_modules/@mdx-js/mdx": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz",
@@ -5446,12 +5442,6 @@
"@types/node": "*"
}
},
- "node_modules/@types/parse-json": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
- "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
- "license": "MIT"
- },
"node_modules/@types/prismjs": {
"version": "1.26.4",
"resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz",
@@ -6206,12 +6196,6 @@
"node": ">= 0.6"
}
},
- "node_modules/ace-builds": {
- "version": "1.36.2",
- "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.36.2.tgz",
- "integrity": "sha512-eqqfbGwx/GKjM/EnFu4QtQ+d2NNBu84MGgxoG8R5iyFpcVeQ4p9YlTL+ZzdEJqhdkASqoqOxCSNNGyB6lvMm+A==",
- "license": "BSD-3-Clause"
- },
"node_modules/acorn": {
"version": "8.13.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz",
@@ -6775,15 +6759,6 @@
"node": ">= 0.4"
}
},
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "license": "ISC",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
"node_modules/autoprefixer": {
"version": "10.5.0",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz",
@@ -6925,37 +6900,6 @@
"object.assign": "^4.1.0"
}
},
- "node_modules/babel-plugin-macros": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "cosmiconfig": "^7.0.0",
- "resolve": "^1.19.0"
- },
- "engines": {
- "node": ">=10",
- "npm": ">=6"
- }
- },
- "node_modules/babel-plugin-macros/node_modules/cosmiconfig": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
- "license": "MIT",
- "dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.2.1",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/babel-plugin-polyfill-corejs2": {
"version": "0.4.11",
"resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz",
@@ -7562,12 +7506,6 @@
"node": ">=8"
}
},
- "node_modules/classnames": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
- "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
- "license": "MIT"
- },
"node_modules/clean-css": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
@@ -7858,12 +7796,6 @@
"node": ">=0.8"
}
},
- "node_modules/consola": {
- "version": "2.15.3",
- "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
- "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
- "license": "MIT"
- },
"node_modules/content-disposition": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
@@ -8006,17 +7938,6 @@
"url": "https://opencollective.com/core-js"
}
},
- "node_modules/core-js-pure": {
- "version": "3.47.0",
- "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz",
- "integrity": "sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw==",
- "hasInstallScript": true,
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -8049,6 +7970,12 @@
}
}
},
+ "node_modules/crelt": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
+ "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==",
+ "license": "MIT"
+ },
"node_modules/cross-spawn": {
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -8638,7 +8565,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
"integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/deepmerge": {
@@ -8730,28 +8657,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/del": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
- "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
- "license": "MIT",
- "dependencies": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
- "rimraf": "^3.0.2",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -8803,38 +8708,6 @@
"node": ">= 4.0.0"
}
},
- "node_modules/detect-port-alt": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz",
- "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==",
- "license": "MIT",
- "dependencies": {
- "address": "^1.0.1",
- "debug": "^2.6.0"
- },
- "bin": {
- "detect": "bin/detect-port",
- "detect-port": "bin/detect-port"
- },
- "engines": {
- "node": ">= 4.2.1"
- }
- },
- "node_modules/detect-port-alt/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "license": "MIT",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/detect-port-alt/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "license": "MIT"
- },
"node_modules/devlop": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
@@ -8848,21 +8721,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/diff-match-patch": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz",
- "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==",
- "license": "Apache-2.0"
- },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -8891,7 +8749,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"dependencies": {
"esutils": "^2.0.2"
@@ -8900,511 +8758,19 @@
"node": ">=6.0.0"
}
},
- "node_modules/docusaurus-live-brython": {
- "version": "3.0.0-beta.28",
- "resolved": "https://registry.npmjs.org/docusaurus-live-brython/-/docusaurus-live-brython-3.0.0-beta.28.tgz",
- "integrity": "sha512-mpEM0jBfPa9tNZ1+Rd/T79O6UEURwXLmArq91zm9EIhU8SvE1QLjZXd+JLemhF3Qb8LC1qyvf3Fz02ygf3BSVA==",
+ "node_modules/dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
"license": "MIT",
"dependencies": {
- "@docusaurus/core": "3.4.0",
- "@docusaurus/theme-classic": "3.4.0",
- "@docusaurus/theme-common": "3.4.0",
- "@docusaurus/theme-translations": "3.4.0",
- "@docusaurus/utils-validation": "3.4.0",
- "ace-builds": "^1.34.2",
- "clsx": "^2.1.1",
- "lodash": "^4.17.21",
- "prism-react-renderer": "^2.3.1",
- "rc-slider": "^10.6.2",
- "react-ace": "^11.0.1",
- "react-diff-viewer-continued": "^3.4.0",
- "react-draggable": "^4.4.6",
- "svg-parser": "^2.0.4",
- "uuid": "^9.0.1"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
+ "utila": "~0.4"
}
},
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/core": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.4.0.tgz",
- "integrity": "sha512-g+0wwmN2UJsBqy2fQRQ6fhXruoEa62JDeEa5d8IdTJlMoaDaEDfHh7WjwGRn4opuTQWpjAwP/fbcgyHKlE+64w==",
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.23.3",
- "@babel/generator": "^7.23.3",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-transform-runtime": "^7.22.9",
- "@babel/preset-env": "^7.22.9",
- "@babel/preset-react": "^7.22.5",
- "@babel/preset-typescript": "^7.22.5",
- "@babel/runtime": "^7.22.6",
- "@babel/runtime-corejs3": "^7.22.6",
- "@babel/traverse": "^7.22.8",
- "@docusaurus/cssnano-preset": "3.4.0",
- "@docusaurus/logger": "3.4.0",
- "@docusaurus/mdx-loader": "3.4.0",
- "@docusaurus/utils": "3.4.0",
- "@docusaurus/utils-common": "3.4.0",
- "@docusaurus/utils-validation": "3.4.0",
- "autoprefixer": "^10.4.14",
- "babel-loader": "^9.1.3",
- "babel-plugin-dynamic-import-node": "^2.3.3",
- "boxen": "^6.2.1",
- "chalk": "^4.1.2",
- "chokidar": "^3.5.3",
- "clean-css": "^5.3.2",
- "cli-table3": "^0.6.3",
- "combine-promises": "^1.1.0",
- "commander": "^5.1.0",
- "copy-webpack-plugin": "^11.0.0",
- "core-js": "^3.31.1",
- "css-loader": "^6.8.1",
- "css-minimizer-webpack-plugin": "^5.0.1",
- "cssnano": "^6.1.2",
- "del": "^6.1.1",
- "detect-port": "^1.5.1",
- "escape-html": "^1.0.3",
- "eta": "^2.2.0",
- "eval": "^0.1.8",
- "file-loader": "^6.2.0",
- "fs-extra": "^11.1.1",
- "html-minifier-terser": "^7.2.0",
- "html-tags": "^3.3.1",
- "html-webpack-plugin": "^5.5.3",
- "leven": "^3.1.0",
- "lodash": "^4.17.21",
- "mini-css-extract-plugin": "^2.7.6",
- "p-map": "^4.0.0",
- "postcss": "^8.4.26",
- "postcss-loader": "^7.3.3",
- "prompts": "^2.4.2",
- "react-dev-utils": "^12.0.1",
- "react-helmet-async": "^1.3.0",
- "react-loadable": "npm:@docusaurus/react-loadable@6.0.0",
- "react-loadable-ssr-addon-v5-slorber": "^1.0.1",
- "react-router": "^5.3.4",
- "react-router-config": "^5.1.1",
- "react-router-dom": "^5.3.4",
- "rtl-detect": "^1.0.4",
- "semver": "^7.5.4",
- "serve-handler": "^6.1.5",
- "shelljs": "^0.8.5",
- "terser-webpack-plugin": "^5.3.9",
- "tslib": "^2.6.0",
- "update-notifier": "^6.0.2",
- "url-loader": "^4.1.1",
- "webpack": "^5.88.1",
- "webpack-bundle-analyzer": "^4.9.0",
- "webpack-dev-server": "^4.15.1",
- "webpack-merge": "^5.9.0",
- "webpackbar": "^5.0.2"
- },
- "bin": {
- "docusaurus": "bin/docusaurus.mjs"
- },
- "engines": {
- "node": ">=18.0"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/cssnano-preset": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.4.0.tgz",
- "integrity": "sha512-qwLFSz6v/pZHy/UP32IrprmH5ORce86BGtN0eBtG75PpzQJAzp9gefspox+s8IEOr0oZKuQ/nhzZ3xwyc3jYJQ==",
- "license": "MIT",
- "dependencies": {
- "cssnano-preset-advanced": "^6.1.2",
- "postcss": "^8.4.38",
- "postcss-sort-media-queries": "^5.2.0",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": ">=18.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/logger": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.4.0.tgz",
- "integrity": "sha512-bZwkX+9SJ8lB9kVRkXw+xvHYSMGG4bpYHKGXeXFvyVc79NMeeBSGgzd4TQLHH+DYeOJoCdl8flrFJVxlZ0wo/Q==",
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.2",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": ">=18.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/mdx-loader": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.4.0.tgz",
- "integrity": "sha512-kSSbrrk4nTjf4d+wtBA9H+FGauf2gCax89kV8SUSJu3qaTdSIKdWERlngsiHaCFgZ7laTJ8a67UFf+xlFPtuTw==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/logger": "3.4.0",
- "@docusaurus/utils": "3.4.0",
- "@docusaurus/utils-validation": "3.4.0",
- "@mdx-js/mdx": "^3.0.0",
- "@slorber/remark-comment": "^1.0.0",
- "escape-html": "^1.0.3",
- "estree-util-value-to-estree": "^3.0.1",
- "file-loader": "^6.2.0",
- "fs-extra": "^11.1.1",
- "image-size": "^1.0.2",
- "mdast-util-mdx": "^3.0.0",
- "mdast-util-to-string": "^4.0.0",
- "rehype-raw": "^7.0.0",
- "remark-directive": "^3.0.0",
- "remark-emoji": "^4.0.0",
- "remark-frontmatter": "^5.0.0",
- "remark-gfm": "^4.0.0",
- "stringify-object": "^3.3.0",
- "tslib": "^2.6.0",
- "unified": "^11.0.3",
- "unist-util-visit": "^5.0.0",
- "url-loader": "^4.1.1",
- "vfile": "^6.0.1",
- "webpack": "^5.88.1"
- },
- "engines": {
- "node": ">=18.0"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/module-type-aliases": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.4.0.tgz",
- "integrity": "sha512-A1AyS8WF5Bkjnb8s+guTDuYmUiwJzNrtchebBHpc0gz0PyHJNMaybUlSrmJjHVcGrya0LKI4YcR3lBDQfXRYLw==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/types": "3.4.0",
- "@types/history": "^4.7.11",
- "@types/react": "*",
- "@types/react-router-config": "*",
- "@types/react-router-dom": "*",
- "react-helmet-async": "*",
- "react-loadable": "npm:@docusaurus/react-loadable@6.0.0"
- },
- "peerDependencies": {
- "react": "*",
- "react-dom": "*"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/plugin-content-blog": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.4.0.tgz",
- "integrity": "sha512-vv6ZAj78ibR5Jh7XBUT4ndIjmlAxkijM3Sx5MAAzC1gyv0vupDQNhzuFg1USQmQVj3P5I6bquk12etPV3LJ+Xw==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/core": "3.4.0",
- "@docusaurus/logger": "3.4.0",
- "@docusaurus/mdx-loader": "3.4.0",
- "@docusaurus/types": "3.4.0",
- "@docusaurus/utils": "3.4.0",
- "@docusaurus/utils-common": "3.4.0",
- "@docusaurus/utils-validation": "3.4.0",
- "cheerio": "^1.0.0-rc.12",
- "feed": "^4.2.2",
- "fs-extra": "^11.1.1",
- "lodash": "^4.17.21",
- "reading-time": "^1.5.0",
- "srcset": "^4.0.0",
- "tslib": "^2.6.0",
- "unist-util-visit": "^5.0.0",
- "utility-types": "^3.10.0",
- "webpack": "^5.88.1"
- },
- "engines": {
- "node": ">=18.0"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/plugin-content-docs": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.4.0.tgz",
- "integrity": "sha512-HkUCZffhBo7ocYheD9oZvMcDloRnGhBMOZRyVcAQRFmZPmNqSyISlXA1tQCIxW+r478fty97XXAGjNYzBjpCsg==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/core": "3.4.0",
- "@docusaurus/logger": "3.4.0",
- "@docusaurus/mdx-loader": "3.4.0",
- "@docusaurus/module-type-aliases": "3.4.0",
- "@docusaurus/types": "3.4.0",
- "@docusaurus/utils": "3.4.0",
- "@docusaurus/utils-common": "3.4.0",
- "@docusaurus/utils-validation": "3.4.0",
- "@types/react-router-config": "^5.0.7",
- "combine-promises": "^1.1.0",
- "fs-extra": "^11.1.1",
- "js-yaml": "^4.1.0",
- "lodash": "^4.17.21",
- "tslib": "^2.6.0",
- "utility-types": "^3.10.0",
- "webpack": "^5.88.1"
- },
- "engines": {
- "node": ">=18.0"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/plugin-content-pages": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.4.0.tgz",
- "integrity": "sha512-h2+VN/0JjpR8fIkDEAoadNjfR3oLzB+v1qSXbIAKjQ46JAHx3X22n9nqS+BWSQnTnp1AjkjSvZyJMekmcwxzxg==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/core": "3.4.0",
- "@docusaurus/mdx-loader": "3.4.0",
- "@docusaurus/types": "3.4.0",
- "@docusaurus/utils": "3.4.0",
- "@docusaurus/utils-validation": "3.4.0",
- "fs-extra": "^11.1.1",
- "tslib": "^2.6.0",
- "webpack": "^5.88.1"
- },
- "engines": {
- "node": ">=18.0"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/theme-classic": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.4.0.tgz",
- "integrity": "sha512-0IPtmxsBYv2adr1GnZRdMkEQt1YW6tpzrUPj02YxNpvJ5+ju4E13J5tB4nfdaen/tfR1hmpSPlTFPvTf4kwy8Q==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/core": "3.4.0",
- "@docusaurus/mdx-loader": "3.4.0",
- "@docusaurus/module-type-aliases": "3.4.0",
- "@docusaurus/plugin-content-blog": "3.4.0",
- "@docusaurus/plugin-content-docs": "3.4.0",
- "@docusaurus/plugin-content-pages": "3.4.0",
- "@docusaurus/theme-common": "3.4.0",
- "@docusaurus/theme-translations": "3.4.0",
- "@docusaurus/types": "3.4.0",
- "@docusaurus/utils": "3.4.0",
- "@docusaurus/utils-common": "3.4.0",
- "@docusaurus/utils-validation": "3.4.0",
- "@mdx-js/react": "^3.0.0",
- "clsx": "^2.0.0",
- "copy-text-to-clipboard": "^3.2.0",
- "infima": "0.2.0-alpha.43",
- "lodash": "^4.17.21",
- "nprogress": "^0.2.0",
- "postcss": "^8.4.26",
- "prism-react-renderer": "^2.3.0",
- "prismjs": "^1.29.0",
- "react-router-dom": "^5.3.4",
- "rtlcss": "^4.1.0",
- "tslib": "^2.6.0",
- "utility-types": "^3.10.0"
- },
- "engines": {
- "node": ">=18.0"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/theme-common": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.4.0.tgz",
- "integrity": "sha512-0A27alXuv7ZdCg28oPE8nH/Iz73/IUejVaCazqu9elS4ypjiLhK3KfzdSQBnL/g7YfHSlymZKdiOHEo8fJ0qMA==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/mdx-loader": "3.4.0",
- "@docusaurus/module-type-aliases": "3.4.0",
- "@docusaurus/plugin-content-blog": "3.4.0",
- "@docusaurus/plugin-content-docs": "3.4.0",
- "@docusaurus/plugin-content-pages": "3.4.0",
- "@docusaurus/utils": "3.4.0",
- "@docusaurus/utils-common": "3.4.0",
- "@types/history": "^4.7.11",
- "@types/react": "*",
- "@types/react-router-config": "*",
- "clsx": "^2.0.0",
- "parse-numeric-range": "^1.3.0",
- "prism-react-renderer": "^2.3.0",
- "tslib": "^2.6.0",
- "utility-types": "^3.10.0"
- },
- "engines": {
- "node": ">=18.0"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/theme-translations": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.4.0.tgz",
- "integrity": "sha512-zSxCSpmQCCdQU5Q4CnX/ID8CSUUI3fvmq4hU/GNP/XoAWtXo9SAVnM3TzpU8Gb//H3WCsT8mJcTfyOk3d9ftNg==",
- "license": "MIT",
- "dependencies": {
- "fs-extra": "^11.1.1",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": ">=18.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/types": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.4.0.tgz",
- "integrity": "sha512-4jcDO8kXi5Cf9TcyikB/yKmz14f2RZ2qTRerbHAsS+5InE9ZgSLBNLsewtFTcTOXSVcbU3FoGOzcNWAmU1TR0A==",
- "license": "MIT",
- "dependencies": {
- "@mdx-js/mdx": "^3.0.0",
- "@types/history": "^4.7.11",
- "@types/react": "*",
- "commander": "^5.1.0",
- "joi": "^17.9.2",
- "react-helmet-async": "^1.3.0",
- "utility-types": "^3.10.0",
- "webpack": "^5.88.1",
- "webpack-merge": "^5.9.0"
- },
- "peerDependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/utils": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.4.0.tgz",
- "integrity": "sha512-fRwnu3L3nnWaXOgs88BVBmG1yGjcQqZNHG+vInhEa2Sz2oQB+ZjbEMO5Rh9ePFpZ0YDiDUhpaVjwmS+AU2F14g==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/logger": "3.4.0",
- "@docusaurus/utils-common": "3.4.0",
- "@svgr/webpack": "^8.1.0",
- "escape-string-regexp": "^4.0.0",
- "file-loader": "^6.2.0",
- "fs-extra": "^11.1.1",
- "github-slugger": "^1.5.0",
- "globby": "^11.1.0",
- "gray-matter": "^4.0.3",
- "jiti": "^1.20.0",
- "js-yaml": "^4.1.0",
- "lodash": "^4.17.21",
- "micromatch": "^4.0.5",
- "prompts": "^2.4.2",
- "resolve-pathname": "^3.0.0",
- "shelljs": "^0.8.5",
- "tslib": "^2.6.0",
- "url-loader": "^4.1.1",
- "utility-types": "^3.10.0",
- "webpack": "^5.88.1"
- },
- "engines": {
- "node": ">=18.0"
- },
- "peerDependencies": {
- "@docusaurus/types": "*"
- },
- "peerDependenciesMeta": {
- "@docusaurus/types": {
- "optional": true
- }
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/utils-common": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.4.0.tgz",
- "integrity": "sha512-NVx54Wr4rCEKsjOH5QEVvxIqVvm+9kh7q8aYTU5WzUU9/Hctd6aTrcZ3G0Id4zYJ+AeaG5K5qHA4CY5Kcm2iyQ==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": ">=18.0"
- },
- "peerDependencies": {
- "@docusaurus/types": "*"
- },
- "peerDependenciesMeta": {
- "@docusaurus/types": {
- "optional": true
- }
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/@docusaurus/utils-validation": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.4.0.tgz",
- "integrity": "sha512-hYQ9fM+AXYVTWxJOT1EuNaRnrR2WGpRdLDQG07O8UOpsvCPWUVOeo26Rbm0JWY2sGLfzAb+tvJ62yF+8F+TV0g==",
- "license": "MIT",
- "dependencies": {
- "@docusaurus/logger": "3.4.0",
- "@docusaurus/utils": "3.4.0",
- "@docusaurus/utils-common": "3.4.0",
- "fs-extra": "^11.2.0",
- "joi": "^17.9.2",
- "js-yaml": "^4.1.0",
- "lodash": "^4.17.21",
- "tslib": "^2.6.0"
- },
- "engines": {
- "node": ">=18.0"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/infima": {
- "version": "0.2.0-alpha.43",
- "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.43.tgz",
- "integrity": "sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/docusaurus-live-brython/node_modules/uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/dom-converter": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
- "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
- "license": "MIT",
- "dependencies": {
- "utila": "~0.4"
- }
- },
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"license": "MIT",
"dependencies": {
"domelementtype": "^2.3.0",
@@ -10004,7 +9370,7 @@
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
"integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
"deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
@@ -10224,7 +9590,7 @@
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
- "devOptional": true,
+ "dev": true,
"license": "Apache-2.0",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -10237,7 +9603,7 @@
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -10254,7 +9620,7 @@
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "devOptional": true,
+ "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
@@ -10271,7 +9637,7 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "devOptional": true,
+ "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
@@ -10281,7 +9647,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^6.0.0",
@@ -10298,7 +9664,7 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "devOptional": true,
+ "dev": true,
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.3"
@@ -10311,7 +9677,7 @@
"version": "13.24.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"type-fest": "^0.20.2"
@@ -10327,14 +9693,14 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/eslint/node_modules/locate-path": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^5.0.0"
@@ -10350,7 +9716,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"yocto-queue": "^0.1.0"
@@ -10366,7 +9732,7 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^3.0.2"
@@ -10382,7 +9748,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
@@ -10392,7 +9758,7 @@
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "devOptional": true,
+ "dev": true,
"license": "(MIT OR CC0-1.0)",
"engines": {
"node": ">=10"
@@ -10405,7 +9771,7 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
@@ -10418,7 +9784,7 @@
"version": "9.6.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
"integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "devOptional": true,
+ "dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"acorn": "^8.9.0",
@@ -10449,7 +9815,7 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
"integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
- "devOptional": true,
+ "dev": true,
"license": "BSD-3-Clause",
"dependencies": {
"estraverse": "^5.1.0"
@@ -10462,7 +9828,7 @@
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
- "devOptional": true,
+ "dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=4.0"
@@ -10826,7 +10192,7 @@
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/fast-uri": {
@@ -10885,7 +10251,7 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"flat-cache": "^3.0.4"
@@ -10963,15 +10329,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/filesize": {
- "version": "8.0.7",
- "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz",
- "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
"node_modules/fill-range": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
@@ -11033,12 +10390,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/find-root": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
- "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
- "license": "MIT"
- },
"node_modules/find-up": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
@@ -11068,7 +10419,7 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
"integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"flatted": "^3.2.9",
@@ -11083,7 +10434,7 @@
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
"integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
- "devOptional": true,
+ "dev": true,
"license": "ISC"
},
"node_modules/follow-redirects": {
@@ -11122,134 +10473,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/fork-ts-checker-webpack-plugin": {
- "version": "6.5.3",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz",
- "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.8.3",
- "@types/json-schema": "^7.0.5",
- "chalk": "^4.1.0",
- "chokidar": "^3.4.2",
- "cosmiconfig": "^6.0.0",
- "deepmerge": "^4.2.2",
- "fs-extra": "^9.0.0",
- "glob": "^7.1.6",
- "memfs": "^3.1.2",
- "minimatch": "^3.0.4",
- "schema-utils": "2.7.0",
- "semver": "^7.3.2",
- "tapable": "^1.0.0"
- },
- "engines": {
- "node": ">=10",
- "yarn": ">=1.0.0"
- },
- "peerDependencies": {
- "eslint": ">= 6",
- "typescript": ">= 2.7",
- "vue-template-compiler": "*",
- "webpack": ">= 4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- },
- "vue-template-compiler": {
- "optional": true
- }
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "license": "MIT",
- "peerDependencies": {
- "ajv": "^6.9.1"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
- "license": "MIT",
- "dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "license": "MIT"
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
- "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
- "license": "MIT",
- "dependencies": {
- "@types/json-schema": "^7.0.4",
- "ajv": "^6.12.2",
- "ajv-keywords": "^3.4.1"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/form-data-encoder": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz",
@@ -11312,16 +10535,11 @@
"node": ">=14.14"
}
},
- "node_modules/fs-monkey": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz",
- "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==",
- "license": "Unlicense"
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
"license": "ISC"
},
"node_modules/fsevents": {
@@ -11530,6 +10748,7 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -11604,44 +10823,6 @@
"node": ">=10"
}
},
- "node_modules/global-modules": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
- "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
- "license": "MIT",
- "dependencies": {
- "global-prefix": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/global-prefix": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
- "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
- "license": "MIT",
- "dependencies": {
- "ini": "^1.3.5",
- "kind-of": "^6.0.2",
- "which": "^1.3.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/global-prefix/node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
"node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -11747,7 +10928,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/gray-matter": {
@@ -12470,31 +11651,6 @@
"node": ">= 4"
}
},
- "node_modules/image-size": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz",
- "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==",
- "license": "MIT",
- "dependencies": {
- "queue": "6.0.2"
- },
- "bin": {
- "image-size": "bin/image-size.js"
- },
- "engines": {
- "node": ">=16.x"
- }
- },
- "node_modules/immer": {
- "version": "9.0.21",
- "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
- "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/immer"
- }
- },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -12552,6 +11708,7 @@
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
@@ -12611,15 +11768,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -13159,15 +12307,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/is-path-inside": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -13229,15 +12368,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-root": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz",
- "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/is-set": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
@@ -13633,7 +12763,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/json5": {
@@ -13741,7 +12871,7 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1",
@@ -13819,18 +12949,6 @@
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"license": "MIT"
},
- "node_modules/lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "license": "MIT"
- },
- "node_modules/lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
- "license": "MIT"
- },
"node_modules/lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -13841,7 +12959,7 @@
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/lodash.uniq": {
@@ -14348,24 +13466,6 @@
"node": ">= 0.6"
}
},
- "node_modules/memfs": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz",
- "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==",
- "license": "Unlicense",
- "dependencies": {
- "fs-monkey": "^1.0.4"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/memoize-one": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
- "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==",
- "license": "MIT"
- },
"node_modules/merge-descriptors": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
@@ -16349,7 +15449,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
- "devOptional": true,
+ "dev": true,
"license": "MIT"
},
"node_modules/negotiator": {
@@ -16718,6 +15818,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
"license": "ISC",
"dependencies": {
"wrappy": "1"
@@ -16768,7 +15869,7 @@
"version": "0.9.4",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
"integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"deep-is": "^0.1.3",
@@ -16943,15 +16044,6 @@
"node": ">=8"
}
},
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/package-json": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz",
@@ -17099,6 +16191,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -17137,116 +16230,43 @@
"node_modules/path-type": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pkg-dir": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
- "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
- "license": "MIT",
- "dependencies": {
- "find-up": "^6.3.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/pkg-up": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
- "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
- "license": "MIT",
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pkg-up/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-up/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"license": "MIT",
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
- "node_modules/pkg-up/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"license": "MIT",
- "dependencies": {
- "p-try": "^2.0.0"
- },
"engines": {
- "node": ">=6"
+ "node": ">=8.6"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/jonschlinkert"
}
},
- "node_modules/pkg-up/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "node_modules/pkg-dir": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+ "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
"license": "MIT",
"dependencies": {
- "p-limit": "^2.0.0"
+ "find-up": "^6.3.0"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/pkg-up/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/possible-typed-array-names": {
@@ -18763,7 +17783,7 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.8.0"
@@ -18946,15 +17966,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/queue": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
- "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
- "license": "MIT",
- "dependencies": {
- "inherits": "~2.0.3"
- }
- },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -19044,44 +18055,6 @@
"rc": "cli.js"
}
},
- "node_modules/rc-slider": {
- "version": "10.6.2",
- "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.6.2.tgz",
- "integrity": "sha512-FjkoFjyvUQWcBo1F3RgSglky3ar0+qHLM41PlFVYB4Bj3RD8E/Mv7kqMouLFBU+3aFglMzzctAIWRwajEuueSw==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.10.1",
- "classnames": "^2.2.5",
- "rc-util": "^5.36.0"
- },
- "engines": {
- "node": ">=8.x"
- },
- "peerDependencies": {
- "react": ">=16.9.0",
- "react-dom": ">=16.9.0"
- }
- },
- "node_modules/rc-util": {
- "version": "5.43.0",
- "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.43.0.tgz",
- "integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.18.3",
- "react-is": "^18.2.0"
- },
- "peerDependencies": {
- "react": ">=16.9.0",
- "react-dom": ">=16.9.0"
- }
- },
- "node_modules/rc-util/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "license": "MIT"
- },
"node_modules/rc/node_modules/strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
@@ -19103,169 +18076,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/react-ace": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/react-ace/-/react-ace-11.0.1.tgz",
- "integrity": "sha512-ulk2851Fx2j59AAahZHTe7rmQ5bITW1xytskAt11F8dv3rPLtdwBXCyT2qSbRnJvOq8UpuAhWO4/JhKGqQBEDA==",
- "license": "MIT",
- "dependencies": {
- "ace-builds": "^1.32.8",
- "diff-match-patch": "^1.0.5",
- "lodash.get": "^4.4.2",
- "lodash.isequal": "^4.5.0",
- "prop-types": "^15.8.1"
- },
- "peerDependencies": {
- "react": "^0.13.0 || ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^0.13.0 || ^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/react-dev-utils": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz",
- "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.16.0",
- "address": "^1.1.2",
- "browserslist": "^4.18.1",
- "chalk": "^4.1.2",
- "cross-spawn": "^7.0.3",
- "detect-port-alt": "^1.1.6",
- "escape-string-regexp": "^4.0.0",
- "filesize": "^8.0.6",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^6.5.0",
- "global-modules": "^2.0.0",
- "globby": "^11.0.4",
- "gzip-size": "^6.0.0",
- "immer": "^9.0.7",
- "is-root": "^2.1.0",
- "loader-utils": "^3.2.0",
- "open": "^8.4.0",
- "pkg-up": "^3.1.0",
- "prompts": "^2.4.2",
- "react-error-overlay": "^6.0.11",
- "recursive-readdir": "^2.2.2",
- "shell-quote": "^1.7.3",
- "strip-ansi": "^6.0.1",
- "text-table": "^0.2.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/react-dev-utils/node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/loader-utils": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz",
- "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==",
- "license": "MIT",
- "engines": {
- "node": ">= 12.13.0"
- }
- },
- "node_modules/react-dev-utils/node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-dev-utils/node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/react-dev-utils/node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/react-diff-viewer-continued": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/react-diff-viewer-continued/-/react-diff-viewer-continued-3.4.0.tgz",
- "integrity": "sha512-kMZmUyb3Pv5L9vUtCfIGYsdOHs8mUojblGy1U1Sm0D7FhAOEsH9QhnngEIRo5hXWIPNGupNRJls1TJ6Eqx84eg==",
- "license": "MIT",
- "dependencies": {
- "@emotion/css": "^11.11.2",
- "classnames": "^2.3.2",
- "diff": "^5.1.0",
- "memoize-one": "^6.0.0",
- "prop-types": "^15.8.1"
- },
- "engines": {
- "node": ">= 8"
- },
- "peerDependencies": {
- "react": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/react-dom": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
@@ -19279,35 +18089,6 @@
"react": "^18.3.1"
}
},
- "node_modules/react-draggable": {
- "version": "4.4.6",
- "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-4.4.6.tgz",
- "integrity": "sha512-LtY5Xw1zTPqHkVmtM3X8MUOxNDOUhv/khTgBgrUvwaS064bwVvxT+q5El0uUFNx5IEPKXuRejr7UqLwBIg5pdw==",
- "license": "MIT",
- "dependencies": {
- "clsx": "^1.1.1",
- "prop-types": "^15.8.1"
- },
- "peerDependencies": {
- "react": ">= 16.3.0",
- "react-dom": ">= 16.3.0"
- }
- },
- "node_modules/react-draggable/node_modules/clsx": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
- "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/react-error-overlay": {
- "version": "6.0.11",
- "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz",
- "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==",
- "license": "MIT"
- },
"node_modules/react-fast-compare": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz",
@@ -19455,23 +18236,6 @@
"node": ">=8.10.0"
}
},
- "node_modules/reading-time": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz",
- "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==",
- "license": "MIT"
- },
- "node_modules/rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
- "dependencies": {
- "resolve": "^1.1.6"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/recma-build-jsx": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz",
@@ -19536,18 +18300,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/recursive-readdir": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz",
- "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==",
- "license": "MIT",
- "dependencies": {
- "minimatch": "^3.0.5"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
"node_modules/reflect.getprototypeof": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -20121,6 +18873,7 @@
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
@@ -20132,12 +18885,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/rtl-detect": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz",
- "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==",
- "license": "BSD-3-Clause"
- },
"node_modules/rtlcss": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz",
@@ -20728,23 +19475,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/shelljs": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
- "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "glob": "^7.0.0",
- "interpret": "^1.0.0",
- "rechoir": "^0.6.2"
- },
- "bin": {
- "shjs": "bin/shjs"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/side-channel": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
@@ -21448,6 +20178,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/style-mod": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz",
+ "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==",
+ "license": "MIT"
+ },
"node_modules/style-to-object": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz",
@@ -21473,12 +20209,6 @@
"postcss": "^8.4.31"
}
},
- "node_modules/stylis": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
- "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
- "license": "MIT"
- },
"node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -21708,6 +20438,7 @@
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true,
"license": "MIT"
},
"node_modules/thingies": {
@@ -21913,7 +20644,7 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"dependencies": {
"prelude-ls": "^1.2.1"
@@ -22097,6 +20828,7 @@
"version": "5.5.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz",
"integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==",
+ "devOptional": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -22619,6 +21351,12 @@
"url": "https://opencollective.com/unified"
}
},
+ "node_modules/w3c-keyname": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
+ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
+ "license": "MIT"
+ },
"node_modules/watchpack": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
@@ -23026,24 +21764,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/webpackbar": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz",
- "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==",
- "license": "MIT",
- "dependencies": {
- "chalk": "^4.1.0",
- "consola": "^2.15.3",
- "pretty-time": "^1.1.0",
- "std-env": "^3.0.1"
- },
- "engines": {
- "node": ">=12"
- },
- "peerDependencies": {
- "webpack": "3 || 4 || 5"
- }
- },
"node_modules/websocket-driver": {
"version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
@@ -23222,7 +21942,7 @@
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
"integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
- "devOptional": true,
+ "dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -23288,6 +22008,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
"license": "ISC"
},
"node_modules/write-file-atomic": {
@@ -23383,15 +22104,6 @@
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"license": "ISC"
},
- "node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "license": "ISC",
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/yocto-queue": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz",
diff --git a/package.json b/package.json
index b82cdb6..3ea326d 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,11 @@
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,css,md,mdx}\""
},
"dependencies": {
+ "@codemirror/commands": "^6.10.3",
+ "@codemirror/lang-python": "^6.2.1",
+ "@codemirror/language": "^6.12.3",
+ "@codemirror/state": "^6.6.0",
+ "@codemirror/view": "^6.43.0",
"@docusaurus/core": "^3.10.1",
"@docusaurus/preset-classic": "^3.10.1",
"@fontsource/monaspace-argon": "^5.2.5",
@@ -30,7 +35,6 @@
"@fortawesome/react-fontawesome": "^0.2.2",
"@mdx-js/react": "^3.0.0",
"clsx": "^2.0.0",
- "docusaurus-live-brython": "^3.0.0-beta.28",
"prism-react-renderer": "^2.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0"
diff --git a/plugins/pyrunner/index.js b/plugins/pyrunner/index.js
new file mode 100644
index 0000000..efe7969
--- /dev/null
+++ b/plugins/pyrunner/index.js
@@ -0,0 +1,91 @@
+const path = require('path');
+const fs = require('fs');
+
+const PLUGIN_NAME = 'pyrunner';
+
+const DEFAULT_OPTIONS = {
+ brythonSrc: 'https://cdn.jsdelivr.net/npm/brython@3.12.4/brython.min.js',
+ brythonStdlibSrc:
+ 'https://cdn.jsdelivr.net/npm/brython@3.12.4/brython_stdlib.js',
+ // SRI hash dei bundle pinnati a 3.12.4. Se la CDN serve un file diverso
+ // (compromissione, MITM, mismatch di versione) il browser rifiuta lo script.
+ brythonIntegrity:
+ 'sha384-7rPpfu6/m4Kt9MXKynqy9O9qlPkNnbNhhorIn114kwlsCY3AI3T9eXt+UgVcQ9Qg',
+ brythonStdlibIntegrity:
+ 'sha384-JEgOSQ3kchBXLE0JDMOoSxjkqHdd8vNq3SY6/2KA4aPvCimeLMmt+cMnHIb0I4bw',
+ libDir: 'bry-libs',
+ examplesDir: 'py-examples',
+ /**
+ * Se `true` evita di iniettare gli script Brython in
: utile se un
+ * altro plugin li sta già caricando, o per test. Default: iniezione attiva.
+ */
+ skipScriptInjection: false,
+};
+
+function walkPyFiles(dir, baseDir) {
+ const out = {};
+ if (!fs.existsSync(dir)) return out;
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
+ const full = path.join(dir, entry.name);
+ if (entry.isDirectory()) {
+ Object.assign(out, walkPyFiles(full, baseDir));
+ } else if (entry.isFile() && entry.name.endsWith('.py')) {
+ const rel = path.relative(baseDir, full).split(path.sep).join('/');
+ out[rel] = fs.readFileSync(full, 'utf-8');
+ }
+ }
+ return out;
+}
+
+module.exports = function pyrunnerPlugin(context, pluginOptions = {}) {
+ const opts = { ...DEFAULT_OPTIONS, ...pluginOptions };
+ const staticRoot =
+ (context.siteConfig.staticDirectories &&
+ context.siteConfig.staticDirectories[0]) ||
+ 'static';
+ const examplesAbsDir = path.join(context.siteDir, staticRoot, opts.examplesDir);
+ const libUrl = path.posix.join(context.baseUrl, opts.libDir, '/');
+
+ return {
+ name: PLUGIN_NAME,
+
+ async loadContent() {
+ const examples = walkPyFiles(examplesAbsDir, examplesAbsDir);
+ return { examples };
+ },
+
+ async contentLoaded({ content, actions }) {
+ actions.setGlobalData({
+ libUrl,
+ examplesDir: opts.examplesDir,
+ examples: content.examples,
+ });
+ },
+
+ getPathsToWatch() {
+ return [path.join(examplesAbsDir, '**/*.py')];
+ },
+
+ injectHtmlTags() {
+ if (opts.skipScriptInjection) return { headTags: [] };
+ const scriptTag = (src, integrity) => ({
+ tagName: 'script',
+ attributes: {
+ src,
+ ...(integrity ? { integrity } : {}),
+ crossorigin: 'anonymous',
+ referrerpolicy: 'no-referrer',
+ defer: 'defer',
+ },
+ });
+ return {
+ headTags: [
+ scriptTag(opts.brythonSrc, opts.brythonIntegrity),
+ scriptTag(opts.brythonStdlibSrc, opts.brythonStdlibIntegrity),
+ ],
+ };
+ },
+ };
+};
+
+module.exports.PLUGIN_NAME = PLUGIN_NAME;
diff --git a/plugins/pyrunner/package.json b/plugins/pyrunner/package.json
new file mode 100644
index 0000000..0ca3884
--- /dev/null
+++ b/plugins/pyrunner/package.json
@@ -0,0 +1,8 @@
+{
+ "name": "pyrunner",
+ "version": "0.1.0",
+ "private": true,
+ "description": "Docusaurus plugin per esecuzione in-pagina di Python via Brython, con sorgente da .py asset",
+ "main": "./index.js",
+ "license": "MIT"
+}
diff --git a/plugins/pyrunner/remark.js b/plugins/pyrunner/remark.js
new file mode 100644
index 0000000..badc6af
--- /dev/null
+++ b/plugins/pyrunner/remark.js
@@ -0,0 +1,112 @@
+/**
+ * Remark plugin: trasforma i code fence
+ * ```py live
+ * ...
+ * ```
+ * in JSX ... .
+ *
+ * Convive con i code fence normali (```py senza `live` resta un normale code block).
+ */
+
+function isLiveMeta(meta) {
+ if (!meta) return false;
+ // meta è una stringa tipo "live" o "live readonly title=foo" ecc.
+ return /(^|\s)live(\s|=|$)/.test(meta);
+}
+
+function parseMeta(meta) {
+ // Estrae chiave/valore. Supporta "live" (booleano implicito) e "key=value".
+ const out = {};
+ if (!meta) return out;
+ const tokens = meta.match(/(?:[^\s"]+|"[^"]*")+/g) || [];
+ for (const tok of tokens) {
+ const eq = tok.indexOf('=');
+ if (eq === -1) {
+ if (tok === 'live') continue; // marker, niente prop
+ out[tok] = true;
+ } else {
+ const key = tok.slice(0, eq);
+ let value = tok.slice(eq + 1);
+ if (value.startsWith('"') && value.endsWith('"')) {
+ value = value.slice(1, -1);
+ }
+ if (key === 'live') continue;
+ out[key] = value;
+ }
+ }
+ return out;
+}
+
+function toMdxAttributes(propsObj) {
+ const attrs = [];
+ for (const [name, value] of Object.entries(propsObj)) {
+ if (value === true) {
+ attrs.push({ type: 'mdxJsxAttribute', name, value: null });
+ } else {
+ attrs.push({
+ type: 'mdxJsxAttribute',
+ name,
+ value: String(value),
+ });
+ }
+ }
+ return attrs;
+}
+
+function makeCodeAttribute(code) {
+ // Passa il codice come prop `code={"..."}` con expression letterale.
+ // Più sicuro di un children text node: MDX non re-interpreta il contenuto.
+ const literal = JSON.stringify(code);
+ return {
+ type: 'mdxJsxAttribute',
+ name: 'code',
+ value: {
+ type: 'mdxJsxAttributeValueExpression',
+ value: literal,
+ data: {
+ estree: {
+ type: 'Program',
+ sourceType: 'module',
+ body: [
+ {
+ type: 'ExpressionStatement',
+ expression: {
+ type: 'Literal',
+ value: code,
+ raw: literal,
+ },
+ },
+ ],
+ },
+ },
+ },
+ };
+}
+
+function remarkPyRunner() {
+ return async (tree) => {
+ const { visit } = await import('unist-util-visit');
+ visit(tree, 'code', (node, index, parent) => {
+ if (!parent || index == null) return;
+ if (node.lang !== 'py' && node.lang !== 'python') return;
+ if (!isLiveMeta(node.meta)) return;
+
+ const props = parseMeta(node.meta);
+ const attributes = [
+ ...toMdxAttributes(props),
+ makeCodeAttribute(node.value),
+ ];
+
+ const jsxNode = {
+ type: 'mdxJsxFlowElement',
+ name: 'PyRunner',
+ attributes,
+ children: [],
+ };
+
+ parent.children.splice(index, 1, jsxNode);
+ });
+ };
+}
+
+module.exports = remarkPyRunner;
diff --git a/sidebars/apprendista.ts b/sidebars/apprendista.ts
new file mode 100644
index 0000000..a6830f3
--- /dev/null
+++ b/sidebars/apprendista.ts
@@ -0,0 +1,11 @@
+import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
+
+// Biblioteca dell'Apprendista (Volume 4 — esercizi e laboratori).
+// Sidebar per percorso, identica struttura agli altri volumi.
+const sidebars: SidebarsConfig = {
+ it: ['intro'],
+ liceo: ['intro'],
+ its: ['intro'],
+};
+
+export default sidebars;
diff --git a/sidebars/archivista.ts b/sidebars/archivista.ts
new file mode 100644
index 0000000..86c6c44
--- /dev/null
+++ b/sidebars/archivista.ts
@@ -0,0 +1,10 @@
+import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
+
+// Manuale dell'Archivista (Volume 3 — 5a).
+const sidebars: SidebarsConfig = {
+ it: ['intro'],
+ liceo: ['intro'],
+ its: ['intro'],
+};
+
+export default sidebars;
diff --git a/sidebars/artefice.ts b/sidebars/artefice.ts
new file mode 100644
index 0000000..1305acf
--- /dev/null
+++ b/sidebars/artefice.ts
@@ -0,0 +1,10 @@
+import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
+
+// Manuale dell'Artefice (Volume 2 — 4a).
+const sidebars: SidebarsConfig = {
+ it: ['intro'],
+ liceo: ['intro'],
+ its: ['intro'],
+};
+
+export default sidebars;
diff --git a/sidebars/programmatore.ts b/sidebars/programmatore.ts
new file mode 100644
index 0000000..8a084f4
--- /dev/null
+++ b/sidebars/programmatore.ts
@@ -0,0 +1,12 @@
+import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
+
+// Manuale del Programmatore (Volume 1 — 3a).
+// Una sidebar per percorso. Lo stesso doc può comparire in più percorsi
+// con label/categoria diverse: l'URL del doc resta unico.
+const sidebars: SidebarsConfig = {
+ it: ['intro', 'variabili'],
+ liceo: ['intro', 'variabili'],
+ its: ['intro'],
+};
+
+export default sidebars;
diff --git a/src/components/NavbarIconButton/index.tsx b/src/components/NavbarIconButton/index.tsx
new file mode 100644
index 0000000..5b88f1b
--- /dev/null
+++ b/src/components/NavbarIconButton/index.tsx
@@ -0,0 +1,50 @@
+/**
+ * NavbarIconButton — un pulsante icona-solo per la navbar, visualmente
+ * gemello del ColorModeToggle: 2rem rotondo, FA icon, popup neon al hover
+ * con caret che punta al pulsante. Il colore del popup è parametrizzato
+ * (es. cyan per link funzionali tipo GitHub, ambra per il caffè).
+ */
+import React, {type ReactNode} from 'react';
+import Link from '@docusaurus/Link';
+
+import styles from './styles.module.css';
+
+export type IconButtonAccent = 'cyan' | 'amber' | 'red';
+
+interface Props {
+ to: string;
+ ariaLabel: string;
+ tooltip: string;
+ /** L'icona da renderizzare (FA, SVG importato, qualsiasi ReactNode). */
+ icon: ReactNode;
+ accent?: IconButtonAccent;
+ target?: string;
+ rel?: string;
+}
+
+export default function NavbarIconButton({
+ to,
+ ariaLabel,
+ tooltip,
+ icon,
+ accent = 'cyan',
+ target,
+ rel,
+}: Props): ReactNode {
+ return (
+
+
+ {icon}
+
+
+
+ {tooltip}
+
+
+ );
+}
diff --git a/src/components/NavbarIconButton/styles.module.css b/src/components/NavbarIconButton/styles.module.css
new file mode 100644
index 0000000..ba729f8
--- /dev/null
+++ b/src/components/NavbarIconButton/styles.module.css
@@ -0,0 +1,202 @@
+@keyframes navIconPopupPulse {
+ 0%,
+ 100% {
+ opacity: 0.55;
+ }
+ 50% {
+ opacity: 1;
+ }
+}
+
+.btn {
+ position: relative;
+ width: 2rem;
+ height: 2rem;
+ margin: 0 2px;
+ border-radius: 50%;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--at-muted);
+ transition:
+ background var(--ifm-transition-fast),
+ color 0.15s ease;
+}
+
+.btn:hover {
+ background: var(--at-bg-subtle);
+ text-decoration: none;
+}
+
+.icon {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 20px;
+ height: 20px;
+ font-size: 20px;
+}
+
+.icon > svg {
+ width: 20px;
+ height: 20px;
+ display: block;
+}
+
+/* Accent hover color — solo l'icona si tinge, il glyph default è muted */
+.cyan:hover {
+ color: var(--at-accent);
+}
+
+.amber:hover {
+ color: #c8845c;
+}
+
+.red:hover {
+ color: #ef4444;
+}
+
+/* ── Neon tooltip with caret pointing to the button ─────────── */
+
+.tooltip {
+ position: absolute;
+ top: calc(100% + 12px);
+ right: 0;
+ transform: translate(0, 4px);
+ padding: 6px 12px;
+ border-radius: 6px;
+ background: rgba(7, 9, 13, 0.92);
+ border: 1px solid;
+ font-family: var(--font-mono-ui);
+ font-size: 12px;
+ font-weight: 600;
+ letter-spacing: 0.06em;
+ white-space: nowrap;
+ pointer-events: none;
+ opacity: 0;
+ transition:
+ opacity 0.18s ease,
+ transform 0.18s ease;
+ z-index: 100;
+}
+
+/* Caret: outer triangle = border color, inner triangle = bg color
+ stacked just inside. The button is 32px wide and the tooltip is
+ anchored to the right edge, so right-offset ≈ button-half-width. */
+.tooltip::before {
+ content: '';
+ position: absolute;
+ bottom: 100%;
+ right: 10px;
+ border: 6px solid transparent;
+}
+
+.tooltip::after {
+ content: '';
+ position: absolute;
+ bottom: 100%;
+ right: 11px;
+ margin-top: 1px;
+ border: 5px solid transparent;
+ border-bottom-color: rgba(7, 9, 13, 0.92);
+}
+
+.tooltipGlow {
+ position: absolute;
+ inset: -4px;
+ border-radius: 10px;
+ filter: blur(8px);
+ z-index: -1;
+ animation: navIconPopupPulse 2.2s ease-in-out infinite;
+}
+
+.tooltipText {
+ position: relative;
+ z-index: 1;
+}
+
+.btn:hover .tooltip,
+.btn:focus-visible .tooltip {
+ opacity: 1;
+ transform: translate(0, 0);
+}
+
+/* ── Accent variants ───────────────────────────────────────── */
+
+.cyan .tooltip {
+ border-color: var(--at-accent);
+ color: var(--at-accent-soft);
+ text-shadow:
+ 0 0 8px var(--at-accent),
+ 0 0 16px rgba(56, 189, 248, 0.4);
+ box-shadow:
+ 0 0 0 1px rgba(56, 189, 248, 0.2),
+ 0 0 18px -2px var(--at-accent),
+ 0 0 32px -8px var(--at-accent-soft),
+ inset 0 0 8px rgba(56, 189, 248, 0.08);
+}
+
+.cyan .tooltip::before {
+ border-bottom-color: var(--at-accent);
+ filter: drop-shadow(0 0 4px var(--at-accent));
+}
+
+.cyan .tooltipGlow {
+ background: radial-gradient(
+ closest-side,
+ rgba(56, 189, 248, 0.35),
+ transparent 70%
+ );
+}
+
+.amber .tooltip {
+ border-color: #c8845c;
+ color: #f0b072;
+ text-shadow:
+ 0 0 8px #c8845c,
+ 0 0 16px rgba(180, 83, 9, 0.45);
+ box-shadow:
+ 0 0 0 1px rgba(200, 132, 92, 0.25),
+ 0 0 18px -2px #c8845c,
+ 0 0 36px -8px #b45309,
+ inset 0 0 10px rgba(180, 83, 9, 0.1);
+}
+
+.amber .tooltip::before {
+ border-bottom-color: #c8845c;
+ filter: drop-shadow(0 0 4px #c8845c);
+}
+
+.amber .tooltipGlow {
+ background: radial-gradient(
+ closest-side,
+ rgba(200, 132, 92, 0.4),
+ transparent 70%
+ );
+}
+
+.red .tooltip {
+ border-color: #ef4444;
+ color: #fca5a5;
+ text-shadow:
+ 0 0 8px #ef4444,
+ 0 0 16px rgba(220, 38, 38, 0.5);
+ box-shadow:
+ 0 0 0 1px rgba(239, 68, 68, 0.25),
+ 0 0 18px -2px #ef4444,
+ 0 0 36px -8px #dc2626,
+ inset 0 0 10px rgba(220, 38, 38, 0.1);
+}
+
+.red .tooltip::before {
+ border-bottom-color: #ef4444;
+ filter: drop-shadow(0 0 4px #ef4444);
+}
+
+.red .tooltipGlow {
+ background: radial-gradient(
+ closest-side,
+ rgba(239, 68, 68, 0.4),
+ transparent 70%
+ );
+}
diff --git a/src/components/OffPathBanner/index.tsx b/src/components/OffPathBanner/index.tsx
new file mode 100644
index 0000000..99d3360
--- /dev/null
+++ b/src/components/OffPathBanner/index.tsx
@@ -0,0 +1,114 @@
+/**
+ * OffPathBanner — avviso mostrato in cima alla pagina di una lezione quando
+ * la lezione NON fa parte del percorso correntemente scelto dall'utente.
+ * Elenca in quali altri percorsi del volume la lezione è presente e offre
+ * un bottone per switchare il percorso (la sidebar si ricostruisce in
+ * place senza navigare).
+ */
+import React, {type ReactNode} from 'react';
+import {useDoc, useDocsVersion} from '@docusaurus/plugin-content-docs/client';
+import type {PropSidebar, PropSidebarItem} from '@docusaurus/plugin-content-docs';
+import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
+import {usePathContext, type VolumeId} from '@site/src/contexts/PathContext';
+import {pathLabel} from '@site/src/contexts/pathLabels';
+
+import styles from './styles.module.css';
+
+const VOLUMES: ReadonlySet = new Set([
+ 'programmatore',
+ 'artefice',
+ 'archivista',
+ 'apprendista',
+]);
+
+function sidebarContainsDoc(items: PropSidebar, docId: string): boolean {
+ for (const item of items as PropSidebarItem[]) {
+ if (item.type === 'link' && item.docId === docId) return true;
+ if (item.type === 'category' && sidebarContainsDoc(item.items, docId))
+ return true;
+ }
+ return false;
+}
+
+function useOffPathInfo() {
+ const {metadata} = useDoc();
+ const version = useDocsVersion();
+ const {getPath} = usePathContext();
+
+ if (!VOLUMES.has(version.pluginId)) return null;
+ const volumeId = version.pluginId as VolumeId;
+ const chosen = getPath(volumeId);
+ if (!chosen) return null; // utente non ha mai scelto → niente banner
+
+ const sidebars = version.docsSidebars ?? {};
+ const activeSidebar = sidebars[chosen];
+ if (!activeSidebar) return null;
+
+ if (sidebarContainsDoc(activeSidebar as PropSidebar, metadata.id)) {
+ return null; // la lezione è nel percorso attivo → tutto ok
+ }
+
+ const availableIn = Object.entries(sidebars)
+ .filter(
+ ([name, sb]) =>
+ name !== chosen &&
+ sidebarContainsDoc(sb as PropSidebar, metadata.id),
+ )
+ .map(([name]) => name);
+
+ return {volumeId, chosen, availableIn};
+}
+
+export default function OffPathBanner(): ReactNode {
+ const info = useOffPathInfo();
+ const {setPath} = usePathContext();
+ if (!info) return null;
+ const {volumeId, chosen, availableIn} = info;
+
+ return (
+
+
+
+ Lezione fuori dal percorso{' '}
+ {pathLabel(chosen)}
+ {availableIn.length > 0 ? (
+ <>
+
+ ·
+
+ Disponibile in{' '}
+ {availableIn.map((p, i) => (
+
+ {i > 0 && (
+
+ {' '}·{' '}
+
+ )}
+ setPath(volumeId, p)}>
+ {pathLabel(p)}
+
+
+ ))}
+ >
+ ) : (
+ <>
+
+ ·
+
+ Non inclusa in nessun altro percorso
+ >
+ )}
+
+
+ );
+}
diff --git a/src/components/OffPathBanner/styles.module.css b/src/components/OffPathBanner/styles.module.css
new file mode 100644
index 0000000..ebffdd6
--- /dev/null
+++ b/src/components/OffPathBanner/styles.module.css
@@ -0,0 +1,84 @@
+.banner {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding: 10px 14px;
+ margin: 0 0 24px;
+ border-radius: 8px;
+ background: rgba(245, 158, 11, 0.06);
+ border: 1px solid rgba(245, 158, 11, 0.28);
+ border-left-width: 3px;
+ color: var(--at-fg-body);
+ font-family: var(--font-body);
+ font-size: 1rem;
+ line-height: 1.5;
+}
+
+html[data-theme='dark'] .banner {
+ background: rgba(251, 191, 36, 0.05);
+ border-color: rgba(251, 191, 36, 0.28);
+}
+
+.icon {
+ color: #d97706;
+ font-size: 15px;
+ flex-shrink: 0;
+}
+
+html[data-theme='dark'] .icon {
+ color: #fbbf24;
+}
+
+.banner > .message {
+ flex: 1;
+ margin: 0;
+ font-size: 1rem;
+ line-height: 1.5;
+ color: var(--at-fg);
+}
+
+.tag {
+ font-family: var(--font-mono-ui);
+ font-size: 0.82em;
+ font-weight: 600;
+ letter-spacing: 0.04em;
+ padding: 1px 7px;
+ border-radius: 4px;
+ background: rgba(245, 158, 11, 0.14);
+ color: #b45309;
+}
+
+html[data-theme='dark'] .tag {
+ background: rgba(251, 191, 36, 0.14);
+ color: #fbbf24;
+}
+
+.sep {
+ display: inline-block;
+ margin: 0 8px;
+ color: var(--at-faint);
+}
+
+.minisep {
+ color: var(--at-faint);
+}
+
+.switch {
+ appearance: none;
+ background: none;
+ border: none;
+ padding: 0;
+ margin: 0;
+ font: inherit;
+ font-family: var(--font-mono-ui);
+ font-size: 0.88em;
+ letter-spacing: 0.02em;
+ color: var(--at-accent);
+ cursor: pointer;
+ text-decoration: underline;
+ text-underline-offset: 2px;
+}
+
+.switch:hover {
+ color: var(--at-accent-soft);
+}
diff --git a/src/components/PathSelector/index.tsx b/src/components/PathSelector/index.tsx
new file mode 100644
index 0000000..2a3deba
--- /dev/null
+++ b/src/components/PathSelector/index.tsx
@@ -0,0 +1,66 @@
+/**
+ * PathSelector — segmented control nella navbar per scegliere il percorso
+ * (IT / Liceo / ITS ecc.) del volume correntemente visitato. Visibile solo
+ * quando l'utente è dentro un volume; nascosto altrove.
+ *
+ * I percorsi disponibili sono dedotti dalle sidebar dichiarate per il
+ * plugin-content-docs instance del volume attivo: ogni "sidebar name"
+ * = un percorso.
+ */
+import React, {type ReactNode} from 'react';
+import {
+ useActivePlugin,
+ useAllDocsData,
+} from '@docusaurus/plugin-content-docs/client';
+import {usePathContext, type VolumeId} from '@site/src/contexts/PathContext';
+import {pathLabel} from '@site/src/contexts/pathLabels';
+
+import styles from './styles.module.css';
+
+const VOLUMES: ReadonlySet = new Set([
+ 'programmatore',
+ 'artefice',
+ 'archivista',
+ 'apprendista',
+]);
+
+export default function PathSelector(): ReactNode {
+ const activePlugin = useActivePlugin();
+ const allData = useAllDocsData();
+ const {getPath, setPath} = usePathContext();
+
+ if (!activePlugin || !VOLUMES.has(activePlugin.pluginId)) {
+ return null;
+ }
+ const volumeId = activePlugin.pluginId as VolumeId;
+
+ // Ricavo i nomi delle sidebar (= percorsi) dichiarate per questa istanza
+ // leggendo i metadata della versione "current".
+ const pluginData = allData[volumeId];
+ const version = pluginData?.versions?.find((v) => v.name === 'current');
+ if (!version) return null;
+ const pathIds = Object.keys(version.sidebars ?? {});
+ if (pathIds.length <= 1) return null;
+
+ // Default: primo percorso dichiarato per il volume. Se l'utente non ha
+ // ancora scelto nulla, non scriviamo nulla in localStorage — solo evidenza
+ // visiva.
+ const stored = getPath(volumeId);
+ const active = stored ?? pathIds[0];
+
+ return (
+
+ {pathIds.map((id) => (
+ setPath(volumeId, id)}>
+ {pathLabel(id, true)}
+
+ ))}
+
+ );
+}
+
diff --git a/src/components/PathSelector/styles.module.css b/src/components/PathSelector/styles.module.css
new file mode 100644
index 0000000..37829ea
--- /dev/null
+++ b/src/components/PathSelector/styles.module.css
@@ -0,0 +1,43 @@
+.wrap {
+ display: inline-flex;
+ align-items: center;
+ gap: 2px;
+ padding: 2px;
+ background: var(--at-bg-subtle);
+ border: 1px solid var(--at-border);
+ border-radius: 999px;
+ margin: 0 8px;
+}
+
+.btn {
+ appearance: none;
+ background: transparent;
+ border: none;
+ border-radius: 999px;
+ cursor: pointer;
+ font-family: var(--font-mono-ui);
+ font-size: 12px;
+ font-weight: 500;
+ letter-spacing: 0.05em;
+ padding: 4px 10px;
+ color: var(--at-muted);
+ transition:
+ background 0.15s ease,
+ color 0.15s ease;
+}
+
+.btn:hover {
+ color: var(--at-fg-strong);
+}
+
+.btn.active {
+ background: var(--at-accent-bg);
+ color: var(--at-accent-soft);
+ font-weight: 600;
+ box-shadow: inset 0 0 0 1px var(--at-accent-chip-border);
+}
+
+.btn:focus-visible {
+ outline: 2px solid var(--at-accent);
+ outline-offset: 1px;
+}
diff --git a/src/components/VolumeCard/index.tsx b/src/components/VolumeCard/index.tsx
index 0267a20..a3f19ae 100644
--- a/src/components/VolumeCard/index.tsx
+++ b/src/components/VolumeCard/index.tsx
@@ -2,7 +2,7 @@ import { useRef, type CSSProperties, type ReactNode } from 'react';
import Link from '@docusaurus/Link';
import styles from './styles.module.css';
-type Accent = 'blue' | 'pink';
+type Accent = 'blue' | 'pink' | 'amber' | 'green';
interface VolumeCardProps {
to: string;
@@ -40,6 +40,32 @@ const PALETTES: Record = {
['--vol-icon-color' as string]: '#a21caf',
['--vol-kicker-color' as string]: '#a21caf',
},
+ amber: {
+ ['--vol-glow' as string]: 'rgba(245,158,11,0.28)',
+ ['--vol-shadow' as string]: 'rgba(245,158,11,0.4)',
+ ['--vol-ring' as string]: 'rgba(245,158,11,0.4)',
+ ['--vol-beam-1' as string]: '#f59e0b',
+ ['--vol-beam-2' as string]: '#fb923c',
+ ['--vol-beam-3' as string]: '#ef4444',
+ ['--vol-icon-bg' as string]:
+ 'linear-gradient(135deg, rgba(245,158,11,0.15), rgba(251,146,60,0.15))',
+ ['--vol-icon-border' as string]: 'rgba(245,158,11,0.3)',
+ ['--vol-icon-color' as string]: '#b45309',
+ ['--vol-kicker-color' as string]: '#b45309',
+ },
+ green: {
+ ['--vol-glow' as string]: 'rgba(34,197,94,0.28)',
+ ['--vol-shadow' as string]: 'rgba(34,197,94,0.4)',
+ ['--vol-ring' as string]: 'rgba(34,197,94,0.4)',
+ ['--vol-beam-1' as string]: '#10b981',
+ ['--vol-beam-2' as string]: '#14b8a6',
+ ['--vol-beam-3' as string]: '#06b6d4',
+ ['--vol-icon-bg' as string]:
+ 'linear-gradient(135deg, rgba(34,197,94,0.15), rgba(20,184,166,0.15))',
+ ['--vol-icon-border' as string]: 'rgba(34,197,94,0.3)',
+ ['--vol-icon-color' as string]: '#15803d',
+ ['--vol-kicker-color' as string]: '#15803d',
+ },
};
function ArrowRight() {
diff --git a/src/contexts/PathContext.tsx b/src/contexts/PathContext.tsx
new file mode 100644
index 0000000..90f74c3
--- /dev/null
+++ b/src/contexts/PathContext.tsx
@@ -0,0 +1,119 @@
+/**
+ * PathContext — persistenza per-volume del percorso scelto dall'utente
+ * (es. IT / Liceo / ITS). Salvato in localStorage con chiave
+ * `pdb:path:`. Ogni volume sceglie autonomamente il suo set
+ * di percorsi disponibili (vedi sidebars/.ts).
+ */
+import React, {
+ createContext,
+ useCallback,
+ useContext,
+ useEffect,
+ useMemo,
+ useState,
+ type ReactNode,
+} from 'react';
+
+export type VolumeId =
+ | 'programmatore'
+ | 'artefice'
+ | 'archivista'
+ | 'apprendista';
+
+const STORAGE_PREFIX = 'pdb:path';
+const storageKey = (volume: VolumeId) => `${STORAGE_PREFIX}:${volume}`;
+
+type PathState = Partial>;
+
+type PathContextValue = {
+ /** Percorso correntemente attivo per il volume specificato (o null se mai scelto). */
+ getPath: (volume: VolumeId) => string | null;
+ /** Imposta il percorso per un volume; persiste in localStorage. */
+ setPath: (volume: VolumeId, path: string) => void;
+ /** Cancella la scelta per un volume (torna al default della sidebar). */
+ clearPath: (volume: VolumeId) => void;
+};
+
+const PathContext = createContext(null);
+
+function readInitialState(): PathState {
+ if (typeof window === 'undefined') return {};
+ const out: PathState = {};
+ for (const v of [
+ 'programmatore',
+ 'artefice',
+ 'archivista',
+ 'apprendista',
+ ] as VolumeId[]) {
+ try {
+ const raw = window.localStorage.getItem(storageKey(v));
+ if (raw) out[v] = raw;
+ } catch {
+ // localStorage disabilitato → silently ignore
+ }
+ }
+ return out;
+}
+
+export function PathProvider({children}: {children: ReactNode}) {
+ const [state, setState] = useState(() => readInitialState());
+
+ // Hydration: il primo render server-side restituisce {}, sincronizziamo al mount.
+ useEffect(() => {
+ setState(readInitialState());
+ }, []);
+
+ // Cross-tab sync: se l'utente cambia la scelta in un'altra tab, aggiorniamo qui.
+ useEffect(() => {
+ if (typeof window === 'undefined') return;
+ const onStorage = (e: StorageEvent) => {
+ if (!e.key?.startsWith(STORAGE_PREFIX + ':')) return;
+ const v = e.key.slice(STORAGE_PREFIX.length + 1) as VolumeId;
+ setState((prev) => ({...prev, [v]: e.newValue ?? undefined}));
+ };
+ window.addEventListener('storage', onStorage);
+ return () => window.removeEventListener('storage', onStorage);
+ }, []);
+
+ const getPath = useCallback(
+ (volume: VolumeId) => state[volume] ?? null,
+ [state],
+ );
+
+ const setPath = useCallback((volume: VolumeId, path: string) => {
+ setState((prev) => ({...prev, [volume]: path}));
+ try {
+ window.localStorage.setItem(storageKey(volume), path);
+ } catch {
+ /* ignore */
+ }
+ }, []);
+
+ const clearPath = useCallback((volume: VolumeId) => {
+ setState((prev) => {
+ const next = {...prev};
+ delete next[volume];
+ return next;
+ });
+ try {
+ window.localStorage.removeItem(storageKey(volume));
+ } catch {
+ /* ignore */
+ }
+ }, []);
+
+ const value = useMemo(
+ () => ({getPath, setPath, clearPath}),
+ [getPath, setPath, clearPath],
+ );
+
+ return {children} ;
+}
+
+export function usePathContext(): PathContextValue {
+ const ctx = useContext(PathContext);
+ if (!ctx) {
+ throw new Error('usePathContext deve essere usato dentro ');
+ }
+ return ctx;
+}
diff --git a/src/contexts/pathLabels.ts b/src/contexts/pathLabels.ts
new file mode 100644
index 0000000..f330785
--- /dev/null
+++ b/src/contexts/pathLabels.ts
@@ -0,0 +1,22 @@
+/**
+ * Etichette umane dei percorsi didattici, condivise fra PathSelector,
+ * OffPathBanner e qualsiasi altro componente che debba mostrarle.
+ * Aggiungi qui se un volume introduce un nuovo percorso.
+ */
+export const PATH_LABEL: Record = {
+ it: 'Istituto Tecnico',
+ liceo: 'Liceo',
+ its: 'ITS',
+};
+
+/** Etichetta breve da usare nei controlli compatti (toggle in navbar). */
+export const PATH_LABEL_SHORT: Record = {
+ it: 'IT',
+ liceo: 'Liceo',
+ its: 'ITS',
+};
+
+export function pathLabel(id: string, short = false): string {
+ const map = short ? PATH_LABEL_SHORT : PATH_LABEL;
+ return map[id] ?? id;
+}
diff --git a/src/css/custom.css b/src/css/custom.css
index b5ae94b..4b2da60 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -60,6 +60,16 @@ html[data-theme='light'] {
--at-logo-shadow: 0 8px 24px rgba(2, 132, 199, 0.25);
--at-spot-bg: rgba(2, 132, 199, 0.08);
--at-bg-glass: rgba(250, 250, 249, 0.72);
+
+ /* Python syntax palette — match Prism Github (light) */
+ --py-kw: #00009f;
+ --py-str: #e3116c;
+ --py-cmt: #998877;
+ --py-num: #36acaa;
+ --py-fn: #00009f;
+ --py-def: #393a34;
+ --py-op: #393a34;
+ --py-id: #393a34;
}
html[data-theme='dark'] {
@@ -105,6 +115,16 @@ html[data-theme='dark'] {
--at-logo-shadow: 0 0 40px rgba(56, 189, 248, 0.4);
--at-spot-bg: rgba(56, 189, 248, 0.15);
--at-bg-glass: rgba(9, 9, 11, 0.6);
+
+ /* Python syntax palette — match Prism Dracula (dark) */
+ --py-kw: #bd93f9;
+ --py-str: #ff79c6;
+ --py-cmt: #6272a4;
+ --py-num: #f8f8f2;
+ --py-fn: #bd93f9;
+ --py-def: #f8f8f2;
+ --py-op: #f8f8f2;
+ --py-id: #f8f8f2;
}
@property --at-angle {
@@ -183,7 +203,7 @@ html[data-theme='dark'] {
--ifm-color-primary-light: #3377e5;
--ifm-color-primary-lighter: #3e7ee6;
--ifm-color-primary-lightest: #6095ea;
- --ifm-code-font-size: 95%;
+ --ifm-code-font-size: 80%;
--docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1);
--ifm-heading-font-family:
'Optimistic Display', sistem-ui, -apple-system, sans-serif;
@@ -245,120 +265,9 @@ html[data-theme='dark'] .hero {
margin-bottom: 10px;
}*/
-/* Header Icons */
-
-html[data-theme='dark'] .github-link {
- align-items: center;
- display: flex;
-
- &:before {
- align-self: center;
- background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjZTNlM2UzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04IDBDMy41OCAwIDAgMy41OCAwIDhjMCAzLjU0IDIuMjkgNi41MyA1LjQ3IDcuNTkuNC4wNy41NS0uMTcuNTUtLjM4IDAtLjE5LS4wMS0uODItLjAxLTEuNDktMi4wMS4zNy0yLjUzLS40OS0yLjY5LS45NC0uMDktLjIzLS40OC0uOTQtLjgyLTEuMTMtLjI4LS4xNS0uNjgtLjUyLS4wMS0uNTMuNjMtLjAxIDEuMDguNTggMS4yMy44Mi43MiAxLjIxIDEuODcuODcgMi4zMy42Ni4wNy0uNTIuMjgtLjg3LjUxLTEuMDctMS43OC0uMi0zLjY0LS44OS0zLjY0LTMuOTUgMC0uODcuMzEtMS41OS44Mi0yLjE1LS4wOC0uMi0uMzYtMS4wMi4wOC0yLjEyIDAgMCAuNjctLjIxIDIuMi44Mi42NC0uMTggMS4zMi0uMjcgMi0uMjcuNjggMCAxLjM2LjA5IDIgLjI3IDEuNTMtMS4wNCAyLjItLjgyIDIuMi0uODIuNDQgMS4xLjE2IDEuOTIuMDggMi4xMi41MS41Ni44MiAxLjI3LjgyIDIuMTUgMCAzLjA3LTEuODcgMy43NS0zLjY1IDMuOTUuMjkuMjUuNTQuNzMuNTQgMS40OCAwIDEuMDctLjAxIDEuOTMtLjAxIDIuMiAwIC4yMS4xNS40Ni41NS4zOEE4LjAxMyA4LjAxMyAwIDAwMTYgOGMwLTQuNDItMy41OC04LTgtOHoiLz48L3N2Zz4=') 0 0 / contain;
- content: '';
- display: inline-flex;
- height: 24px;
- width: 24px;
- margin-right: 0.5rem;
- color: var(--ifm-navbar-link-color);
- }
-
- &:hover {
- &:before {
- background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDE2IDE2Ij48cGF0aCBmaWxsPSIjMjVjMmEwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04IDBDMy41OCAwIDAgMy41OCAwIDhjMCAzLjU0IDIuMjkgNi41MyA1LjQ3IDcuNTkuNC4wNy41NS0uMTcuNTUtLjM4IDAtLjE5LS4wMS0uODItLjAxLTEuNDktMi4wMS4zNy0yLjUzLS40OS0yLjY5LS45NC0uMDktLjIzLS40OC0uOTQtLjgyLTEuMTMtLjI4LS4xNS0uNjgtLjUyLS4wMS0uNTMuNjMtLjAxIDEuMDguNTggMS4yMy44Mi43MiAxLjIxIDEuODcuODcgMi4zMy42Ni4wNy0uNTIuMjgtLjg3LjUxLTEuMDctMS43OC0uMi0zLjY0LS44OS0zLjY0LTMuOTUgMC0uODcuMzEtMS41OS44Mi0yLjE1LS4wOC0uMi0uMzYtMS4wMi4wOC0yLjEyIDAgMCAuNjctLjIxIDIuMi44Mi42NC0uMTggMS4zMi0uMjcgMi0uMjcuNjggMCAxLjM2LjA5IDIgLjI3IDEuNTMtMS4wNCAyLjItLjgyIDIuMi0uODIuNDQgMS4xLjE2IDEuOTIuMDggMi4xMi41MS41Ni44MiAxLjI3LjgyIDIuMTUgMCAzLjA3LTEuODcgMy43NS0zLjY1IDMuOTUuMjkuMjUuNTQuNzMuNTQgMS40OCAwIDEuMDctLjAxIDEuOTMtLjAxIDIuMiAwIC4yMS4xNS40Ni41NS4zOEE4LjAxMyA4LjAxMyAwIDAwMTYgOGMwLTQuNDItMy41OC04LTgtOHoiLz48L3N2Zz4=') 0 0 / contain;
- }
- }
-}
-
-html[data-theme='light'] .github-link {
- align-items: center;
- display: flex;
-
- &:before {
- align-self: center;
- background: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImN1cnJlbnRDb2xvciIgIHN0cm9rZS13aWR0aD0iMiIgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgIHN0cm9rZS1saW5lam9pbj0icm91bmQiICBjbGFzcz0iaWNvbiBpY29uLXRhYmxlciBpY29ucy10YWJsZXItb3V0bGluZSBpY29uLXRhYmxlci1icmFuZC1naXRodWIiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik05IDE5Yy00LjMgMS40IC00LjMgLTIuNSAtNiAtM20xMiA1di0zLjVjMCAtMSAuMSAtMS40IC0uNSAtMmMyLjggLS4zIDUuNSAtMS40IDUuNSAtNmE0LjYgNC42IDAgMCAwIC0xLjMgLTMuMmE0LjIgNC4yIDAgMCAwIC0uMSAtMy4ycy0xLjEgLS4zIC0zLjUgMS4zYTEyLjMgMTIuMyAwIDAgMCAtNi4yIDBjLTIuNCAtMS42IC0zLjUgLTEuMyAtMy41IC0xLjNhNC4yIDQuMiAwIDAgMCAtLjEgMy4yYTQuNiA0LjYgMCAwIDAgLTEuMyAzLjJjMCA0LjYgMi43IDUuNyA1LjUgNmMtLjYgLjYgLS42IDEuMiAtLjUgMnYzLjUiIC8+PC9zdmc+ ') 0 0 / contain;
- content: '';
- display: inline-flex;
- height: 24px;
- width: 24px;
- margin-right: 0.5rem;
- color: var(--ifm-navbar-link-color);
- }
-
- &:hover {
- &:before {
- background: url('data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiAgd2lkdGg9IjI0IiAgaGVpZ2h0PSIyNCIgIHZpZXdCb3g9IjAgMCAyNCAyNCIgIGZpbGw9Im5vbmUiICBzdHJva2U9ImN1cnJlbnRDb2xvciIgIHN0cm9rZS13aWR0aD0iMiIgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgIHN0cm9rZS1saW5lam9pbj0icm91bmQiICBjbGFzcz0iaWNvbiBpY29uLXRhYmxlciBpY29ucy10YWJsZXItb3V0bGluZSBpY29uLXRhYmxlci1icmFuZC1naXRodWIiPjxwYXRoIHN0cm9rZT0ibm9uZSIgZD0iTTAgMGgyNHYyNEgweiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik05IDE5Yy00LjMgMS40IC00LjMgLTIuNSAtNiAtM20xMiA1di0zLjVjMCAtMSAuMSAtMS40IC0uNSAtMmMyLjggLS4zIDUuNSAtMS40IDUuNSAtNmE0LjYgNC42IDAgMCAwIC0xLjMgLTMuMmE0LjIgNC4yIDAgMCAwIC0uMSAtMy4ycy0xLjEgLS4zIC0zLjUgMS4zYTEyLjMgMTIuMyAwIDAgMCAtNi4yIDBjLTIuNCAtMS42IC0zLjUgLTEuMyAtMy41IC0xLjNhNC4yIDQuMiAwIDAgMCAtLjEgMy4yYTQuNiA0LjYgMCAwIDAgLTEuMyAzLjJjMCA0LjYgMi43IDUuNyA1LjUgNmMtLjYgLjYgLS42IDEuMiAtLjUgMnYzLjUiIC8+PC9zdmc+') 0 0 / contain;
- }
- }
-}
-
-@keyframes heart {
-
- 0%,
- 40%,
- 80%,
- 100% {
- transform: scale(1);
- }
-
- 20%,
- 60% {
- transform: scale(1.15);
- }
-}
-
-.sponsorship-link {
- align-items: center;
- display: flex;
-
- &:before {
- align-self: center;
- background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSIjYzk2MTk4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjczNiA0QzQuNjU3IDQgMi41IDUuODggMi41IDguNTE0YzAgMy4xMDcgMi4zMjQgNS45NiA0Ljg2MSA4LjEyYTI5LjY2IDI5LjY2IDAgMDA0LjU2NiAzLjE3NWwuMDczLjA0MS4wNzMtLjA0Yy4yNzEtLjE1My42NjEtLjM4IDEuMTMtLjY3NC45NC0uNTg4IDIuMTktMS40NDEgMy40MzYtMi41MDIgMi41MzctMi4xNiA0Ljg2MS01LjAxMyA0Ljg2MS04LjEyQzIxLjUgNS44OCAxOS4zNDMgNCAxNy4yNjQgNGMtMi4xMDYgMC0zLjgwMSAxLjM4OS00LjU1MyAzLjY0M2EuNzUuNzUgMCAwMS0xLjQyMiAwQzEwLjUzNyA1LjM4OSA4Ljg0MSA0IDYuNzM2IDR6TTEyIDIwLjcwM2wuMzQzLjY2N2EuNzUuNzUgMCAwMS0uNjg2IDBsLjM0My0uNjY3ek0xIDguNTEzQzEgNS4wNTMgMy44MjkgMi41IDYuNzM2IDIuNSA5LjAzIDIuNSAxMC44ODEgMy43MjYgMTIgNS42MDUgMTMuMTIgMy43MjYgMTQuOTcgMi41IDE3LjI2NCAyLjUgMjAuMTcgMi41IDIzIDUuMDUyIDIzIDguNTE0YzAgMy44MTgtMi44MDEgNy4wNi01LjM4OSA5LjI2MmEzMS4xNDYgMzEuMTQ2IDAgMDEtNS4yMzMgMy41NzZsLS4wMjUuMDEzLS4wMDcuMDAzLS4wMDIuMDAxLS4zNDQtLjY2Ni0uMzQzLjY2Ny0uMDAzLS4wMDItLjAwNy0uMDAzLS4wMjUtLjAxM0EyOS4zMDggMjkuMzA4IDAgMDExMCAyMC40MDhhMzEuMTQ3IDMxLjE0NyAwIDAxLTMuNjExLTIuNjMyQzMuOCAxNS41NzMgMSAxMi4zMzIgMSA4LjUxNHoiLz48L3N2Zz4=') 0 0 / contain;
- content: '';
- display: inline-flex;
- height: 24px;
- width: 24px;
- margin-right: 0.5rem;
- color: var(--ifm-navbar-link-color);
- }
-
- &:hover {
- color: #c96198;
-
- &:before {
- animation: heart 2000ms infinite;
- }
- }
-}
-
-.rainbowbits-link {
- align-items: center;
- display: flex;
-
- &:before {
- align-self: center;
- background: url('/static/img/icons/rb-icon.svg') 0 0 / contain;
- content: '';
- display: inline-flex;
- height: 24px;
- width: 24px;
- margin-right: 0.5rem;
- }
-}
-
-.designedBy {
- display: inline-flex;
- align-items: center;
-
- .heart {
- margin: 0.25rem;
- animation: heart 1500ms infinite;
- fill: red;
- }
-
- a {
- margin-inline-start: 0.25rem;
- }
-}
+/* (Header icon buttons are now rendered via NavbarIconButton React
+ component invoked from the Navbar/Content swizzle — no per-class
+ CSS hooks needed.) */
/* Font */
diff --git a/src/icons/mug-saucer.svg b/src/icons/mug-saucer.svg
new file mode 100644
index 0000000..1099b96
--- /dev/null
+++ b/src/icons/mug-saucer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/starfighter.svg b/src/icons/starfighter.svg
new file mode 100644
index 0000000..312f1a8
--- /dev/null
+++ b/src/icons/starfighter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/user-sith.svg b/src/icons/user-sith.svg
new file mode 100644
index 0000000..1525064
--- /dev/null
+++ b/src/icons/user-sith.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 47e1173..0f66693 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -28,6 +28,26 @@ function BoxIcon() {
);
}
+function DatabaseIcon() {
+ return (
+
+
+
+
+
+ );
+}
+
+function FlaskIcon() {
+ return (
+
+
+
+
+
+ );
+}
+
const HERO_CODE = `# Il tuo primo programma
nome = input("Come ti chiami? ")
print(f"Ciao, {nome}!")
@@ -88,21 +108,37 @@ export default function Home(): JSX.Element {
style={{ animationDelay: '0.4s' }}
>
}
accent="blue"
/>
}
accent="pink"
/>
+ }
+ accent="amber"
+ />
+ }
+ accent="green"
+ />
diff --git a/src/pages/playground.module.css b/src/pages/playground.module.css
new file mode 100644
index 0000000..3b2e483
--- /dev/null
+++ b/src/pages/playground.module.css
@@ -0,0 +1,66 @@
+.page {
+ /* Sotto la navbar Docusaurus (var --ifm-navbar-height ≈ 60px). */
+ height: calc(100vh - var(--ifm-navbar-height));
+ display: flex;
+ flex-direction: column;
+ background: var(--at-bg-base, var(--ifm-background-color));
+}
+
+.host {
+ flex: 1;
+ min-height: 0;
+ display: flex;
+}
+
+.host > * {
+ flex: 1;
+ min-height: 0;
+}
+
+.untrustedBanner {
+ display: flex;
+ align-items: flex-start;
+ gap: 0.75rem;
+ padding: 0.75rem 1rem;
+ background: var(--at-warn-bg, #fff8e1);
+ color: var(--at-warn-fg, #7a4f01);
+ border-bottom: 1px solid var(--at-warn-border, #f0c674);
+ font-family: var(--ifm-font-family-base);
+ font-size: 0.9rem;
+ line-height: 1.4;
+}
+
+.untrustedBannerIcon {
+ flex: 0 0 auto;
+ font-size: 1.1em;
+ line-height: 1.2;
+}
+
+.untrustedBannerBody {
+ flex: 1;
+}
+
+.untrustedBannerBody strong {
+ display: block;
+ margin-bottom: 0.15em;
+}
+
+[data-theme='dark'] .untrustedBanner {
+ background: var(--at-warn-bg, #3a2a05);
+ color: var(--at-warn-fg, #f3d27a);
+ border-bottom-color: var(--at-warn-border, #6b4f10);
+}
+
+.empty {
+ margin: auto;
+ padding: 2rem;
+ max-width: 520px;
+ text-align: center;
+ color: var(--at-muted-soft, var(--ifm-color-emphasis-700));
+ font-family: var(--ifm-font-family-base);
+}
+
+.empty h2 {
+ font-family: 'Crimson Pro', serif;
+ margin-bottom: 0.4em;
+}
diff --git a/src/pages/playground.tsx b/src/pages/playground.tsx
new file mode 100644
index 0000000..4a37b58
--- /dev/null
+++ b/src/pages/playground.tsx
@@ -0,0 +1,107 @@
+import { useState } from 'react';
+import BrowserOnly from '@docusaurus/BrowserOnly';
+import Layout from '@theme/Layout';
+import Heading from '@theme/Heading';
+import PyRunner from '@site/src/theme/PyRunner';
+import { decodeCode } from '@site/src/theme/PyRunner/share';
+import styles from './playground.module.css';
+
+interface PlaygroundParams {
+ src?: string;
+ code?: string;
+ title?: string;
+ error?: string;
+}
+
+function parseParams(): PlaygroundParams {
+ if (typeof window === 'undefined') return {};
+ const q = new URLSearchParams(window.location.search);
+ const src = q.get('src') ?? undefined;
+ const rawCode = q.get('code');
+ const title = q.get('title') ?? undefined;
+ try {
+ return {
+ src,
+ code: rawCode ? decodeCode(rawCode) : undefined,
+ title,
+ };
+ } catch {
+ return { error: 'Parametri non validi nella URL.' };
+ }
+}
+
+function PlaygroundInner() {
+ // Lazy init: parseParams legge window.location, sicuro qui perché siamo
+ // sotto BrowserOnly.
+ const [params] = useState(() => parseParams());
+
+ if (params.error) {
+ return {params.error}
;
+ }
+
+ const hasContent = params.src || typeof params.code === 'string';
+ if (!hasContent) {
+ return (
+
+
Playground vuoto
+
+ Apri questa pagina dal bottone Apri a tutto schermo di un
+ PyRunner per modificarne il codice qui.
+
+
+ );
+ }
+
+ // `?src=` punta a un file `.py` whitelisted nel repo (build-time).
+ // `?code=` può venire da qualunque link condiviso → potenzialmente non
+ // fidato: avvisiamo l'utente prima di lasciarlo eseguire.
+ const fromUntrustedUrl = !params.src && typeof params.code === 'string';
+
+ return (
+ <>
+ {fromUntrustedUrl && (
+
+
+ ⚠️
+
+
+ Codice da un link esterno
+ Questo codice arriva da un URL e non dal manuale. Leggilo prima
+ di premere Esegui : gira nel tuo browser e può fare
+ tutto quello che il codice Python può fare in una pagina web.
+
+
+ )}
+
+ >
+ );
+}
+
+export default function Playground(): JSX.Element {
+ return (
+
+
+ Caricamento…}
+ >
+ {() => }
+
+
+
+ );
+}
diff --git a/src/pyBoot.ts b/src/pyBoot.ts
new file mode 100644
index 0000000..deae1be
--- /dev/null
+++ b/src/pyBoot.ts
@@ -0,0 +1,72 @@
+/**
+ * Client module: garantisce che Brython sia inizializzato esattamente una volta.
+ * Espone una Promise risolta quando __BRYTHON__ è pronto e l'init è stato chiamato.
+ *
+ * Il plugin server (`plugins/pyrunner`) inietta gli