diff --git a/docs/boards/mcu/mcu-erster-sketch.mdx b/docs/boards/mcu/mcu-erster-sketch.mdx index e08a2be..e642a68 100644 --- a/docs/boards/mcu/mcu-erster-sketch.mdx +++ b/docs/boards/mcu/mcu-erster-sketch.mdx @@ -14,7 +14,7 @@ Blockly ist die vom senseBox-Team entwickelte grafische Programmierumgebung für ## Oberfläche -Nachdem du deine senseBox-Version ausgewählt hast, befindest du dich auf der Programmieroberfläche. Diese lässt sich in fünf wichtige Bereiche einteilen. +Nachdem du deine senseBox-Version ausgewählt hast, befindest du dich auf der Programmieroberfläche. Diese lässt sich in sechs wichtige Bereiche einteilen. ![](/img/blockly-bilder/erster-sketch/Oberflaeche.png) @@ -28,7 +28,9 @@ Nachdem du deine senseBox-Version ausgewählt hast, befindest du dich auf der Pr Hier findest du den wohl wichtigsten Knopf für Blockly. Mit dem orangenen 'Kompilieren' Knopf kannst du deinen erstellten Sketch kompilieren & herunterladen. Darüber hinaus kannst du hier deinen Sketch umbenenen, herunterladen, teilen, Screenshots erstellen oder den Arduino QUellcode deines Sketches in in die Zwischenablage speichern. 5. **Arduino Quellcode und XML Blöcke:** Hier wird dir parellel zur grafischen Programmierung der Arduino Quellcode angezeigt. Durch einen Klick auf die Schaltfläche XML Blöcke lässt sich die Ansicht auf den XML Code umschalten. - +6. **Hilfe Kasten:** + Hier findest du eine kurze Anleitung, wie du den ausgewählten Block verwenden kannst und wo du mehr Informationen finden kannst. + ## Programmieren Um dein Programm zu schreiben, müssen die Blöcke aus der Toolbar per Drag & Drop im Arbeitsbereich platziert werden. @@ -49,7 +51,7 @@ Um die eingebaute LED anzuschalten, musst du den `LED an digital`-Block in die E ### Schritt 3: Die eingebaute LED blinken lassen -Um die eingebaute LED blinken zu lassen, ist es nötig, sie mit einem weiteren LED an digital Block wieder auszuschalten. Zusätzlich muss nach dem An- sowie Ausschalten eine Pause eingefügt werden, damit das Blinken überhaupt sichtbar ist. Den Warte Block findest du in der Kategorie Zeit. +Um die eingebaute LED blinken zu lassen, ist es nötig, sie mit einem weiteren LED an digital Block wieder auszuschalten. Zusätzlich muss nach dem An- sowie Ausschalten eine Pause eingefügt werden, damit das Blinken überhaupt sichtbar ist. Den Warte `Block` findest du in der Kategorie `Zeit`. # ![](/img/mcu/led-block-3.svg) diff --git a/docs/boards/mcus2/mcus2-erster-sketch.mdx b/docs/boards/mcus2/mcus2-erster-sketch.mdx index 47dad5b..01f2eb6 100644 --- a/docs/boards/mcus2/mcus2-erster-sketch.mdx +++ b/docs/boards/mcus2/mcus2-erster-sketch.mdx @@ -14,7 +14,7 @@ Blockly ist die vom senseBox-Team entwickelte grafische Programmierumgebung für ## Oberfläche -Nachdem du deine senseBox-Version ausgewählt hast, befindest du dich auf der Programmieroberfläche. Diese lässt sich in fünf wichtige Bereiche einteilen. +Nachdem du deine senseBox-Version ausgewählt hast, befindest du dich auf der Programmieroberfläche. Diese lässt sich in sechs wichtige Bereiche einteilen. ![](/img/blockly-bilder/erster-sketch/Oberflaeche.png) @@ -23,7 +23,7 @@ Nachdem du deine senseBox-Version ausgewählt hast, befindest du dich auf der Pr 2. **Die Toolbar:** Hier findest du alle Blöcke zum Programmieren der senseBox. Die Farbe der Blöcke zeigt die jeweilige Kategorie an, zu welcher der Block gehört. 3. **Der Arbeitsbereich:** - In diesem Bereich fügst du deine Programme zusammen. Unten rechts befinden sich Schaltfläche zum Zentrieren, Vergrößern, Verkleinern und Löschen der Blöcke. + In diesem Bereich fügst du deine Programme zusammen. Unten rechts befindet sich eine Schaltfläche zum Zentrieren, Vergrößern, Verkleinern und Löschen der Blöcke. 4. **Kopieren, kompilieren und andere Funktionen von Blockly:** Hier findest du den wohl wichtigsten Knopf für Blockly. Mit dem orangenen 'Kompilieren' Knopf kannst du deinen erstellten Sketch kompilieren & herunterladen. Darüber hinaus kannst du hier deinen Sketch umbenenen, herunterladen, teilen, Screenshots erstellen oder den Arduino QUellcode deines Sketches in in die Zwischenablage speichern. 5. **Arduino Quellcode und XML Blöcke:** @@ -50,7 +50,7 @@ Um die eingebaute LED anzuschalten, musst du den `LED an digital`-Block in die E ![](/img/blockly-bilder/erster-sketch/rgb-led-block-1.svg) -Danach kannst du die LED mit dem `Setze RGB-LED an`- Block in der `Loop()`-Funktion in einer Farbe deiner Wahl leuchten lassen. +Danach kannst du die LED mit dem `Setze RGB-LED an`- Block in der `Endlosschleife()`-Funktion in einer Farbe deiner Wahl leuchten lassen. ![](/img/blockly-bilder/erster-sketch/rgb-led-block-2.svg) diff --git a/docs/editors/blockly/blocks/logik.md b/docs/editors/blockly/blocks/logik.md index d5be569..662a50c 100644 --- a/docs/editors/blockly/blocks/logik.md +++ b/docs/editors/blockly/blocks/logik.md @@ -62,7 +62,7 @@ ______________________________________________________________________________ ______________________________________________________________________________ ### Logische Verknüpfungen -Mit dem Block für `logische Verknüpfungen` lassen sich komplexere logische Asudrücke formulieren. Zum Beispiel eine Lampe, die nur dann leuchtet, wenn zwei Bedingungen zutreffen. +Mit dem Block für `logische Verknüpfungen` lassen sich komplexere logische Ausdrücke formulieren. Zum Beispiel eine Lampe, die nur dann leuchtet, wenn zwei Bedingungen zutreffen. ![](/img/blockly-bilder/logik/blockly-entscheidungen-6.svg) @@ -85,5 +85,5 @@ Mit dem `teste`-Block lässt sich eine Bedingung überprüfen und Aktionen festl ![](/img/blockly-bilder/logik/blockly-entscheidungen-8.svg) -< - [Blockly.senseBox.de](https://blockly.sensebox.de/) +- [Blockly.senseBox.de](https://blockly.sensebox.de/) diff --git a/docs/editors/blockly/blocks/variablen.md b/docs/editors/blockly/blocks/variablen.md index db1236f..1334ef7 100644 --- a/docs/editors/blockly/blocks/variablen.md +++ b/docs/editors/blockly/blocks/variablen.md @@ -38,8 +38,6 @@ In Blockly gibt es folgende Datentypen: **Boolean:** Für Werte die entweder wahr oder falsch sind (bzw. 1 oder 0) -**kurze Zahl:** Für einstellige Zahlen - **Zahl:** Für ganze Zahlen von -32.768 bis 32.767 **große Zahl:** Für große Zahlen von -2.147.483.648 bis 2.147.483.647 diff --git a/docs/hardware/accessoires/led-matrix.mdx b/docs/hardware/accessoires/led-matrix.mdx index 669f3b2..9e36071 100644 --- a/docs/hardware/accessoires/led-matrix.mdx +++ b/docs/hardware/accessoires/led-matrix.mdx @@ -1,5 +1,7 @@ --- title: LED-Matrix +description: Visualisiere Daten oder erstelle Animationen mit der vielseitigen LED-Matrix. +categories: accessories --- import ledMatrix from '@site/static/img/hardware-bilder/led-matrix/led-matrix.png' diff --git a/docs/hardware/accessoires/rgb-led-esp32.mdx b/docs/hardware/accessoires/rgb-led-esp32.mdx index a96288c..0f97e24 100644 --- a/docs/hardware/accessoires/rgb-led-esp32.mdx +++ b/docs/hardware/accessoires/rgb-led-esp32.mdx @@ -12,12 +12,10 @@ Mit der RGB-LED kannst du verschiedene Farben darstellen. Die RGB-LED besteht au {' '} - -

- Die RGB-LED ist auf der MCU S2 verbaut! Du musst hier also nichts weiter - anschließen. -

-
+:::success Module onBoard +Die RGB-LED ist auf der MCU S2 verbaut! Du musst hier also nichts weiter +anschließen. +::: ## Programmierung (Arduino) diff --git a/docs/hardware/sd.mdx b/docs/hardware/sd.mdx index 333bbf5..fa3a7fd 100644 --- a/docs/hardware/sd.mdx +++ b/docs/hardware/sd.mdx @@ -1,6 +1,8 @@ --- sidebar_position: 10 title: SD-Karte +description: Speichere Daten auf einer microSD-Karte! +categories: hardware hide_title: false --- @@ -19,12 +21,10 @@ import sdModul from '@site/static/img/mcus2/sd-card-slot.png' Mit der senseBox kannst du mithilfe des SD-Bees Daten auf einer microSD-Karte speichern, um sie später am Computer auszuwerten. - -

- Das SD-Modul ist auf der MCU S2 verbaut! Du musst hier also nichts weiter - anschließen. -

-
+:::success Modul onBoard +Das SD-Modul ist auf der MCU S2 verbaut! Du musst hier also nichts weiter +anschließen. +::: ## Programmierung (Arduino) diff --git a/docs/hardware/sensors/feinstaub-sps30.mdx b/docs/hardware/sensors/feinstaub-sps30.mdx index b3b2b12..d453309 100644 --- a/docs/hardware/sensors/feinstaub-sps30.mdx +++ b/docs/hardware/sensors/feinstaub-sps30.mdx @@ -8,6 +8,8 @@ import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' import feinstaubSps from '@site/static/img/hardware-bilder/sps30/sps30.png' import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' +# Feinstaubsensor SPS30 + Der Feinstaubsensor SPS30 ist ein hochpräzises Gerät zur Messung der Luftqualität, das speziell für die Erfassung von Feinstaubpartikeln entwickelt wurde. Er misst die Konzentrationen von PM1.0, PM2.5, PM4.0 und PM10 in der Luft. Das Gerät verwendet eine fortschrittliche Laserscattering-Technologie, um die Partikel zu zählen und deren Größe zu bestimmen. Die Messergebnisse werden in µg/m³ angezeigt. diff --git a/docs/hardware/sensors/tof.mdx b/docs/hardware/sensors/tof.mdx index 6caf5b9..1b9ae90 100644 --- a/docs/hardware/sensors/tof.mdx +++ b/docs/hardware/sensors/tof.mdx @@ -1,5 +1,7 @@ --- title: Time-of-Flight (ToF) Sensor +description: Messe Entfernungen und erstelle Tiefenbilder mit dem Time-of-Flight-Sensor. +categories: hardware --- import tofSensor from '@site/static/img/hardware-bilder/tof/tofsensor.png' diff --git a/docs/hardware/sensors/truebner.mdx b/docs/hardware/sensors/truebner.mdx index e79a329..3cc16cc 100644 --- a/docs/hardware/sensors/truebner.mdx +++ b/docs/hardware/sensors/truebner.mdx @@ -9,9 +9,9 @@ import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' import truebnerSensor from '@site/static/img/hardware-bilder/bodenfeuchte-temperatursensor/sensoren_bodenfeuchte_temperatur.png' import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' -# Bodentemperatur- & Feuchtigkeitssensor +# Bodenfeuchte- und Temperatursensor -Der Truebner SMT50 ist ein kapazitiver Bodentemperatur- und Feuchtigkeitssensor und eignet sich daher gut für diverse Anwendungen im heimischen Garten. Kapazitive Bodenfeuchtesensoren erzeugen ein elektrisches Feld um ihre Messelektroden herum. Das Feld dringt in den umgebenden Boden ein. Die Messelektronik des Sensors ermittelt die resultierende elektrische Kapazität der Elektroden. Je höher der Wassergehalt im Boden ist, desto größer wird die Messkapazität des Sensors. +Der Truebner SMT50 ist ein kapazitiver Bodenfeuchte- und Temperatursensor und eignet sich daher gut für diverse Anwendungen im heimischen Garten. Kapazitive Bodenfeuchtesensoren erzeugen ein elektrisches Feld um ihre Messelektroden herum. Das Feld dringt in den umgebenden Boden ein. Die Messelektronik des Sensors ermittelt die resultierende elektrische Kapazität der Elektroden. Je höher der Wassergehalt im Boden ist, desto größer wird die Messkapazität des Sensors. diff --git a/docs/hardware/sensors/umweltsensor.mdx b/docs/hardware/sensors/umweltsensor.mdx index dc165ee..a0c75d7 100644 --- a/docs/hardware/sensors/umweltsensor.mdx +++ b/docs/hardware/sensors/umweltsensor.mdx @@ -21,8 +21,6 @@ Mit dem Sensor BME680 kannst du eine verschiedene Auswahl an Phänomenen messen. - "Plug-in-and-Go" senseBox kompatibel - Abweichung bei Gasmessungen von +-15% -## Anschluss und Programmierung - ## Anschluss diff --git a/docs/hardware/wifi.mdx b/docs/hardware/wifi.mdx index 1b53441..9cef989 100644 --- a/docs/hardware/wifi.mdx +++ b/docs/hardware/wifi.mdx @@ -1,6 +1,8 @@ --- sidebar_position: 1 title: WiFi +description: Verbinde deine senseBox mit dem Internet über das integrierte WiFi-Modul. +categories: hardware hide_title: false --- diff --git a/docs/misc/FAQ.mdx b/docs/misc/FAQ.mdx index 4b20a79..ca4c99e 100644 --- a/docs/misc/FAQ.mdx +++ b/docs/misc/FAQ.mdx @@ -7,7 +7,9 @@ hide_title: false
Wo finde ich Informationen zur senseBox zusammengefasst? - Alle wichtigen Informationen zu den verschiedenen senseBoxen findest du [hier](https://sensebox.de/de/products) + +Alle wichtigen Informationen zu den verschiedenen senseBoxen findest du [hier](https://sensebox.de/de/products) +
diff --git a/docs/misc/openRoberta.md b/docs/misc/openRoberta.md index e67fcca..07a7d69 100644 --- a/docs/misc/openRoberta.md +++ b/docs/misc/openRoberta.md @@ -21,7 +21,7 @@ image3: /images/2020-03-11-allgemein-einfuehrung-openroberta/openroberta-buttons openRoberta ist eine vom Fraunhofer-Institut entwickelte graphische Programmieroberfläche. Neben der senseBox kannst du viele weitere Systeme über openRoberta programmieren. ## Erste Schritte -Öffne das openroberta lab unter [lab.open-roberta.org](https://lab.open-roberta.org/). Dort musst du zuerst dein System, also die senseBox, auswählen. +Öffne das Open Roberta Lab unter [lab.open-roberta.org](https://lab.open-roberta.org/). Dort musst du zuerst dein System, also die senseBox, auswählen. ![](/img/open-roberta-bilder/openroberta-carousel.png) @@ -52,7 +52,7 @@ Um dein Programm auf die senseBox übertragen zu können, musst du die senseBox ## openroberta Wiki -Diese und alle weiteren Informationen zum openroberta-lab findest du online in der [Dokumentation zum openroberta-lab vom Fraunhofer Institut](https://jira.iais.fraunhofer.de/wiki/display/ORInfo ). +Diese und alle weiteren Informationen zum openroberta-lab findest du online in der [Dokumentation zum Open Roberta Lab vom Fraunhofer Institut](https://jira.iais.fraunhofer.de/wiki/display/ORInfo ). > - [openroberta lab](https://lab.openroberta.org/) > - [openroberta Wiki](https://jira.iais.fraunhofer.de/wiki/display/ORInfo) \ No newline at end of file diff --git a/docs/products/bike/misc/care.mdx b/docs/products/bike/misc/care.mdx index a2be643..46b93b2 100644 --- a/docs/products/bike/misc/care.mdx +++ b/docs/products/bike/misc/care.mdx @@ -1,5 +1,5 @@ --- -title: egehinweise für die senseBox:bike +title: Pflegehinweise für die senseBox:bike --- # Pflegehinweise für die senseBox:bike diff --git a/docs/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-1.mdx b/docs/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-1.mdx index 9e1ddb2..dd8c994 100644 --- a/docs/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-1.mdx +++ b/docs/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-1.mdx @@ -18,7 +18,9 @@ folgt auf der gleichen Seite der PCB-Halterung: ![](/img/co2ampel/image4.jpg) Nun 5 kurze Abstandshalter auf der Unterseite anbringen: + ![](/img/co2ampel/image5.jpg) + Auf die Unterseite werden jetzt der CO2 Sensor und die RGB-LED eingehängt: ![](/img/co2ampel/image6.jpg) @@ -29,5 +31,6 @@ Auf die Oberseite als Letztes das Milchplexiglas über der RGB-LED anbringen und ![](/img/co2ampel/image8.jpg) Euer Ergebnis sollte so aussehen: + ![](/img/co2ampel/image9.jpg) ![](/img/co2ampel/image10.jpg) diff --git a/docs/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-4.mdx b/docs/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-4.mdx index 37132e0..c7db756 100644 --- a/docs/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-4.mdx +++ b/docs/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-4.mdx @@ -9,6 +9,7 @@ Als Nächstes werden die Seitenwände eingesetzt. Entfernt hierbei **_NICHT_** d ![](/img/co2ampel/image25.jpg) Als Letztes vom Gehäusedeckel auf beiden Seiten die Schutzfolie entfernen und ihn so anbringen, dass die Abstandshalter und die Seitenteile einrasten: + ![](/img/co2ampel/image26.jpg) Nun ist die CO2-Ampel einsatzbereit! Ihr könnt sie jetzt aufhängen und über das USB-Kabel und das Netzteil an eine Steckdose anschließen. diff --git a/docs/products/home/erweiterungen/circuitpython.md b/docs/products/home/erweiterungen/circuitpython.md index bf4fdb5..f28033c 100644 --- a/docs/products/home/erweiterungen/circuitpython.md +++ b/docs/products/home/erweiterungen/circuitpython.md @@ -14,6 +14,7 @@ resources: image1: /images/2021-01-28-rtc-modul/rtc.png --- +# Programmieren mit Circuit Python CircuitPython ist eine Programmiersprache, die das Experimentieren und Programmieren auf einfachen Mikrocontroller-Boards vereinfacht. Sobald das Board eingerichtet ist, kann mit einem beliebigen Texteditor programmiert werden. Die senseBox MCU ist CircuitPython kompatibel. ## Installation von Circuit Python diff --git a/docusaurus.config.js b/docusaurus.config.js index 8f2f95f..fe3fad9 100755 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -30,6 +30,14 @@ const config = { i18n: { defaultLocale: 'de', locales: ['de', 'en'], + localeConfigs: { + en: { + label: 'English', + }, + de: { + label: 'Deutsch', + }, + }, }, plugins: [ async function myPlugin(context, options) { @@ -67,77 +75,81 @@ const config = { ], themeConfig: - /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ - ({ - colorMode: { - defaultMode: 'light', - disableSwitch: true, + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + ({ + colorMode: { + defaultMode: 'light', + disableSwitch: true, + }, + navbar: { + title: 'senseBox Docs', + logo: { + alt: 'senseBox Logo', + src: 'img/logo.svg', }, - navbar: { - title: 'senseBox Docs', - logo: { - alt: 'senseBox Logo', - src: 'img/logo.svg', + hideOnScroll: true, + items: [ + { + href: 'https://www.sensebox.de', + position: 'left', + label: 'senseBox.de', }, - hideOnScroll: true, - items: [ - { - href: 'https://www.sensebox.de', - position: 'left', - label: 'senseBox.de', - }, - { - href: 'https://github.com/sensebox/knowledge-base', - label: 'GitHub', - position: 'right', - }, - ], - }, - footer: { - copyright: `© senseBox 2024. All rights reserved.`, - links: [ - { - title: 'Materials', - items: [ - { - label: 'Impressum', - to: 'https://sensebox.de/impressum', - }, - { - label: 'openSenseMap', - to: 'https://opensensemap.org/impressum', - }, - { - label: 'FAQ', - to: '/docs/misc/faq', - }, - ], - }, - { - title: 'Community', - items: [ - { - label: 'Forum', - to: 'https://forum.sensebox.de', - }, - { - label: 'GitHub', - to: 'https://github.com/sensebox', - }, - { - label: 'Support', - to: 'https://sensebox.de/de/contact', - }, - ], - }, - ], - }, - algolia: { - appId: process.env.ALGOLIA_APPID, - apiKey: process.env.ALGOLIA_APIKEY, - indexName: process.env.ALGOLIA_INDEXNAME, - }, - }), + { + type: 'localeDropdown', + position: 'right', + }, + { + href: 'https://github.com/sensebox/knowledge-base', + label: 'GitHub', + position: 'right', + }, + ], + }, + footer: { + copyright: `© senseBox 2024. All rights reserved.`, + links: [ + { + title: 'Materials', + items: [ + { + label: 'Impressum', + to: 'https://sensebox.de/de/imprint', + }, + { + label: 'openSenseMap', + to: 'https://opensensemap.org/impressum', + }, + { + label: 'FAQ', + to: '/docs/misc/faq', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'Forum', + to: 'https://forum.sensebox.de', + }, + { + label: 'GitHub', + to: 'https://github.com/sensebox', + }, + { + label: 'Support', + to: 'https://sensebox.de/de/contact', + }, + ], + }, + ], + }, + algolia: { + appId: process.env.ALGOLIA_APPID, + apiKey: process.env.ALGOLIA_APIKEY, + indexName: process.env.ALGOLIA_INDEXNAME, + }, + }), } module.exports = config diff --git a/i18n/en/code.json b/i18n/en/code.json new file mode 100644 index 0000000..dd52140 --- /dev/null +++ b/i18n/en/code.json @@ -0,0 +1,516 @@ +{ + "theme.docs.sidebar.navAriaLabel": { + "message": "Docs sidebar", + "description": "The ARIA label for the sidebar navigation" + }, + "theme.docs.sidebar.collapseButtonTitle": { + "message": "Collapse sidebar", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.docs.sidebar.collapseButtonAriaLabel": { + "message": "Collapse sidebar", + "description": "The title attribute for collapse button of doc sidebar" + }, + "theme.ErrorPageContent.title": { + "message": "This page crashed.", + "description": "The title of the fallback page when the page crashed" + }, + "theme.BackToTopButton.buttonAriaLabel": { + "message": "Scroll back to top", + "description": "The ARIA label for the back to top button" + }, + "theme.blog.archive.title": { + "message": "Archive", + "description": "The page & hero title of the blog archive page" + }, + "theme.blog.archive.description": { + "message": "Archive", + "description": "The page & hero description of the blog archive page" + }, + "theme.blog.paginator.navAriaLabel": { + "message": "Blog list page navigation", + "description": "The ARIA label for the blog pagination" + }, + "theme.blog.paginator.newerEntries": { + "message": "Newer Entries", + "description": "The label used to navigate to the newer blog posts page (previous page)" + }, + "theme.blog.paginator.olderEntries": { + "message": "Older Entries", + "description": "The label used to navigate to the older blog posts page (next page)" + }, + "theme.blog.post.paginator.navAriaLabel": { + "message": "Blog post page navigation", + "description": "The ARIA label for the blog posts pagination" + }, + "theme.blog.post.paginator.newerPost": { + "message": "Newer Post", + "description": "The blog post button label to navigate to the newer/previous post" + }, + "theme.blog.post.paginator.olderPost": { + "message": "Older Post", + "description": "The blog post button label to navigate to the older/next post" + }, + "theme.blog.post.plurals": { + "message": "One post|{count} posts", + "description": "Pluralized label for \"{count} posts\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.blog.tagTitle": { + "message": "{nPosts} tagged with \"{tagName}\"", + "description": "The title of the page for a blog tag" + }, + "theme.tags.tagsPageLink": { + "message": "View All Tags", + "description": "The label of the link targeting the tag list page" + }, + "theme.colorToggle.ariaLabel": { + "message": "Switch between dark and light mode (currently {mode})", + "description": "The ARIA label for the navbar color mode toggle" + }, + "theme.colorToggle.ariaLabel.mode.dark": { + "message": "dark mode", + "description": "The name for the dark color mode" + }, + "theme.colorToggle.ariaLabel.mode.light": { + "message": "light mode", + "description": "The name for the light color mode" + }, + "theme.docs.DocCard.categoryDescription": { + "message": "{count} items", + "description": "The default description for a category card in the generated index about how many items this category includes" + }, + "theme.docs.breadcrumbs.navAriaLabel": { + "message": "Breadcrumbs", + "description": "The ARIA label for the breadcrumbs" + }, + "theme.docs.paginator.navAriaLabel": { + "message": "Docs pages", + "description": "The ARIA label for the docs pagination" + }, + "theme.docs.paginator.previous": { + "message": "Previous", + "description": "The label used to navigate to the previous doc" + }, + "theme.docs.paginator.next": { + "message": "Next", + "description": "The label used to navigate to the next doc" + }, + "theme.docs.tagDocListPageTitle.nDocsTagged": { + "message": "One doc tagged|{count} docs tagged", + "description": "Pluralized label for \"{count} docs tagged\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.tagDocListPageTitle": { + "message": "{nDocsTagged} with \"{tagName}\"", + "description": "The title of the page for a docs tag" + }, + "theme.docs.versionBadge.label": { + "message": "Version: {versionLabel}" + }, + "theme.docs.versions.unreleasedVersionLabel": { + "message": "This is unreleased documentation for {siteTitle} {versionLabel} version.", + "description": "The label used to tell the user that he's browsing an unreleased doc version" + }, + "theme.docs.versions.unmaintainedVersionLabel": { + "message": "This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.", + "description": "The label used to tell the user that he's browsing an unmaintained doc version" + }, + "theme.docs.versions.latestVersionSuggestionLabel": { + "message": "For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).", + "description": "The label used to tell the user to check the latest version" + }, + "theme.docs.versions.latestVersionLinkLabel": { + "message": "latest version", + "description": "The label used for the latest version suggestion link label" + }, + "theme.common.headingLinkTitle": { + "message": "Direct link to {heading}", + "description": "Title for link to heading" + }, + "theme.common.editThisPage": { + "message": "Edit this page", + "description": "The link label to edit the current page" + }, + "theme.lastUpdated.atDate": { + "message": " on {date}", + "description": "The words used to describe on which date a page has been last updated" + }, + "theme.lastUpdated.byUser": { + "message": " by {user}", + "description": "The words used to describe by who the page has been last updated" + }, + "theme.lastUpdated.lastUpdatedAtBy": { + "message": "Last updated{atDate}{byUser}", + "description": "The sentence used to display when a page has been last updated, and by who" + }, + "theme.navbar.mobileVersionsDropdown.label": { + "message": "Versions", + "description": "The label for the navbar versions dropdown on mobile view" + }, + "theme.NotFound.title": { + "message": "Page Not Found", + "description": "The title of the 404 page" + }, + "theme.tags.tagsListLabel": { + "message": "Tags:", + "description": "The label alongside a tag list" + }, + "theme.admonition.caution": { + "message": "caution", + "description": "The default label used for the Caution admonition (:::caution)" + }, + "theme.admonition.danger": { + "message": "danger", + "description": "The default label used for the Danger admonition (:::danger)" + }, + "theme.admonition.info": { + "message": "info", + "description": "The default label used for the Info admonition (:::info)" + }, + "theme.admonition.note": { + "message": "note", + "description": "The default label used for the Note admonition (:::note)" + }, + "theme.admonition.tip": { + "message": "tip", + "description": "The default label used for the Tip admonition (:::tip)" + }, + "theme.admonition.warning": { + "message": "warning", + "description": "The default label used for the Warning admonition (:::warning)" + }, + "theme.AnnouncementBar.closeButtonAriaLabel": { + "message": "Close", + "description": "The ARIA label for close button of announcement bar" + }, + "theme.blog.sidebar.navAriaLabel": { + "message": "Blog recent posts navigation", + "description": "The ARIA label for recent posts in the blog sidebar" + }, + "theme.CodeBlock.copied": { + "message": "Copied", + "description": "The copied button label on code blocks" + }, + "theme.CodeBlock.copyButtonAriaLabel": { + "message": "Copy code to clipboard", + "description": "The ARIA label for copy code blocks button" + }, + "theme.CodeBlock.copy": { + "message": "Copy", + "description": "The copy button label on code blocks" + }, + "theme.CodeBlock.wordWrapToggle": { + "message": "Toggle word wrap", + "description": "The title attribute for toggle word wrapping button of code block lines" + }, + "theme.DocSidebarItem.expandCategoryAriaLabel": { + "message": "Expand sidebar category '{label}'", + "description": "The ARIA label to expand the sidebar category" + }, + "theme.DocSidebarItem.collapseCategoryAriaLabel": { + "message": "Collapse sidebar category '{label}'", + "description": "The ARIA label to collapse the sidebar category" + }, + "theme.NavBar.navAriaLabel": { + "message": "Main", + "description": "The ARIA label for the main navigation" + }, + "theme.navbar.mobileLanguageDropdown.label": { + "message": "Languages", + "description": "The label for the mobile language switcher dropdown" + }, + "theme.NotFound.p1": { + "message": "We could not find what you were looking for.", + "description": "The first paragraph of the 404 page" + }, + "theme.NotFound.p2": { + "message": "Please contact the owner of the site that linked you to the original URL and let them know their link is broken.", + "description": "The 2nd paragraph of the 404 page" + }, + "theme.TOCCollapsible.toggleButtonLabel": { + "message": "On this page", + "description": "The label used by the button on the collapsible TOC component" + }, + "theme.blog.post.readMore": { + "message": "Read More", + "description": "The label used in blog post item excerpts to link to full blog posts" + }, + "theme.blog.post.readMoreLabel": { + "message": "Read more about {title}", + "description": "The ARIA label for the link to full blog posts from excerpts" + }, + "theme.blog.post.readingTime.plurals": { + "message": "One min read|{readingTime} min read", + "description": "Pluralized label for \"{readingTime} min read\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.docs.breadcrumbs.home": { + "message": "Home page", + "description": "The ARIA label for the home page in the breadcrumbs" + }, + "theme.docs.sidebar.closeSidebarButtonAriaLabel": { + "message": "Close navigation bar", + "description": "The ARIA label for close button of mobile sidebar" + }, + "theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel": { + "message": "← Back to main menu", + "description": "The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)" + }, + "theme.docs.sidebar.toggleSidebarButtonAriaLabel": { + "message": "Toggle navigation bar", + "description": "The ARIA label for hamburger menu button of mobile navigation" + }, + "theme.docs.sidebar.expandButtonTitle": { + "message": "Expand sidebar", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.docs.sidebar.expandButtonAriaLabel": { + "message": "Expand sidebar", + "description": "The ARIA label and title attribute for expand button of doc sidebar" + }, + "theme.SearchBar.seeAll": { + "message": "See all {count} results" + }, + "theme.SearchPage.documentsFound.plurals": { + "message": "One document found|{count} documents found", + "description": "Pluralized label for \"{count} documents found\". Use as much plural forms (separated by \"|\") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)" + }, + "theme.SearchPage.existingResultsTitle": { + "message": "Search results for \"{query}\"", + "description": "The search page title for non-empty query" + }, + "theme.SearchPage.emptyResultsTitle": { + "message": "Search the documentation", + "description": "The search page title for empty query" + }, + "theme.SearchPage.inputPlaceholder": { + "message": "Type your search here", + "description": "The placeholder for search page input" + }, + "theme.SearchPage.inputLabel": { + "message": "Search", + "description": "The ARIA label for search page input" + }, + "theme.SearchPage.algoliaLabel": { + "message": "Search by Algolia", + "description": "The ARIA label for Algolia mention" + }, + "theme.SearchPage.noResultsText": { + "message": "No results were found", + "description": "The paragraph for empty search result" + }, + "theme.SearchPage.fetchingNewResults": { + "message": "Fetching new results...", + "description": "The paragraph for fetching new search results" + }, + "theme.SearchBar.label": { + "message": "Search", + "description": "The ARIA label and placeholder for search button" + }, + "theme.SearchModal.searchBox.resetButtonTitle": { + "message": "Clear the query", + "description": "The label and ARIA label for search box reset button" + }, + "theme.SearchModal.searchBox.cancelButtonText": { + "message": "Cancel", + "description": "The label and ARIA label for search box cancel button" + }, + "theme.SearchModal.startScreen.recentSearchesTitle": { + "message": "Recent", + "description": "The title for recent searches" + }, + "theme.SearchModal.startScreen.noRecentSearchesText": { + "message": "No recent searches", + "description": "The text when no recent searches" + }, + "theme.SearchModal.startScreen.saveRecentSearchButtonTitle": { + "message": "Save this search", + "description": "The label for save recent search button" + }, + "theme.SearchModal.startScreen.removeRecentSearchButtonTitle": { + "message": "Remove this search from history", + "description": "The label for remove recent search button" + }, + "theme.SearchModal.startScreen.favoriteSearchesTitle": { + "message": "Favorite", + "description": "The title for favorite searches" + }, + "theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle": { + "message": "Remove this search from favorites", + "description": "The label for remove favorite search button" + }, + "theme.SearchModal.errorScreen.titleText": { + "message": "Unable to fetch results", + "description": "The title for error screen of search modal" + }, + "theme.SearchModal.errorScreen.helpText": { + "message": "You might want to check your network connection.", + "description": "The help text for error screen of search modal" + }, + "theme.SearchModal.footer.selectText": { + "message": "to select", + "description": "The explanatory text of the action for the enter key" + }, + "theme.SearchModal.footer.selectKeyAriaLabel": { + "message": "Enter key", + "description": "The ARIA label for the Enter key button that makes the selection" + }, + "theme.SearchModal.footer.navigateText": { + "message": "to navigate", + "description": "The explanatory text of the action for the Arrow up and Arrow down key" + }, + "theme.SearchModal.footer.navigateUpKeyAriaLabel": { + "message": "Arrow up", + "description": "The ARIA label for the Arrow up key button that makes the navigation" + }, + "theme.SearchModal.footer.navigateDownKeyAriaLabel": { + "message": "Arrow down", + "description": "The ARIA label for the Arrow down key button that makes the navigation" + }, + "theme.SearchModal.footer.closeText": { + "message": "to close", + "description": "The explanatory text of the action for Escape key" + }, + "theme.SearchModal.footer.closeKeyAriaLabel": { + "message": "Escape key", + "description": "The ARIA label for the Escape key button that close the modal" + }, + "theme.SearchModal.footer.searchByText": { + "message": "Search by", + "description": "The text explain that the search is making by Algolia" + }, + "theme.SearchModal.noResultsScreen.noResultsText": { + "message": "No results for", + "description": "The text explains that there are no results for the following search" + }, + "theme.SearchModal.noResultsScreen.suggestedQueryText": { + "message": "Try searching for", + "description": "The text for the suggested query when no results are found for the following search" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsText": { + "message": "Believe this query should return results?", + "description": "The text for the question where the user thinks there are missing results" + }, + "theme.SearchModal.noResultsScreen.reportMissingResultsLinkText": { + "message": "Let us know.", + "description": "The text for the link to report missing results" + }, + "theme.SearchModal.placeholder": { + "message": "Search docs", + "description": "The placeholder of the input of the DocSearch pop-up modal" + }, + "theme.ErrorPageContent.tryAgain": { + "message": "Try again", + "description": "The label of the button to try again rendering when the React error boundary captures an error" + }, + "theme.common.skipToMainContent": { + "message": "Skip to main content", + "description": "The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation" + }, + "theme.tags.tagsPageTitle": { + "message": "Tags", + "description": "The title of the tag list page" + }, + "theme.unlistedContent.title": { + "message": "Unlisted page", + "description": "The unlisted content banner title" + }, + "theme.unlistedContent.message": { + "message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.", + "description": "The unlisted content banner message" + }, + "Die zweite Generation der senseBox:edu für den Einsatz im Bildungsbereich. Klicke hier für alle nötigen Informationen!": { + "message": "The second generation of the senseBox:edu for educational usage. Click here for all necessary information!" + }, + "Informationen zum Anschluss und zur Programmierung der senseBox:edu für den Einsatz im Bildungsbereich": { + "message": "Information on connecting and programming the senseBox:edu to use for educational use" + }, + "Anleitung und Informationen zur senseBox:bike, der dazugehörigen App und der Installation der Fahrradhalterung": { + "message": "Instructions and information about the senseBox:bike, the associated app, and the installation of the bike mount" + }, + "Informationen zum Anschluss und Programmierung der Sensoren, Bees und weiteren Bauteilen für Bildungszwecke": { + "message": "Information on connecting and programming the sensors, Bees, and other components for educational purposes" + }, + "Aufstellungsort, Installation und alle weiteren Informationen zu Sensoren der senseBox:home findest du hier!": { + "message": "Installation site, set-up and all other information about the sensors of the senseBox:home can be found here!" + }, + "Alle relevanten Informationen zur Miniaturversion der senseBox findest du hier!": { + "message": "All important information about the miniature version of the senseBox can be found here!" + }, + "Die openSenseMap als Internetplattform für offene Umweltdaten": { + "message": "The openSenseMap as an internet platform for open environmental data" + }, + "Die frei verfügbare grafische Oberfläche zum Programmieren der senseBox": { + "message": "The graphical interface for programming the senseBox, available for free" + }, + "Informationen zum Anschluss und zur Programmierung der Sensoren, Bees und weiteren Bauteilen": { + "message": "Information on connecting and programming the sensors, Bees, and other components" + }, + "Der Platz für die senseBox-Dokumentation.": { + "message": "The place for the senseBox documentation." + }, + "theme.docs.DocCard.categoryDescription.plurals": { + "message": "1 item|{count} items", + "description": "The default description for a category card in the generated index about how many items this category includes" + }, + "theme.blog.author.pageTitle": { + "message": "{authorName} - {nPosts}", + "description": "The title of the page for a blog author" + }, + "theme.blog.authorsList.pageTitle": { + "message": "Authors", + "description": "The title of the authors page" + }, + "theme.blog.authorsList.viewAll": { + "message": "View all authors", + "description": "The label of the link targeting the blog authors page" + }, + "theme.blog.author.noPosts": { + "message": "This author has not written any posts yet.", + "description": "The text for authors with 0 blog post" + }, + "theme.contentVisibility.unlistedBanner.title": { + "message": "Unlisted page", + "description": "The unlisted content banner title" + }, + "theme.contentVisibility.unlistedBanner.message": { + "message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.", + "description": "The unlisted content banner message" + }, + "theme.contentVisibility.draftBanner.title": { + "message": "Draft page", + "description": "The draft content banner title" + }, + "theme.contentVisibility.draftBanner.message": { + "message": "This page is a draft. It will only be visible in dev and be excluded from the production build.", + "description": "The draft content banner message" + }, + ":edu S2": { + "message": ":edu S2" + }, + ":edu": { + "message": ":edu" + }, + ":bike": { + "message": ":bike" + }, + ":CO2 Ampel": { + "message": ":CO2 Traffic Light" + }, + ":home": { + "message": ":home" + }, + ":mini": { + "message": ":mini" + }, + "openSenseMap": { + "message": "openSenseMap" + }, + "Blockly": { + "message": "Blockly" + }, + "Hardware Glossar": { + "message": "Hardware Glossary" + }, + "senseBox Dokumentation": { + "message": "senseBox Documentation" + } +} diff --git a/i18n/en/docusaurus-plugin-content-blog/options.json b/i18n/en/docusaurus-plugin-content-blog/options.json new file mode 100644 index 0000000..9239ff7 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-blog/options.json @@ -0,0 +1,14 @@ +{ + "title": { + "message": "Blog", + "description": "The title for the blog used in SEO" + }, + "description": { + "message": "Blog", + "description": "The description for the blog used in SEO" + }, + "sidebar.title": { + "message": "Recent posts", + "description": "The label for the left sidebar" + } +} diff --git a/i18n/en/docusaurus-plugin-content-docs/current.json b/i18n/en/docusaurus-plugin-content-docs/current.json new file mode 100644 index 0000000..a5354ca --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current.json @@ -0,0 +1,134 @@ +{ + "version.label": { + "message": "Next", + "description": "The label for version current" + }, + "sidebar.senseBoxSidebar.category.:edu S2": { + "message": ":edu S2", + "description": "The label for category :edu S2 in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Erste Schritte": { + "message": "Getting Started", + "description": "The label for category Erste Schritte in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Hardware": { + "message": "Hardware", + "description": "The label for category Hardware in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Hardware.link.generated-index.title": { + "message": "Hardware", + "description": "The generated-index page title for category Hardware in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.in der :edu enthaltene Hardware": { + "message": "Hardware included in :edu", + "description": "The label for category in der :edu enthaltene Hardware in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.in der :edu enthaltene Hardware.link.generated-index.title": { + "message": "Hardware included in :edu", + "description": "The generated-index page title for category in der :edu enthaltene Hardware in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Blockly": { + "message": "Blockly", + "description": "The label for category Blockly in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Blockly.link.generated-index.title": { + "message": "Blockly", + "description": "The generated-index page title for category Blockly in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Arduino": { + "message": "Arduino", + "description": "The label for category Arduino in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Arduino.link.generated-index.title": { + "message": "Arduino", + "description": "The generated-index page title for category Arduino in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Besonderheiten": { + "message": "Special Features", + "description": "The label for category Besonderheiten in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Besonderheiten.link.generated-index.title": { + "message": "Special Features", + "description": "The generated-index page title for category Besonderheiten in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.:edu": { + "message": ":edu", + "description": "The label for category :edu in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.zusätzlich erwerbare Hardware": { + "message": "Additional Hardware", + "description": "The label for category zusätzlich erwerbare Hardware in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.zusätzlich erwerbare Hardware.link.generated-index.title": { + "message": "Additional Hardware", + "description": "The generated-index page title for category zusätzlich erwerbare Hardware in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.:bike": { + "message": ":bike", + "description": "The label for category :bike in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.App": { + "message": "App", + "description": "The label for category App in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Sensoren": { + "message": "Sensors", + "description": "The label for category Sensoren in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.:CO2 Ampel": { + "message": ":CO2 Traffic Light", + "description": "The label for category :CO2 Ampel in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Aufbau und Installation": { + "message": "Setup and Installation", + "description": "The label for category Aufbau und Installation in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Aufbau und Installation.link.generated-index.title": { + "message": "Setup and Installation", + "description": "The generated-index page title for category Aufbau und Installation in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.:home": { + "message": ":home", + "description": "The label for category :home in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Erweiterungen": { + "message": "Extensions", + "description": "The label for category Erweiterungen in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Erweiterungen.link.generated-index.title": { + "message": "Extensions", + "description": "The generated-index page title for category Erweiterungen in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.:mini": { + "message": ":mini", + "description": "The label for category :mini in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.in der :mini enthaltene Hardware": { + "message": "Hardware included in :mini", + "description": "The label for category in der :mini enthaltene Hardware in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.in der :mini enthaltene Hardware.link.generated-index.title": { + "message": "Hardware included in :mini", + "description": "The generated-index page title for category in der :mini enthaltene Hardware in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Glossar": { + "message": "Glossary", + "description": "The label for category Glossar in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.category.Glossar.link.generated-index.title": { + "message": "Glossary", + "description": "The generated-index page title for category Glossar in sidebar senseBoxSidebar" + }, + "sidebar.senseBoxSidebar.doc.Halterung": { + "message": "Mount", + "description": "The label for the doc item Halterung in sidebar senseBoxSidebar, linking to the doc products/bike/halterung/installation" + }, + "sidebar.senseBoxSidebar.doc.Pflegehinweise für die senseBox:bike": { + "message": "Care Instructions for the senseBox:bike", + "description": "The label for the doc item Pflegehinweise für die senseBox:bike in sidebar senseBoxSidebar, linking to the doc products/bike/misc/care" + }, + "sidebar.senseBoxSidebar.doc.Fehlerbehebung": { + "message": "Troubleshooting", + "description": "The label for the doc item Fehlerbehebung in sidebar senseBoxSidebar, linking to the doc products/bike/misc/errors" + } +} diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-erster-sketch.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-erster-sketch.mdx new file mode 100644 index 0000000..9be65f8 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-erster-sketch.mdx @@ -0,0 +1,72 @@ +--- +sidebar_position: 1 +title: Your first sketch +hide_title: false + +--- +## First steps +Blockly is the graphical programming interface for the senseBox developed by the senseBox team. It's based on the [Blockly Framework](https://developers.google.com/blockly) from Google +and it's available online for free and without any software installation. + +Open Blockly for senseBox in your browser by visiting [https://blockly.sensebox.de](https://blockly.sensebox.de/). +The first thing you will see is a selection of senseBox versions. Choose the version you are using. + +![](/img/blockly-bilder/erster-sketch/Auswahl.png) + +## Interface + +Once you have selected your senseBox version, you will see the Blockly interface, which can be divided into six sections. + +![](/img/blockly-bilder/erster-sketch/Oberflaeche.png) + +1. **Menu bar:** From the menu bar, you can change the board you are using or the language. On the left side, you can also navigate to the tutorials and the + gallery. The tutorials offer a guide for your first Blockly sketches and introduce you to the various sensors and functions of the senseBox. + In the gallery you will find selected sketches from the senseBox team. +2. **The toolbar:** + Here you will find all the blocks for programming the senseBox. The color of the blocks indicates the category to which the block belongs. +3. **The workspace:** + This is where you put your programs together. At the bottom right are buttons to center, zoom in, zoom out, and delete blocks. +4. **Copy, compile, and other Blockly functions:** + Here you will find the most important button for Blockly. With the orange 'Compile' button, you can compile and download your created sketch. + Additionally, you can rename, download, share, create screenshots of your sketch, or copy the Arduino source code of your sketch to the clipboard. +5. **Arduino source code and XML blocks:** + Here you can see the Arduino source code parallel to the graphical programming. + By clicking on the XML blocks button, you can switch the view to the XML code. +6. **Help box:** + Here you will find a brief guide on how to use the selected block and where you can find more information. + +## Programming + +To write your program, the blocks from the toolbar must be placed in the workspace using drag & drop. + +### Step 1: Setup and Endlosschleife + +This block is loaded directly when the interface starts and should always be used. +The two basic functions `Setup()` and `Endlosschleife()` are always needed to write a functional program. +Blocks that are inside the `Setup()` function are executed only once at the beginning of the program. +Here, for example, the display is initialized or the WLAN connection is established. +Blocks that are inside the `Endlosschleife()` function are executed continuously. +The microcontroller always executes all blocks from top to bottom. +In the `Endlosschleife()` function, for example, the sensors are read or the measured values are saved on an SD card or transmitted to the Internet. + +![](/img/en/blockly-bilder/erster-sketch/blockly-es-1.svg) + + +### Step 2: Turn on the built-in LED + +To turn on the built-in LED you first have to drag the `LED on digital` block into the `Endlosschleife()` function. +Then select `BUILTIN_1` under PIN and `On` under Status. + +![](/img/en/mcu/led-block-2.svg) + +### Step 3: Let the built-in LED blink +To make the built-in LED blink it is necessary to turn it off with another LED on digital block at digital Block. +Additionally, after turning it on and off a pause has to be inserted to make the blinking visible. +You can find the `Wait` block in the `Time` category. + + +![](/img/en/mcu/led-block-3.svg) + +## Compile and download +After your program is finished, click the orange "Compile" button and a .BIN file will be offered for download. +Save this file at any location on your computer. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-in-betrieb-nehmen.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-in-betrieb-nehmen.mdx new file mode 100644 index 0000000..42ef65e --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-in-betrieb-nehmen.mdx @@ -0,0 +1,19 @@ +--- +title: Starting up the MCU +--- + +## Supplying the senseBox with power +To use the senseBox, it must be supplied with power. There are two ways to supply the senseBox with power: + +### 1. USB cable +You can supply the senseBox with power using a USB-C cable. This is the easiest option if you are programming on a computer. +Plug the smaller end of the USB cable into the USB port of the senseBox MCU. The USB port is located at the top next to the red reset button. +The other end of the cable is plugged into the USB port of your computer or a power bank. + +USB port + +### 2. Battery +If you want to supply your senseBox with power via a battery, you can do this via the two-pin JST connector on the senseBox MCU. +Simply plug the JST connector of the battery into the JST connector on the senseBox MCU. This is located at the top, next to the USB connection. + +Battery port diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-kompilieren.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-kompilieren.mdx new file mode 100644 index 0000000..2b00539 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-kompilieren.mdx @@ -0,0 +1,73 @@ +--- +sidebar_position: 4 +title: Compile and transfer +hide_title: false +--- + +import Layout from "@site/src/Layout"; +import { useBoardStore } from "@site/src/lib/stores/store"; +import BoardDropdown from "@site/src/components/BoardDropdown/BoardDropdown"; +import Tabs from '@theme/Tabs'; + +import TabItem from '@theme/TabItem'; +import AlertBox from "@site/src/components/AlertBox/AlertBox"; +import copyToMCUGif from "@site/static/img/mcu/copy-to-mcu.gif" +import copyToMCUGifMac from "@site/static/img/mcu/copy-to-mcu-mac.gif" + +## Compile +In order for your program to be executed by the senseBox, it must first be translated into machine language. +This process is called _compiling_. In the case of the senseBox, our server takes care of compiling. + +To have your sketch compiled, click on the orange button with the notepad symbol in Blockly. + +![](/img/blockly-bilder/kompilieren/kompilieren.png) + +Once your sketch has been successfully compiled, you will be prompted to download a .BIN file. +Save it in a location where you can easily find it later. + +## Transfer + + +### Changing the mode of the senseBox MCU +The senseBox MCU has two modes. The programming and the learning mode. + +In the **programming mode** a transmitted program is executed. You can recognize it by the green status LEDs of the senseBox MCU. + +In the **learning mode** the senseBox is recognized as a removable storage and new programs can be transferred. +You can recognize it by the red LED next to the reset button lighting up permanently/pulsating. + +![](/img/en/mcu/mcu-modus.png) + +Um dein Programm übertragen zu können, musst du deine MCU nun in den Lern-Modus versetzen. +
+ +
+ +### Transfer +If you connect your senseBox MCU to your computer and double-click on the red button, it will be recognized as a removable storage. +By clicking on "Compile Code" in the web interface, your program code is compiled on the server and a .BIN file is offered for download. +Depending on which operating system you are using, the copying process differs. + + + + In Windows, you can simply copy the created .BIN file to the removable storage SENSEBOX by drag & drop. + The red LED on the button will flash briefly and then the board will restart automatically and execute your program code. +
+ +
+
+ + In MacOS you can't copy the .BIN file via drag & drop at the moment. + One possibility is to copy the file in the terminal using the dd command (only recommended for experienced users!) or to use an alternative file manager like [muCommander](https://www.mucommander.com/). +
+ +
+
+ + In Linux, you can simply copy the created .BIN file to the removable storage SENSEBOX by drag & drop. + The red LED on the button will flash briefly and then the board will restart automatically and execute your program code. +
+ +
+
+
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-overview.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-overview.mdx new file mode 100644 index 0000000..cc77243 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-overview.mdx @@ -0,0 +1,227 @@ +--- +title: senseBox:MCU +hide_title: true +--- + +import mcus2top from "@site/static/img/mcus2/mcus2top.png"; +import AlertBox from "@site/src/components/AlertBox/AlertBox"; +import mcuPorts from "@site/static/img/en/mcu/sensebox-mcu-ports.jpg"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@site/src/components/ui/popover"; +import lightSensor from "@site/static/img/hardware-bilder/helligkeit-uv/sensor_helligkeit_uv.png"; +import display from "@site/static/img/hardware-bilder/oled/display.png"; +import tempSensor from "@site/static/img/hardware-bilder/temperatur-luftfeuchte/sensor_temperatur_luftfeuchte.png"; +import pressureSensor from "@site/static/img/hardware-bilder/luftdruck/bmp_top.png"; +import tofSensor from "@site/static/img/hardware-bilder/tof/tofsensor.png"; +import umweltsensor from "@site/static/img/hardware-bilder/umweltsensor/bme.png"; +import CO2Sensor from "@site/static/img/hardware-bilder/co2/scd30.png"; +import feinstaubSps from "@site/static/img/hardware-bilder/sps30/sps30.png"; +import feinstaubSds from "@site/static/img/hardware-bilder/feinstaub/sensoren_feinstaub.png"; +import mikro from "@site/static/img/hardware-bilder/mikro/mic.png"; +import ultrasonic from "@site/static/img/hardware-bilder/distanz/US-Sensor.png"; +import truebner from "/img/hardware-bilder/bodenfeuchte-temperatursensor/sensoren_bodenfeuchte_temperatur.png"; +import wifiBee from "@site/static/img/hardware-bilder/bees/wifi-bee/wifi.png"; +import sdBee from "@site/static/img/hardware-bilder/bees/sd-bee/msd.png"; +import loraBee from "@site/static/img/hardware-bilder/bees/lora-bee/LoraBee_Bottom.png"; + +
+

senseBoxMCU

+

+ The senseBox MCU is a microcontroller specially developed for the needs of the senseBox. + Therefore, the microcontroller has three main features: it is fast, energy-efficient and has a large program memory. +

+ +

+ The microcontroller can easily be "programmed" in 10 minutes, even without prior knowledge, by transferring a pre-made sketch to the microcontroller. + For advanced users, the Arduino IDE can be used as usual to create new and individual projects. +

+ +
+ senseBox MCU +
+
+## Ports +Click on the ports below to see which sensor is connected there. +
+ + + I2C/Wire ports + + +
+

Sensoren und Accessoire an den I2C/Wire Ports

+
+
+ Your Image +

Light sensor

+
+
+ Your Image +

Temperature and humidity

+
+
+ Your Image +

Air pressure

+
+
+ Your Image +

Time of Flight(Tof)

+
+
+ Your Image +

Environmental sensor

+
+
+ Your Image +

CO2 sensor

+
+
+ Your Image +

Display

+
+
+
+
+
+ + + UART/Serial port + + +
+
+ Your Image +

Fine dust (SDS011)

+
+
+ Your Image +

Fine dust (SPS30)

+
+
+
+
+ + + Digital/Analogue ports + + +
+
+ Your Image +

Condenser mic

+
+
+ Your Image +

Ultrasonic distance sensor

+
+
+ Your Image +

Soil moisture sensor

+
+
+
+
+ + + XBEE + + +
+
+ Your Image +

WiFi Bee

+
+
+ Your Image +

SD Bee

+
+
+ Your Image +

LoRa Bee

+
+
+
+
+ +
+ +## Technical specifications + +### Processor + +The processor is based on the ARM Cortex-M0+ processor from the SAM D21 family by Microchip. + +### Interfaces + +Sensors and actuators are addressed via the proven interfaces such as I2C, UART, and digital I/Os with a robust JST connector system (5V tolerant). + +### Data Transmission + +Through the two XBee compatible sockets, UART or SPI modules are offered. Optionally, data transmission can be carried out in real-time via WLAN, LAN, or LoRa. Alternatively, the data can also be stored on a micro-SD card. + +## Programming + +The senseBox MCU can be programmed using various programming environments. A detailed overview can be found [here](/arduino/allgemein-sensebox-editoren/). diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-revisions.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-revisions.mdx new file mode 100644 index 0000000..81880f6 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-revisions.mdx @@ -0,0 +1,34 @@ +--- +title: The different MCU revisions +--- +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText" +import mcuComparisons from "@site/static/img/mcu/revisions/mcu_comparison.jpeg" +import mcuV13 from "@site/static/img/mcu/revisions/mcu_v13.jpeg" +import mcuV15 from "@site/static/img/mcu/revisions/mcu_v15.jpeg" +import mcuV15bmx from "@site/static/img/mcu/revisions/mcu_v15_bmx.jpeg" + +## Revisions of the senseBox MCU +During the development of the senseBox MCU, several revisions were developed. The current version is the V1.5. +The following overview shows you the differences between the individual revisions. +Basically, all versions are compatible with each other and differ only slightly in hardware. + +
+ +

Differences between the senseBox MCU revisions

+
+### V1.3 + +Revision 1.3 is the first version to be delivered from 2018. It is equipped with an acceleration sensor (BMX055) and a micro USB port. + + + + +### V1.5 with USB-C port +Version 1.5 of the senseBox MCU is equipped with a USB-C port. This allows for easy and fast connection to the computer. Version 1.5 is compatible with all previous versions of the senseBox MCU. + + +Because of the scarcity of electronic components, a batch of revision 1.5 was delivered without an acceleration sensor (BMX055). +If you are unsure whether your senseBox MCU has an acceleration sensor, the graphic below will help you. +The upper version of the MCU V1.5 has an acceleration sensor, the lower version does not. + + \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-sensebox-io-library.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-sensebox-io-library.mdx new file mode 100644 index 0000000..0172411 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcu/mcu-sensebox-io-library.mdx @@ -0,0 +1,74 @@ +--- +date: 2020-03-11 +title: The senseBoxIO Library +categories: arduino +description: Using the senseBoxIO Library +type: Document +resources: + - name: "senseBoxIO Library" + link: https://github.com/sensebox/senseBoxMCU-core/tree/master/arduino/samd/libraries/senseBoxIO +--- + +# senseBoxIO Library + +The senseBoxIO library is part of the board support package and is installed automatically. + +The senseBoxIO library can be included individually with the following command: + +```cpp +include +``` + +:::info + +If you are already using the senseBoxMCU library, the senseBoxIO library is already integrated and does not need to be included separately. +::: +## Turning Ports On/Off + +With the senseBoxIO library, unused ports can be turned on/off: + +#### Deactivating all Ports + +```cpp + void powerNone(void) +``` + +#### Activating all Ports + +```cpp + void powerAll(void) +``` + +#### Selective Turning On/Off of Ports and Connections + +```cpp + + void powerI2C(bool on) //power the I2C Ports + + void powerUART(bool on) //power the UART Ports + + void powerXB1(bool on) //power XBEE Port 1 + + void powerXB2(bool on) //power XBEE Port 2 + + void SPIselectNone(void) // + + void SPIselectXB1(void) // + + void SPIselectXB2(void) // + +``` + +## Turning Status LEDs On/Off + +Allows turning the status LEDs on/off + +```cpp + void statusNone(void) // deactivate all status LEDs + + void statusRed(void) //activate the red status LED + + void statusGreen(void) //activate the green status LED +``` + +> - [senseBoxIO Library](https://github.com/sensebox/senseBoxMCU-core/tree/master/arduino/samd/libraries/senseBoxIO) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcu-s2-overview.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcu-s2-overview.mdx new file mode 100644 index 0000000..5b06383 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcu-s2-overview.mdx @@ -0,0 +1,132 @@ +--- +title: senseBox:mcu S2 +hide_title: true +--- + +import Admonition from "@theme/Admonition"; +import React, { useState } from "react"; +import { motion } from "framer-motion"; +import image from "@site/static/img/mcus2/mcus2top.png"; +import { + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, +} from "@site/src/components/ui/tooltip"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@site/src/components/ui/popover"; +import { Button } from "@site/src/components/ui/button"; +import mcus2ports from "@site/static/img/en/mcus2/mcus2-ports.png"; +import lightSensor from "@site/static/img/hardware-bilder/helligkeit-uv/sensor_helligkeit_uv.png"; +import display from "@site/static/img/hardware-bilder/oled/display.png"; +import tempSensor from "@site/static/img/hardware-bilder/temperatur-luftfeuchte/sensor_temperatur_luftfeuchte.png"; +import pressureSensor from "@site/static/img/hardware-bilder/luftdruck/bmp_top.png"; +import tofSensor from "@site/static/img/hardware-bilder/tof/tofsensor.png"; +import ledMatrix from "@site/static/img/hardware-bilder/led-matrix/led-matrix.png"; +import i2cdaiychain from "@site/static/img/hardware-bilder/i2c/i2c-daisy-chain.png"; +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText"; +import mcus2top from "@site/static/img/mcus2/mcus2top.png"; + +
+

MCU S2 (ESP32)

+

+ The microcontroller based on ESP-32 offers a multitude of new possibilities in terms of data transfer, data exchange and operation. +

+
+
+ Your Image{" "} +
+
+

Ports

+
+ + + I2C/Wire ports + + +
+

Sensors and accessories on the I2C/Wire ports

+
+
+ Your Image +

Light sensor

+
+
+ Your Image +

Temperature and humidity

+
+
+ Your Image +

Air pressure

+
+
+ Your Image +

Time of Flight(Tof)

+
+
+ Your Image +

Display

+
+
+
+
+
+ + + Digital/Analogue ports + + +
+

Sensors and accessories on the digital/analogue ports

+
+
+ Your Image +

LED-Matrix

+
+
+
+
+
+
+
+
+

I2C/Wire daisy chain

+

+ An I2C daisy chain enables the simple and efficient connection of several devices in a serial communication chain using the I2C protocol. + The daisy chain configuration allows each device in the chain to send and receive data. This method is particularly useful in applications + where space and resources are limited, as it minimises the number of physical connections required and at the same time enables robust + and reliable data communication. +

+
+ +
+
+
+
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcus2-erster-sketch.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcus2-erster-sketch.mdx new file mode 100644 index 0000000..6a4ce85 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcus2-erster-sketch.mdx @@ -0,0 +1,75 @@ +--- +sidebar_position: 1 +title: Your first sketch +hide_title: false +--- + +## First steps + +Blockly is the graphical programming interface for the senseBox developed by the senseBox team. It's based on the [Blockly Framework](https://developers.google.com/blockly) from Google +and it's available online for free and without any software installation. + +Open Blockly for senseBox in your browser by visiting [https://blockly.sensebox.de](https://blockly.sensebox.de/). +The first thing you will see is a selection of senseBox versions. Choose the version you are using. + +![](/img/blockly-bilder/erster-sketch/Auswahl.png) + +## Interface + +Once you have selected your senseBox version, you will see the Blockly interface, which can be divided into six sections. + +![](/img/blockly-bilder/erster-sketch/Oberflaeche.png) + +1. **Menu bar:** From the menu bar, you can change the board you are using or the language. On the left side, you can also navigate to the tutorials and the + gallery. The tutorials offer a guide for your first Blockly sketches and introduce you to the various sensors and functions of the senseBox. + In the gallery you will find selected sketches from the senseBox team. +2. **The toolbar:** + Here you will find all the blocks for programming the senseBox. The color of the blocks indicates the category to which the block belongs. +3. **The workspace:** + This is where you put your programs together. At the bottom right are buttons to center, zoom in, zoom out, and delete blocks. +4. **Copy, compile, and other Blockly functions:** + Here you will find the most important button for Blockly. With the orange 'Compile' button, you can compile and download your created sketch. + Additionally, you can rename, download, share, create screenshots of your sketch, or copy the Arduino source code of your sketch to the clipboard. +5. **Arduino source code and XML blocks:** + Here you can see the Arduino source code parallel to the graphical programming. + By clicking on the XML blocks button, you can switch the view to the XML code. +6. **Help box:** + Here you will find a brief guide on how to use the selected block and where you can find more information. + +## Programming +To write your program, the blocks from the toolbar must be placed in the workspace using drag & drop. + +### Step 1: Run First and Loop Forever + +This block is loaded directly when the interface starts and should always be used. +The two basic functions `Arduino run first` and `Arduino loop forever` are always needed to write a functional program. +Blocks that are inside the `Arduino run first` function are executed only once at the beginning of the program. +Here, for example, the display is initialized or the WLAN connection is established. +Blocks that are inside the `Arduino loop forever` function are executed continuously. +The microcontroller always executes all blocks from top to bottom. +In the `Arduino loop forever` function, for example, the sensors are read or the measured values are saved on an SD card or transmitted to the Internet. + +![](/img/en/blockly-bilder/erster-sketch/blockly-es-1.svg) + +### Step 2: Turn on the built-in LED + +To turn on the built-in LED, it must first be initialized. To do this, drag the `RGB LED (WS2818) initialize` block into the `Arduino run first` function. +The PIN is already selected as `onBoard`. You can leave the values for brightness and number as they are. +To turn on the built-in LED, you must drag the `LED on digital` block into the `Arduino loop forever` function. +Then select `BUILTIN_1` under PIN and `On` under Status. + +![](/img/en/blockly-bilder/erster-sketch/rgb-led-block-1.svg) + +After that, you can use the `Set RGB LED` block in the `Arduino loop forever` function to make the LED light up in a color of your choice. + +![](/img/en/blockly-bilder/erster-sketch/rgb-led-block-2.svg) + +### Step 3: Let the built-in LED blink +To make the built-in LED blink in a random color, you can use the `Interval` block in the `Time` category. +Drag this block into the `Arduino loop forever` and set the time to `500ms`. + +![](/img/en/blockly-bilder/erster-sketch/rgb-led-block-3.svg) + +## Compile and download +After your program is finished, click the orange "Compile" button and a .BIN file will be offered for download. +Save this file at any location on your computer. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcus2-in-betrieb-nehmen.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcus2-in-betrieb-nehmen.mdx new file mode 100644 index 0000000..70fadb9 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcus2-in-betrieb-nehmen.mdx @@ -0,0 +1,25 @@ +--- +sidebar_position: 2 +title: Starting up the MCU S2 +hide_title: false +--- +## Supplying the senseBox with power +
+

+To use the senseBox, it must be supplied with power. There are two ways to supply the senseBox with power: +

+

1. USB cable

+

+You can supply the senseBox with power using a USB-C cable. This is the easiest option if you are programming on a computer. +Plug the smaller end of the USB cable into the USB port of the senseBox MCU S2. The USB port is located at the top next to the red reset button. +The other end of the cable is plugged into the USB port of your computer or a power bank. +

+battery +

2. Battery

+

+If you want to supply your senseBox with power via a battery, you can do this via the two-pin JST connector on the senseBox MCU2. Simply plug the JST connector +of the battery into the JST connector on the senseBox MCU S2. This is located at the top, next to the USB connection. +

+battery + +
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcus2-kompilieren.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcus2-kompilieren.mdx new file mode 100644 index 0000000..005dd67 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/mcus2-kompilieren.mdx @@ -0,0 +1,51 @@ +--- +sidebar_position: 4 +title: Compile and transfer +hide_title: false +--- + +import Layout from "@site/src/Layout"; +import { useBoardStore } from "@site/src/lib/stores/store"; +import BoardDropdown from "@site/src/components/BoardDropdown/BoardDropdown"; +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "@site/src/components/ui/tabs"; +import AlertBox from "@site/src/components/AlertBox/AlertBox"; + + +## Compile +In order for your program to be executed by the senseBox, it must first be translated into machine language. +This process is called _compiling_. In the case of the senseBox, our server takes care of compiling. + +To have your sketch compiled, click on the orange button with the notepad symbol in Blockly. + +![](/img/blockly-bilder/kompilieren/kompilieren.png) + +Once your sketch has been successfully compiled, you will be prompted to download a .BIN file. +Save it in a location where you can easily find it later. + +
+

Transfer

+

+ {" "} + Now connect your senseBox MCU-S2 to your computer using the USB cable. + Your senseBox should now be recognized as a removable storage by your computer.{" "} +

+

Copy

+

+ Now you can simply copy the previously downloaded .BIN file to the removable storage SENSEBOX using drag & drop. + The senseBox will now play your uploaded sketch. +

+ +

+ Currently, the transfer of a .bin file to the senseBox may take a little longer. + The transfer process is complete when the LED lights up green! +

+
+ + +
+ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/reset-esp32.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/reset-esp32.mdx new file mode 100644 index 0000000..fc65c4a --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mcus2/reset-esp32.mdx @@ -0,0 +1,25 @@ +--- +title: senseBox resetten +--- +import mcus2top from "@site/static/img/mcus2/mcus2top.png" +import AlertBox from "@site/src/components/AlertBox/AlertBox"; +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText" + +# senseBox resetten + + + +Wenn deine senseBox nicht mehr wie gewohnt funktioniert, kann es helfen, sie zurückzusetzen. Hierfür musst du den Reset Knopf drücken während du den Boot Switch Knopf gedrückt hältst. Der Reset Knopf ist direkt neben dem Boot Switch Knopf. + + +

Beim Resetten werden alle Daten auf deiner senseBox gelöscht.

+
+ +1. Drücke den Boot Switch Knopf und halte ihn gedrückt. +2. Drücke den Reset Knopf und halte ihn kurz gedrückt. +3. Lasse den Boot Switch Knopf los. +4. Warte bis die senseBox neu gestartet ist. + +Nun sollte die senseBox zurückgesetzt sein und wieder funktionieren. + +Wenn du weitere Hilfe benötigst, schaue in unserem [Forum](https://forum.sensebox.de/) vorbei oder schreibe uns eine E-Mail an support@sensebox.de \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/boards/mini/mini-overview.mdx b/i18n/en/docusaurus-plugin-content-docs/current/boards/mini/mini-overview.mdx new file mode 100644 index 0000000..a9ec05a --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/boards/mini/mini-overview.mdx @@ -0,0 +1,52 @@ +--- +title: senseBox:mini +hide_title: true +--- + +import mini from '@site/static/img/mini/sensebox-mini.png' +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import umweltsensor from '@site/static/img/hardware-bilder/umweltsensor/bme.png' +import miniRgbLed from '@site/static/img/mini/mini-rgb-led.png' +import wifiBee from '@site/static/img/hardware-bilder/bees/wifi-bee/wifi.png' +import display from '@site/static/img/hardware-bilder/oled/display.png' + +
+

senseBox:mini

+

+ The senseBox:mini is your entry into the world of microcontrollers and programming. + Build small environmental monitoring stations, capture your environment with sensors, and share everything online. +

+
+ +
+
+ +## Technical details +The following components are included in the senseBox:mini: + +
+ + + + +
+ +In addition, the board has an SD card module and the following ports: + +- 2x I2C +- 1x UART +- 1x Digital analogue port + +## Tiny computer but a lot of fun +With the senseBox:mini, coding becomes child's play. +The entry into programming the senseBox is easy, children and adults can start immediately without prior knowledge and celebrate success in no time. +From blinking the built-in RGB LED, data storage on an SD card, to the IoT environmental monitoring station, everything is possible. + +## The Internet of Things +In the Internet of Things (IoT), physical and virtual objects are interconnected. +With the senseBox:mini, you can build and program your own IoT devices and gain insights into technologies (keyword Smart Cities, Smart Home) that will revolutionize our everyday lives. + +## Easily expandable +The senseBox:mini is not limited to the hardware it contains. +You can connect any senseBox sensor and program it using our graphical programming interface. +The senseBox MCU is also fully Arduino compatible. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/deployment.mdx b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/deployment.mdx new file mode 100644 index 0000000..d8d1978 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/deployment.mdx @@ -0,0 +1,82 @@ +--- +sidebar_position: 2 +title: Die senseBox in Betrieb nehmen +hide_title: false +--- + +import Layout from "@site/src/Layout"; +import { useBoardStore } from "@site/src/lib/stores/store"; +import BoardDropdown from "@site/src/components/BoardDropdown/BoardDropdown"; + + + +## Die senseBox mit Strom versorgen + +{ useBoardStore((state)=> state.board) === 'MCU' &&( + +
+

+ {" "} + Um die senseBox zu verwenden, muss sie natürlich mit Strom versorgt werden. Es + gibt zwei Möglichkeiten die senseBox mit Strom zu versorgen:{" "} +

+

1. USB-Kabel

+

+ {" "} + Du kannst die senseBox mit Hilfe des beiliegenden USB-Kabels mit Strom versorgen. + Diese Möglichkeit ist die einfachste, wenn du sowieso am Computer programmierst. + Stecke das Ende des USB-Kabels in den USB-C-Anschluss der senseBox MCU. Dieser + befindet sich oben neben dem roten Reset-Knopf. Das andere Ende des Kabels wird + in den USB-Anschluss deines Computers oder einer Powerbank gesteckt. +

+ battery +

2. Akku

+

+ Wenn du deine senseBox über einen Akku mit Strom versorgen möchtest, kannst + du dies über den zweipoligen JST-Stecker auf der senseBox MCU tun. Stecke + dazu einfach den JST-Stecker des Akkus in den JST-Anschluss auf der senseBox + MCU. Dieser befindet sich oben, neben dem USB-Anschluss.{" "} +

+ akku +
+ +)} + +{ useBoardStore((state)=>state.board)=== 'MCU-S2' && ( + +
+

+ Um die senseBox zu verwenden, muss sie natürlich mit Strom versorgt werden. Es gibt zwei Möglichkeiten die senseBox mit Strom zu versorgen: +

+

1. USB-Kabel +

+

+ Du kannst die senseBox mit Hilfe des beiliegenden USB-C-Kabels mit Strom versorgen. Diese Möglichkeit ist die einfachste, wenn du sowieso am Computer programmierst. + Stecke das kleinere Ende des USB-Kabels in den USB-Anschluss des senseBox MCU. Dieser befindet sich oben neben dem roten Reset-Knopf. Das andere Ende des Kabels wird in den USB-Anschluss deines Computers oder einer Powerbank gesteckt. +

+ akku +

2. Akku +

+

+ Wenn du deine senseBox über einen Akku mit Strom versorgen möchtest, kannst du dies über den zweipoligen JST-Stecker auf der senseBox MCU tun. Stecke dazu einfach den JST-Stecker des Akkus in den JST-Anschluss auf der senseBox MCU. Dieser befindet sich oben, neben dem USB-Anschluss. +

+ akku + +
+ +)} + +{useBoardStore((state) => state.board) === "" && ( + +
+

+ {" "} + Bitte wähle dein Board aus, um die Informationen zu sehen.{" "} +

+ +
+)} + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) + +
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/editors-sensebox.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/editors-sensebox.md new file mode 100644 index 0000000..3bcb875 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/editors-sensebox.md @@ -0,0 +1,36 @@ +--- +date: 2020-03-11 +title: Editoren für die senseBox +title_order: 4 +categories: arduino +description: Editoren für die senseBox +type: Document +set: erste-schritte-arduino +set_order: 4 +--- + +# Editoren für die senseBox + +Du kannst die senseBox MCU mithilfe von drei verschiedenen Editoren programmieren. + +## Blockly für senseBox + +Mit Blockly für senseBox kannst du deine senseBox MCU über eine grafische Programmieroberfläche programmieren. Auf dem Computer muss keine Software installiert werden und du kannst direkt loslegen. Für Tablets gibt es eine App, sodass auch über ein Tablet drahtlos die senseBox programmiert werden kann. + +![](/img/arduino-bilder/editoren/blockly.png) + +## Arduino IDE + +Die Arduino IDE kannst du auf der Website von Arduino [kostenloses Herunterladen](https://arduino.cc/downloads). Die Arduino IDE bietet dir den kompletten Zugriff auf alle Funktionen, die die Programmiersprache Arduino bereithält. Über die Arduino IDE kannst du auch zusätzliche Sensoren und Bauteile, die nicht in Blockly für senseBox oder Open Roberta enthalten sind, programmieren. Die Arduino IDE muss auf dem Computer installiert werden. Zusätzlich muss ein Board Support Package für die senseBox MCU heruntergeladen werden. Wie genau das funktioniert, erfährst du [hier](/docs/editors/arduino/installation-bsp.mdx). + +![](/img/arduino-bilder/editoren/arduino-overview.png) + +## Open Roberta + +openRoberta ist eine weitere Möglichkeit die senseBox zu programmieren. Das openRoberta lab benötigt keine Installation auf deinem Computer und bietet einen ähnlichen Funktionsumfang wie Blockly für senseBox. Eine kurze Einführung in die Verwendung der senseBox in openRoberta findest du [hier](/docs/misc/openRoberta.md). + +![](/img/arduino-bilder/editoren/nepo.png) + +> - [Blockly für die senseBox](https://blockly.sensebox.de/) +> - [Arduino](https://www.arduino.cc/) +> - [NEPO - openRoberta](https://lab.open-roberta.org/) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/first-steps.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/first-steps.md new file mode 100644 index 0000000..7511fa9 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/first-steps.md @@ -0,0 +1,48 @@ +--- +date: 2020-03-11 +title: First Steps with the Arduino IDE +title_order: 4 +categories: arduino +description: Programming the senseBox in the Arduino IDE +type: Document +set: erste-schritte-arduino +set_order: 5 + +resources: +image1: /images/2020-03-11-allgemein-einfuehrung-arduino/arduino-buttons-1.png +image2: /images/2020-03-11-allgemein-einfuehrung-arduino/arduino-buttons-2.png +--- + +# First Steps with the Arduino IDE + +Before you can get started, you need to install the Arduino IDE. You can find out how to do this [here](/allgemein/allgemein-arduino-ide-installieren//) + +## Basics + +When you open the IDE, you will see a large white area where you will write your program. +In the black area below, status and error messages will be displayed. It is always worth taking a look at these messages when errors occur. + +Finally, you should take a look at the small buttons above the white area. + +![](/img/arduino-bilder/erste-schritte/arduino-buttons-1.png) + +The checkmark and the arrow are the two most important symbols for you: +With the checkmark, you can check your program for syntax errors, and with the arrow, you upload your program to the senseBox MCU. + +## The Arduino Sketch + +An Arduino program (also called a "Sketch") has a very simple structure consisting of two main components. These two required functions contain blocks of instructions that describe the program flow: + + +```cpp +void setup(){ + // Instruction +} +void loop(){ + // Instruction +} +``` + +The `setup` function is executed only once at the start of the program. In contrast, the `loop` function repeats all instructions in an endless loop. Both functions are essential for the program to compile and run successfully. "Compiling" refers to the translation of the program into machine code, which can be understood by the Arduino processor; the Arduino IDE handles this for us. + +Comments can be added to the program code with a double slash (`//`). It is always important to comment on your program code so that others can understand what is happening at a particular point. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/installation-arduino-ide.mdx b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/installation-arduino-ide.mdx new file mode 100644 index 0000000..fcb6641 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/installation-arduino-ide.mdx @@ -0,0 +1,100 @@ +--- +set: erste-schritte-arduino +resources: + - name: Arduino + link: https://www.arduino.cc + - name: Arduino Old Releases + link: https://www.arduino.cc/en/Main/OldSoftwareReleases#previous +title_order: 2 +date: 2020-03-11 +set_order: 3 +image1: /images/2020-03-11-allgemein-arduino-ide-installieren/arduino-download.png +image2: /images/2020-03-11-allgemein-arduino-ide-installieren/arduino-donate.png +type: Document +title: Arduino IDE Installation +description: Installation of the Arduino IDE +categories: arduino +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + + +# Installation of the Arduino IDE + +Before you can program the senseBox using the Arduino IDE, you need to install drivers and software on your computer. + +Check out the instructions for your operating system and follow the given steps. + + + +

Download Arduino Software for Windows

+

+ The senseBox is a microcontroller with various components and sensors. It is programmed using the development environment _Arduino IDE_. Download the latest version from the{" "} + Arduino Homepage:{""} +

+ arduino install +

+ Arduino is an open-source project and is funded by donations. + Therefore, you will be asked for a donation before the download; if you do not want to donate, you can click on `JUST DOWNLOAD`. +

+

+ Run the installer and follow the instructions. The installation is completed in a few minutes. +

+
+ +

Download Arduino Software for Mac(OSX)

+

+ The senseBox is a microcontroller with various components and sensors. It is programmed using the development environment _Arduino IDE_. + Download the latest version from the{" "} + Arduino Homepage:{" "} +

+ arduino install +

+ Arduino is an open-source project and is funded by donations. + Therefore, you will be asked for a donation before the download; if you do not want to donate, you can click on `JUST DOWNLOAD`. +

+

+ An Arduino.app file should appear in your Downloads folder. + Move this file to your "Applications" folder. By opening the + `Arduino.app` file, the IDE can be started. +

+
+ +

Download Arduino Software for Linux

+

+ The senseBox is a microcontroller with various components and + sensors. It is programmed using the development environment _Arduino IDE_. + Download the latest version from the{" "} + Arduino Homepage:{" "} +

+ arduino install +

+ Arduino is an open-source project and is funded by donations. + Therefore, you will be asked for a donation before the download; if you do not want to donate, you can click on `JUST DOWNLOAD`. +

+

+ Linux users can use the `AppImage` provided by Arduino to install Arduino. After downloading, the AppImage needs to be given execution permissions, +

+ cd Downloads
+ chmod +x arduino-ide_2.2.1_Linux_64bit.AppImage
+ ./arduino-ide_2.2.1_Linux_64bit.AppImage +

+ Alternatively, the AppImage can also be made executable via the Graphic User Interface. + Instructions on how to do this can be found {" "} + here{" "}. +

+
+
+ +> - [Arduino](https://www.arduino.cc/) +> - [Arduino Old Releases](https://www.arduino.cc/en/software/OldSoftwareReleases#previous) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/installation-bsp.mdx b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/installation-bsp.mdx new file mode 100644 index 0000000..5707ec9 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/installation-bsp.mdx @@ -0,0 +1,49 @@ +--- +date: 2020-03-11 +title: Installation of the Board Support Package +title_order: 4 +categories: arduino +description: Installation of the Board Support Package for the senseBox MCU +type: Document +set: erste-schritte-arduino +set_order: 4 +--- + +import { useBoardStore } from '@site/src/lib/stores/store' + +# Installation of the Board Support Package + +
+
+ To ensure the Arduino IDE supports your senseBox MCU and you can upload programs to it, you need to install two Board Support Packages beforehand. + These include the necessary drivers and software to communicate with the senseBox processor. + The senseBox Board Support Package also includes our senseBox libraries, providing you with all the basic methods for programming the included sensors. +
+

Add Board Support Package

+

+ Add the following URL in your Arduino IDE under _File - Preferences_ in the field for _Additional Board Manager URLs_: + { useBoardStore((state)=>state.board) === ':edu S2' ?

+ https://espressif.github.io/arduino-esp32/package_esp32_index.json +
+ +
:
+ https://github.com/sensebox/senseBoxMCU-core/raw/master/package_sensebox_index.json +
+ +
+ } + + +

+ +

+ Open the _Board Manager_ by clicking on the _Board Manager_ icon on the left side (see image) +

+
+ +
+

+ Enter "ESP32" in the search bar above to find the packages faster and install the `esp32` board from Espressif Systems. + Attention! Make sure to install at least version 2.0.15-alpha3! . +

+
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/libraries-hinzufuegen.mdx b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/libraries-hinzufuegen.mdx new file mode 100644 index 0000000..a011b90 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/arduino/libraries-hinzufuegen.mdx @@ -0,0 +1,41 @@ +--- +title: Adding Arduino Software Libraries +--- +# Adding an Arduino Software Library + +Adding libraries to your Arduino project can help you implement complex functions easily, keep your code clean, and promote code reusability. Libraries are collections of code that perform specific functions, such as controlling hardware or performing mathematical calculations. + +## Purpose of Software Libraries + +1. **Simplification of Code**: Libraries provide a simple interface to complex code routines. Instead of programming each step in detail, you can call the library with a few lines of code. + +2. **Code Reusability**: Code that has been written and tested once can be easily reused in different projects. + +3. **Time Saving**: By using existing libraries, you can save time that you would otherwise spend developing code. + +4. **Error Minimisation**: Libraries are often maintained and tested by a community, which reduces the likelihood of errors. + +## How to Add a Library to Arduino + +There are several methods to add an Arduino library. Here are the two most common: + +### Method 1: Using the Library Manager + +1. **Open the Arduino IDE** and go to the menu **Sketch** > **Include Library** > **Manage Libraries...** + +2. **Select the Library Manager from the right menu bar** and search for the library you want to add. + +3. **Select the library** and click **Install**. The IDE will download the selected library and add it to your available libraries. + +![](/img/arduino-bilder/editoren/arduino-add-library-manager.png) + + +### Method 2: Manually Adding a Library + +1. **Download the library** as a ZIP file and save it on your computer. + +2. **Open the Arduino IDE**, go to the menu **Sketch** > **Include Library** > **Add .ZIP Library...** + +3. **Navigate to the downloaded ZIP file**, select it, and click **Open**. The library will be added to the IDE. + +![](/img/arduino-bilder/editoren/arduino-add-library.png) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/audio.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/audio.md new file mode 100644 index 0000000..69bff6d --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/audio.md @@ -0,0 +1,23 @@ +--- +sidebar_position: 6 +title: Audio +hide_title: false +--- + +# Audio + + +## Spiele Ton +Mit dem `Spiele Ton`-Block kannst du Töne abspielen lassen. Unter __Pin__ wird der verwendete Pin ausgewählt und im Blockabschnitt __Frequenz__ die gewünschte Frequenz des Tons angegeben. + +![](/img/blockly-bilder/audio/blockly-ton-1.svg) + +> Je größer die Frequenz eines Tones, desto höher höhrt er sich an. + +## Schalte Ton aus +Mit dem `Schalte Ton aus`-Block kannst du einen Ton wieder ausschalten. + +![](/img/blockly-bilder/audio/blockly-ton-2.svg) + + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/display.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/display.md new file mode 100644 index 0000000..5348460 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/display.md @@ -0,0 +1,85 @@ +--- +title: Display +hide_title: false +--- +# Display + +## Allgemeines +In der senseBox ist ein OLED-Display enthalten. Dieses kann benutzt werden, um z.B. Text, Messwerte oder Graphen anzeigen zu lassen. +Das Display hat eine Auflösung von 128x64 Pixeln. Das heißt 128 Pixel in horizontaler Richtung (x-Achse) und 64 Pixel in vertikaler Richtung (y-Achse). + +![](/img/blockly-bilder/display/Display.png) + +Um Informationen auf dem Display anzeigen zu lassen, muss dieses zuerst im `Setup()` initalisiert werden. Anschließend können in der `Endlosschleife()` die `Zeige auf dem Display`-Schleife und der `Display löschen`-Block platziert werden. Im freien Abschnitt des `Zeige auf Display`-Blocks kann dann anschließend festgelegt werden, was genau angezeigt werden soll. Der `Display löschen`-Block muss hinzugefügt werden, damit verschiedene Informationen nicht übereinander geschrieben werden. + +![](/img/blockly-bilder/display/blockly-display-1.svg) + +## Text/Zahl anzeigen +Um Text oder eine Zahl anzeigen zu lassen, ziehe den `Schreibe Text/Zahl`-Block in den freien Abschnitt des `Zeige auf Display`-Blocks. + +![](/img/blockly-bilder/display/blockly-display-2.svg) + +Der `Schreibe Text/Zahl`-Block verfügt über fünf Einstellungsmöglichkeiten: +* **Schriftfarbe:** Hier kannst du wählen ob du mit weißer Schrift auf schwarzem Grund, oder mit schwarzer Schrift auf weißem Grund schreiben möchtest. +* **Schriftgröße:** Hier kannst du einstellen, in welcher Größe dein Text, bzw. deine Zahl angezeigt werden soll. In Schriftgröße 1 ist ein Zeichen 8 Pixel hoch, in Schriftgröße 2 bereits 16 Pixel. +* **x-Koordinate:** Hier legst du fest, an welcher x-Koordinate (siehe Abb. oben) du beginnen möchtest zu schreiben. +* **y-Koordinate:** Hier legst du fest, an welcher y-Koordinate (siehe Abb. oben) du beginnen möchtest zu schreiben. +* **Wert:** An diesen freien Blockabschnitt kann der jeweilige Text, die Zahl oder der Messwert angefügt werden. + +![](/img/blockly-bilder/display/blockly-display-3.svg) + +## Punkt zeichnen +Um einen Punkt auf dem Display anzeigen zu lassen, ziehe den `Zeichne Punkt`-Block in den freien Abschnitt des `Zeige auf Display`-Blocks. + +![](/img/blockly-bilder/display/blockly-display-4.svg) + +Der `Zeichne Punkt`-Block verfügt über vier Einstellungsmöglichkeiten: +* **x-Koordinate:** Hier legst du fest, an welcher x-Koordinate (siehe Abb. oben) der Punkt gezeichnet werden soll. +* **y-Koordinate:** Hier legst du fest, an welcher y-Koordinate (siehe Abb. oben) der Punkt gezeichnet werden soll. +* **Radius:** Hier kannst du den Radius des Kreises in Pixeln festlegen. +* **Ausgefüllt:** Durch setzen oder entfernen des Häkchens legst du fest, ob dein Punkt ausgefüllt, also komplett weiß oder nur seine Kontur gezeichnet werden soll. + +## Rechteck zeichnen +Um ein Rechteck auf dem Display anzeigen zu lassen, ziehe den `Zeichne Rechteck`-Block in den freien Abschnitt des `Zeige auf Display`-Blocks. + +![](/img/blockly-bilder/display/blockly-display-5.svg) + +Der `Zeichne Rechteck`-Block verfügt über vier Einstellungsmöglichkeiten: +* **x-Koordinate:** Hier legst du fest, an welcher x-Koordinate (siehe Abb. oben) das Rechteck gezeichnet werden soll. +* **y-Koordinate:** Hier legst du fest, an welcher y-Koordinate (siehe Abb. oben) das Rechteck gezeichnet werden soll. +* **Breite:** Hier kannst du die Breite des Rechtecks in Pixeln festlegen. +* **Höhe:** Hier kannst du die Höhe des Rechtseckts in Pixeln festlegen festelegen. +* **Ausgefüllt:** Durch setzen oder entfernen des Häkchens legst du fest, ob dein Rechteck ausgefüllt, also komplett weiß oder nur seine Kontur gezeichnet werden soll. + +## Diagramm zeichnen +Um ein Diagramm in Echtzeit aus Messwerten zeichenen zu lassen, ziehe den `Zeichne Diagramm`-Block in den freien Abschnitt des `Zeige auf Display`-Blocks. Auf der x-Achse wird standardmäßig die Zeit abgebildet und auf der y-Achse dein ausgewählter Messwert. + +![](/img/blockly-bilder/display/blockly-display-6.svg) + +Der `Zeichne Diagramm`-Block ist der umfangreichste Block in der Kategorie `Display`. Er verfügt über elf Einstellungsmöglichkeiten: +* **Title:** In das hier angeknüpfte Textfeld kannst du den Titel deines Diagramms eintragen. +* **Y-Achsenbeschriftung:** In das hier angeknüpfte Textfeld kannst du die Beschriftung der y-Achse eintragen. +* **X-Achsenbeschriftung:** In das hier angeknüpfte Textfeld kannst du die Beschriftung der y-Achse eintragen. + +> Achtung: Je länger deine Beschriftungen an x- und y-Achse sind, desto weniger Platz bleibt für das eigentliche Diagramm. Versuche dich bei Beschriftungen am besten auf die Formelzeichen (z.B. T für Temperatur) zu beschränken. + +* **X-Wertebereich Anfang:** Hier legst du den Beginn des Wertebereichs der x-Achse fest. +* **X-Wertebereich Ende:** Hier legst du das Ende des Wertebereichs der x-Achse fest. +* **Y-Wertebereich Anfang:** Hier legst du den Beginn des Wertebereichs der y-Achse fest. +* **Y-Wertebereich Ende:** Hier legst du das Ende des Wertebereichs der y-Achse fest. + +> Tipp: Am Wertebereich der x-Achse musst du für ein Standarddiagramm, welches einen Messwert gegen die Zeit aufträgt, nichts verändern. Den Wertebereich der y-Achse solltest du je nach Messwert anpassen. + +* **X-Linienabstand:** Hier legst du den Abstand der Hilfslinien auf der x-Achse fest. +* **Y-Linienabstand:** Hier legst du den Abstand der Hilfslinien auf der y-Achse fest. + +> Tipp: Bei einem Wert von 0 werden keine Hilfslinien gezeichnet. + +* **Zeitabschnitt:** Hier legst du den Zeitabschnitt fest, nachdem dein Diagramm gelöscht und neu begonnen wird. Im Normalfall sollte dieser Wert immer gleich dem Endes des x-Wertebereichs sein. +* **Wert:** An diesem freien Blockabschnitt kann der jeweilige Sensor angeknüpft werden, dessen Messwert auf der y-Achse aufgetragen werden soll. + +![](/img/blockly-bilder/display/blockly-display-7.svg) +> In diesem Beispiel wird die Temperatur gegen die Zeit aufgetragen. Alle 5 Sekunden erscheint eine Hilfsline und nach 15 Sekunden wird das Diagramm gelöscht und neu begonnen, da das Display voll ist. + + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/led.mdx b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/led.mdx new file mode 100644 index 0000000..7b93079 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/led.mdx @@ -0,0 +1,68 @@ +--- +sidebar_position: 8 +title: LED +hide_title: false +--- + +import Layout from "@site/src/Layout"; +import { useBoardStore } from "@site/src/lib/stores/store"; + + + +Mit dem `LED an digitalen Pin`-Block kannst du eine an einem der sechs digitalen Pins angeschlossene LED ansteuern. Im Dropdown-Menü **Pin** wählst du den jeweiligen Pin aus und unter **Status**, ob die LED ein- oder ausgeschaltet werden soll. + +![](/img/blockly-bilder/led/blockly-led-1.svg) + +{useBoardStore((state)=>state.board === 'MCU' && ( + +
+

+ {" "} + Mit dem RGB-LEDBlock kannst du eine an einem der sechs digitalen + Pins angeschlossene RGB-LED ansteuern. Im Dropdown-Menü Pin wählst du + den jeweiligen Pin aus. An die Blockabschnitte rot, grün und + blau + können Zahlen von 0 bis 255 angeknüpft werden, um die Intesität der verschiedenen + Farbanteile festzulegen. Bei einem Wert von 0 ist kein Farbanteil vorhanden, + bei einem Wert von 255 ist der maximale Farbanteil vorhanden.{" "} +

+ +

Der Farbcode für senseBox Grün lautet zum Beispiel:

+ +
+))} + +{useBoardStore((state)=>state.board === 'MCU-S2' && ( + +
+

RGB-LED (onBoard MCU-S2)

+ Auf der senseBoxMCU-S2 ist eine RGB-LED fest verbaut. Diese wird über den Pin on + Board angesprochen. Diese kann mit dem Block + {" "} + RGB-LED initialisieren{" "} + auf dem Port on Board initialisiert werden. + + +

Über den Block Setze RGB-LED kann die Farbe der LED festgelegt werden.

+

+ An den Abschnitt Farbe kannst du dir aus der Kategorie LED den Block für Farbe aussuchen und eine Farbe auswählen. +

+ + +
+))} + +## RGB-LED + +Die verkettbare RGB-Led, welche über ein JST-Kabel direkt mit der senseBox MCU verbunden wird kann über folgenden Block programmiert werden: + +![](/img/blockly-bilder/led/blockly-led-4.svg) + +Folgende Parameter können eingestellt werden: + +- Helligkeit: Gib einen Wert zwischen 0 (dunkel/aus) und 255 (sehr hell) an. Beachte, dass die Helligkeit im Verlaufe des Programmes nicht verändert werden sollte +- Position: Sobald du mehrere RGB-LED mit einander verbunden hast kannst du hier über die Position die jeweilige LED auswähle. Beachte, dass die Position 0 der ersten LED entspricht. +- Rot/Grün/Blau: Gib einen Wert zwischen 0 und 255 an. + +
+> - [Blockly.senseBox.de](https://blockly.sensebox.de/) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/logik.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/logik.md new file mode 100644 index 0000000..493d5b9 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/logik.md @@ -0,0 +1,87 @@ +--- +sidebar_position: 7 +title: Conditions +hide_title: false +--- +# Logic + +## Conditions +Conditions or branching in programs are among the most important control structures in programming. They enable your program to respong to different conditions. + +### If, do relationship +The `if, do` block has two free block sections `if` and `do`. + +![](/img/en/blockly-bilder/logik/blockly-entscheidungen-1.svg) + +The actions linked to the block section `do` are only executed if the conditions attached to the block section `if` are met. + +For example, the built-in LED on the senseBox MCU should be turned on **if** the built-in button is pressed. + +![](/img/en/blockly-bilder/logik/blockly-entscheidungen-2.svg) + + +Commands added after the `if, do` block will always be executed, even if the condition was not met before. + +### Else +By clicking on the small gear icon at the top left of the `if, do` block, you can extend the block with an `else` section. Commands placed in this section will only be executed if the condition was **not** met before. If the condition was met, they will be skipped. + +For example, the built-in LED 1 should only light up **if** the built-in button is pressed and **else** the built-in LED 2 should light up. + +![](/img/en/blockly-bilder/logik/blockly-entscheidungen-3.svg) + + +### Branching +By clicking on the small gear in the top-left corner of the `if, do` block, you can expand the block with an `else if` section. First, the top `if` condition is checked, and if it is not met, the following `else if` condition is checked. This way, only the commands whose associated condition is met will be executed. +In contrast to the `else` condition, this allows you to set more than two conditions. + +For example, depending on the temperature, a LED should be turned on. If the temperature is below 0°C, LED 1 should turn on; at exactly 0°C, LED 2 should turn on; and at temperatures above 0°C, LED 3 should turn on. + + +![](/img/en/blockly-bilder/logik/blockly-entscheidungen-4.svg) + + +## Operators +In Blockly, you have the option to use various logical operators to compare values, such as sensor readings. These operators also allow you to create more complex logical expressions through logical connections. + +### Logical Comparisons +With the `logical comparisons` block, you can compare values. + +![](/img/blockly-bilder/logik/blockly-entscheidungen-5.svg) + +The block offers a selection of six operators: + +______________________________________________________________________________ +| Operator | Mathematics | +| :-------------------: | :----------: | +| equal | = | +| not equal | ≠ | +| less than | < | +| greater than | < | +| less than or equal to | ≤ | +| greater than or equal to | ≥ | +______________________________________________________________________________ +### Logical operations +With the `logical operations` block, you can formulate more complex logical expressions. +For example, a lamp that only lights up when two conditions are met. + +![](/img/en/blockly-bilder/logik/blockly-entscheidungen-6.svg) + +The block offers a choice between the operators `and` and `or`. + +`And` connects two conditions such that both must be met for the entire expression to be considered true. + +`Or` connects two conditions such that only one of the two must be true for the entire expression to be considered true. + +### Not Block +With the `not` block, you can negate expressions. A condition is true if the input value is false and false if it is true. + +![](/img/en/blockly-bilder/logik/blockly-entscheidungen-7.svg) + +### Test Block +With the `test` block, you can check a condition and define actions that will be executed based on the result. + +![](/img/blockly-bilder/logik/blockly-entscheidungen-8.svg) + + +- [Blockly.senseBox.de](https://blockly.sensebox.de/) + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/lora.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/lora.md new file mode 100644 index 0000000..247c8e4 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/lora.md @@ -0,0 +1,163 @@ +--- +sidebar_position: 8 +title: LoRa +hide_title: false +--- + + +# LoRa + + +## Activation + +![](/img/blockly-bilder/lora/blockly-lora-1.svg) + +Use these blocks to initialize the Lora-Bee and connect to [The Things Network](https://www.thethingsnetwork.org/). Depending on the activation method you use (OTAA or ABP), you need to enter the corresponding IDs in the block. Additionally, the transmission interval can be set in minutes. + +## LoRa Message + +![](/img/blockly-bilder/lora/blockly-lora-2.svg) + +Use these blocks to send a message over the LoRa network. No specific format is used for the message (often called payload). The data is encoded as bytes, allowing for quick and efficient transmission over the LoRa network. The data must then be converted back into a readable format using a special decoder in the TTN Console. + +## Creating a Decoder + +TTN decoding is all about understanding bytes. After that, it is possible to create quick solutions to access the data measured by the senseBox. + +### Theory +LoRaWAN is not suitable for sending large amounts of data. Therefore, the information is divided into small bytes and sent. One byte contains 8 bits, which means you can distinguish between 256 different values. Two bytes contain 16 bits, making it possible to distinguish between 65,536 values. + + +The following table provides an overview of the bandwidth: + +______________________________________________________________________________ +| Bytes | Bit | min (signed) | max (signed) | min (unsigned) | max (unsigned) | +| :-------: | :-----:|:----------------:|:---------------:|:----------------:|:----------------:| +| 1 | 8 | -128 | 127 | 0 | 255 | +| 2 | 16 | −32.768 | 32.767 | 0 | 65.535 | +| 3 | 24 | −2.147.483.648 | 2.147.483.647 | 0 | 4.294.967.295 | +______________________________________________________________________________ + +In the table, there are two different types: "signed" and "unsigned". Signed values cover both positive and negative ranges. + +Example: You want to measure humidity. The values range between 0% and 100%. However, these are not decimal values, but only integer values. One could use a byte that corresponds to the value for humidity. However, if you want to send a decimal number with two decimal places, 1 byte is no longer sufficient. 2 bytes must be used. + +Imagine we measure 85.42%. A simple approach would be to take the measurement and multiply it by 100. Now we have a value of 85.42 * 100 = 8542. We can encode 8542 in two bytes, send them to TTN, and decode these two bytes to get 8542. This number can then be divided by 100 to get the value of 85.42%. That's basically how it works. + +### Example + +__Blockly__: +On the Arduino side, the [lora-serialization](https://github.com/thesolarnomad/lora-serialization) library is used. The documentation shows a [function](https://github.com/thesolarnomad/lora-serialization#unsigned-16bit-integer-2-bytes) to send a value with 16 bits. This function can be used to send the values for humidity. The value for humidity ranges between 0 and 100%, so the following blocks can be used to send it: + +![](/img/blockly-bilder/lora/blockly-lora-humidity.svg) + +The measured value is multiplied by 100 to retain the two decimal places. + +Since the value for the temperature can also fall into the negative range, the value must first be converted to a positive value and then multiplied by a factor to retain the decimal places. + +![](/img/blockly-bilder/lora/blockly-lora-temperatur.svg) + +In this example, a temperature sensor is used that has measured values from -18 degrees Celsius and outputs the temperature with an accuracy of 0.0013 degrees Celsius. + +__TTN__: +In the TTN Console, two different values from the senseBox now arrive. These values must now be decoded from bytes back to the original values using a decoder. You can define the decoder under Payloads: + +![](/img/blockly-bilder/lora/blockly-lora-13.png) + + +```cpp +/** + * Convert the array of bytes to an unsigned integer, LSB. + * + * BEWARE: This is only safe up to 0x1FFFFFFFFFFFFF, so: 6 bytes. + */ +function uint(bytes) { + + return bytes.reduceRight(function(acc, b) { + // We expect an unsigned value, so to support more than 3 bytes + // don't use any bitwise operators, which would always yield a + // signed 32 bits integer instead. + return acc * 0x100 + b; + }, 0); +} +``` + +Here you can now define the decoder: + +```cpp +function Decoder(bytes) { + + var i = 0; + var decoded = {}; + // The index in the bytes array that needs to be handled next; + // use along with "i++" which returns the current value, and + // then increments it for the next usage + + + // Relative humidity with 0.01 precision, 0.00 through 100.00, LSB + var humidity = uint(bytes.slice(i, i+=2)) / 100; + // Temperature with 0.0013 precision, -18.000 through 67.000, LSB + var temperature = uint(bytes.slice(i, i+=2)) / 771 - 18; + // Unary plus operator to cast string result of toFixed to number + temperature = +temperature.toFixed(3); + + decoded['TEMPERATURE_SENSOR_ID'] = temperature + decoded['HUMIDITY_SENSOR_ID'] = humidity + + return decoded; +} +``` + +The function takes the first two bytes and converts them to the humidity measurement value. The next two bytes are converted to a temperature measurement value. If you use openSenseMap as an endpoint (`https://ttn.opensensemap.org/v1.1`) in the TTN HTTP integration, the measurement values will be linked with your sensor IDs and displayed on openSenseMap. Learn more about the openSenseMap TTN integration [here](https://sensebox.github.io/books-v2/osem/ttn_integration.html). + +### Important Points +Some important points to note: + +→ The decoding fails / returns incorrect values if you do not send everything that needs to be decoded. For example, if the decoder expects both humidity and temperature values, but the senseBox only sends a humidity value, you will not get correct values. + +→ When sending values larger than 3 bytes, it is a bit different. Values for illuminance can be larger than a 2-byte integer at maximum. Therefore, 3 bytes are needed. You can send it as follows: + +![](/img/blockly-bilder/lora/blockly-lora-illuminance.svg) + + +and decode as follows: +```cpp +var lux = bytes[i] | bytes[i+1]<<8 | bytes[i+2]<<16; +i = i + 3 // increment counter afterwards +``` + + +## Cayenne LPP +![](/img/blockly-bilder/lora/blockly-lora-5.svg) + +![](/img/blockly-bilder/lora/blockly-lora-6.svg) + +![](/img/blockly-bilder/lora/blockly-lora-7.svg) + +![](/img/blockly-bilder/lora/blockly-lora-8.svg) + +![](/img/blockly-bilder/lora/blockly-lora-9.svg) + +![](/img/blockly-bilder/lora/blockly-lora-10.svg) + +![](/img/blockly-bilder/lora/blockly-lora-11.svg) + +![](/img/blockly-bilder/lora/blockly-lora-12.svg) + +The [Cayenne Low Power Payload Format](https://community.mydevices.com/t/cayenne-lpp-2-0/7510) offers an easy way to send data over the LoRaWAN network. The data can be directly decoded back into a readable format using an existing decoder. Different blocks are available for different measurements to ensure that all decimal places are transmitted correctly. + +![](/img/blockly-bilder/lora/blockly-lora-14.png) + + + + + + + + + +In the TTN Console, you can select the decoder under __Payload__. Choose Cayenne LPP, and the values will be automatically decoded. + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) + + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/mathematik.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/mathematik.md new file mode 100644 index 0000000..9bb96e2 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/mathematik.md @@ -0,0 +1,51 @@ +--- +sidebar_position: 9 +title: Mathematics +hide_title: false +--- +# Mathematics + +## General +In Blockly, you have the ability to perform various mathematical operations. You can calculate with numbers, generate random numbers, and map values to a different range. + +## Calculating Numbers +In Blockly, you can perform various mathematical calculations. The following blocks are available for this purpose: +________________________________________ +| Block | Function | +| :-----: | :--------: | +| ![](/img/blockly-bilder/mathematik/blockly-mathematik-1.svg) | A number. | +| ![](/img/blockly-bilder/mathematik/blockly-mathematik-2.svg) | Simple mathematical operationen. | +| ![](/img/en/blockly-bilder/mathematik/blockly-mathematik-3.svg) | A number. | +| ![](/img/blockly-bilder/mathematik/blockly-mathematik-4.svg) | Trigonometric functions. | +| ![](/img/blockly-bilder/mathematik/blockly-mathematik-5.svg) | Mathematical constants. | +| ![](/img/en/blockly-bilder/mathematik/blockly-mathematik-6.svg) | Check numbers. | +| ![](/img/en/blockly-bilder/mathematik/blockly-mathematik-7.svg) | Add a specific value to a number. | +| ![](/img/en/blockly-bilder/mathematik/blockly-mathematik-8.svg) | Round a number. | +| ![](/img/en/blockly-bilder/mathematik/blockly-mathematik-9.svg) | Get the remainder of a division. | +| ![](/img/en/blockly-bilder/mathematik/blockly-mathematik-10.svg)| Limit the range of a number. | +________________________________________ + +## Random Numbers +In Blockly, you can generate random numbers. There are two different blocks available for this purpose. + +![](/img/en/blockly-bilder/mathematik/blockly-mathematik-11.svg) + +With the `integer random value` block, you can generate an integer random value within a defined range. + +![](/img/blockly-bilder/mathematik/blockly-mathematik-12.svg) + +With the `random number (0.0-1.0)` block, you can generate a random decimal number between 0.0 and 1.0. + +## Mapping Values +With the `Map Value` block, you can map numbers, such as measurement values, to a new range. This is useful when you want to convert your measurement values directly into a percentage between 0 and 100, for example. + +![](/img/en/blockly-bilder/mathematik/blockly-mathematik-13.svg) + +In the block sections, you need to set the boundaries of the original range and the boundaries of the new range using the `number` blocks. + +In the following example, the entire range of the light sensor (from 3 to 200,000 lux) is mapped to a new range from 0 to 100. + +![](/img/en/blockly-bilder/mathematik/blockly-mathematik-14.svg) + + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/schleifen.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/schleifen.md new file mode 100644 index 0000000..e52fe8e --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/schleifen.md @@ -0,0 +1,27 @@ +--- +sidebar_position: 5 +title: Loops +hide_title: false +--- + +# Loops + +## General +Loops are one of the most important control structures in programming. They help you whenever you want to repeat one or more instructions a certain number of times. In Blockly, there are different types of loops, but their functionalities are always very similar. You can find all loops in the corresponding category in the toolbox. + +## Repeat X Times Loop +The simplest loop is the `Repeat X Times` loop. In it, all commands within the loop are repeated X times. + +![](/img/en/blockly-bilder/schleifen/blockly-schleifen-1.svg) + +## Repeat While Loop +The second loop is the `Repeat While/Until` loop. The commands inserted in the loop are only executed if a condition attached to the free block section is met/true. In the block's dropdown menu, you can select whether the commands should be executed **until** a condition is met, or **while** a condition is met. + +![](/img/en/blockly-bilder/schleifen/blockly-schleifen-2.svg) + +## Loop with Counter Variable +The third loop is implemented using a counter variable, which can also be used within the program. First, a variable is initialized with a start value and a maximum value is set for it. Then, the counter variable is increased by the specified number after each iteration. This way, an instruction can be set for each state of the counter variable. + +![](/img/en/blockly-bilder/schleifen/blockly-schleifen-3.svg) + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/sensoren.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/sensoren.md new file mode 100644 index 0000000..55337d2 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/sensoren.md @@ -0,0 +1,83 @@ +--- +sidebar_position: 11 +title: Sensors +hide_title: false +--- + +# Sensors + +## General +The senseBox contains various environmental sensors. In this chapter, we will initially focus on the sensors that are already built into the senseBox MCU or can be connected via I2C cables. + +> To read and display measurements, it's best to use the display. In this chapter, we will use a minimal example to display measurements on the screen. + +## Accelerometer (BMX055) +The accelerometer is already built into the senseBox MCU. It can provide you with the acceleration along the X, Y, and Z axes, as well as the total acceleration. You can select the measurement range between 2g, 4g, 8g, and 16g. + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-0.svg) + +> The average acceleration due to gravity is denoted by *g* and is approximately 9.81 m/s2. + +## Button +A button is already built into the senseBox MCU. Additional buttons can be connected via the three digital Ports. In the dropdown menu, you can select different modes for the button: + +- __is pressed__: With this mode, you can check if the button is currently pressed. You will receive either the value TRUE or FALSE. +- __was pressed__: With this mode, you can check if the button was pressed. You will receive TRUE only after the button has been pressed and released. +- __as switch__: When using this mode, you can use the button like a light switch. The status will be saved until the button is pressed again. + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-10.svg) + +## Temperature and Humidity Sensor (HDC1080) +The temperature and humidity sensor is connected to one of the five I2C/Wire ports. It can provide you with the temperature in °C and the relative humidity in %. + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-1.svg) + +## Temperature and Pressure Sensor (BMP280) +The temperature and pressure sensor is connected to one of the five I2C/Wire ports. It can provide you with the temperature in °C, the air pressure in Pa, and the altitude above sea level in meters. + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-2.svg) + +## Light and UV Sensor (TSL45315 & VEML6070) +The light and UV sensor is connected to one of the five I2C/Wire ports. It can provide you with the brightness in Lux and the UV intensity in µW/cm². + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-3.svg) + +## Environmental Sensor (BME680) +The environmental sensor is connected to one of the five I2C/Wire ports. It can provide you with the temperature in °C, the relative humidity in %, the air pressure in Pa, and the indoor air quality (IAQ) on a scale from 0-500. + +__________________________________________________________________________ +| __Value__ |0-50|51-100|101-150|151-200|201-250|251-350|> 359| +|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:| +| __Air quality__ |Excellent|Good|Slightly polluted|Moderately polluted|Heavily polluted|Significantly polluted|Extremely polluted| +___________________________________________________________________________ + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-7.svg) + +In addition to the above parameters, the sensor can also provide you with the calibration value (a status message) and partial values CO2-equivalent and breath VOC of indoor air quality. + +## Fine Particular Sensor (SDS011) +The fine particular sensor is connected to one of the two UART/Serial ports and the respective port is selected in the block. It can provide you with the fine dust concentration PM2.5 and PM10 in µg/cm3. + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-4.svg) + +## Soil Temperature and Moisture Sensor (SMT50) +The soil temperature and moisture sensor is connected to one of the three digital ports and the respective port is selected in the block. It can provide you with the soil temperature in °C and the volumetric water content of the soil in %. + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-5.svg) + +## GPS Module (CAM-M8Q) +The GPS module is connected to one of the five I2C/Wire ports. It can provide you with the latitude, longitude, altitude above sea level in meters, current speed, a timestamp, the time, and the date. + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-6.svg) + +## Ultrasonic Distance Sensor +The ultrasonic distance sensor is connected to one of the three digital ports and the respective port is selected in the block. It can provide you with the distance in cm. + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-8.svg) + +## Microphone +The microphone is connected to one of the three digital ports and the respective port is selected in the block. It can provide you with the volume level between 0 and 5V. + +![](/img/en/blockly-bilder/sensoren/blockly-sensoren-9.svg) + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/text.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/text.md new file mode 100644 index 0000000..e97d93e --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/text.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 12 +title: Text +hide_title: false +--- + +# Text + +## Text Field +With the text field block `" "`, you can create text. Write the desired text inside the quotation marks. + +![](/img/blockly-bilder/text/blockly-text-1.svg) + +## Create Text with +With the `Create Text with` block, you can both convert measurements into text and create combined texts (from multiple text fields, numbers, measurements, or variables). + +![](/img/en/blockly-bilder/text/blockly-text-2.svg) + +The regular Create-Text-From block can be expanded by clicking the gear icon. You can add more elements by clicking and dragging to create text from multiple components. After editing, you can close the window by clicking the gear icon again. + +![](/img/blockly-bilder/text/blockly-text-6.gif) + +## Append Text + +With the `Append Text` block, you can append text to an existing variable. + +![](/img/en/blockly-bilder/text/blockly-text-3.svg) + +## Length + +With the `Length` block, you can get the length of a text block. + +![](/img/en/blockly-bilder/text/blockly-text-4.svg) + +> For example, the text block "senseBox" would be 8 units long. + +## is empty + +With the `is empty` block, you can check if a given text block is empty (has a length of 0). The result is either true (if the given text block is indeed empty) or false (if there are characters in the text block). + +![](/img/en/blockly-bilder/text/blockly-text-5.svg) + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/variablen.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/variablen.md new file mode 100644 index 0000000..e661f7f --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/variablen.md @@ -0,0 +1,46 @@ +--- +sidebar_position: 6 +title: Variables +hide_title: false +--- + +# Variables + +## General +Variables are placeholders for numbers, letters, and strings. This means that a variable **does not** need to remain the same throughout the entire program. This is especially useful when you want to use specific information in different parts of the program. + +Variables can be defined using the `Set Element` block. + +![](/img/en/blockly-bilder/variablen/blockly-variablen-1.svg) + +In the block's dropdown menu, you can rename the variable or create a new one. + +## Example +After a soccer game, the number of goals scored should be stored in a variable. This variable will then be displayed on the screen. + +![](/img/en/blockly-bilder/variablen/blockly-variablen-2.svg) + +To expand on the simple example, we now want to be able to add points live. For each goal scored, the built-in button on the MCU must be pressed once. + +![](/img/en/blockly-bilder/variablen/blockly-variablen-3.svg) + +## Data Types +Depending on what is stored in a variable, you should set the correct data type. You set the data type using the `as Character` block. This block is attached to a `Set Element` block. Then, the value to be stored is inserted in the free block section, and the data type is selected from the dropdown menu. + +![](/img/blockly-bilder/variablen/blockly-variablen-4.svg) + +In Blockly, the following data types are available: + +**Character:** For single text characters + +**Text:** For whole words or sentences + +**Boolean:** For values that are either true or false (or 1 or 0) + +**Number:** For whole numbers from -32,768 to 32,767 + +**Big Number:** For large numbers from -2,147,483,648 to 2,147,483,647 + +**Decimal:** For decimal numbers + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/_category_.json b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/_category_.json new file mode 100644 index 0000000..ec4b011 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Web", + "position": 15, + "link": { + "type": "generated-index", + "description": "Information about the visual programming environment Blockly for senseBox." + } +} \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/lora.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/lora.md new file mode 100644 index 0000000..d1413e0 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/lora.md @@ -0,0 +1,161 @@ +--- +sidebar_position: 8 +title: LoRa +hide_title: false +--- + + +# LoRa + + +## Activation + +![](/img/blockly-bilder/lora/blockly-lora-1.svg) + +Use these blocks to initialize the Lora-Bee and connect to [The Things Network](https://www.thethingsnetwork.org/). Depending on the activation method you use (OTAA or ABP), you need to enter the corresponding IDs in the block. Additionally, the transmission interval can be set in minutes. + +## LoRa Message + +![](/img/blockly-bilder/lora/blockly-lora-2.svg) + +Use these blocks to send a message over the LoRa network. No specific format is used for the message (often called payload). The data is encoded as bytes, allowing for quick and efficient transmission over the LoRa network. The data must then be converted back into a readable format using a special decoder in the TTN Console. + +## Creating a Decoder + +TTN decoding is all about understanding bytes. After that, it is possible to create quick solutions to access the data measured by the senseBox. + +### Theory +LoRaWAN is not suitable for sending large amounts of data. Therefore, the information is divided into small bytes and sent. One byte contains 8 bits, which means you can distinguish between 256 different values. Two bytes contain 16 bits, making it possible to distinguish between 65,536 values. + + +The following table provides an overview of the bandwidth: + +______________________________________________________________________________ +| Bytes | Bit | min (signed) | max (signed) | min (unsigned) | max (unsigned) | +| :-------: | :-----:|:----------------:|:---------------:|:----------------:|:----------------:| +| 1 | 8 | -128 | 127 | 0 | 255 | +| 2 | 16 | −32.768 | 32.767 | 0 | 65.535 | +| 3 | 24 | −2.147.483.648 | 2.147.483.647 | 0 | 4.294.967.295 | +______________________________________________________________________________ + +In the table, there are two different types: "signed" and "unsigned". Signed values cover both positive and negative ranges. + +Example: You want to measure humidity. The values range between 0% and 100%. However, these are not decimal values, but only integer values. One could use a byte that corresponds to the value for humidity. However, if you want to send a decimal number with two decimal places, 1 byte is no longer sufficient. 2 bytes must be used. + +Imagine we measure 85.42%. A simple approach would be to take the measurement and multiply it by 100. Now we have a value of 85.42 * 100 = 8542. We can encode 8542 in two bytes, send them to TTN, and decode these two bytes to get 8542. This number can then be divided by 100 to get the value of 85.42%. That's basically how it works. + +### Example + +__Blockly__: +On the Arduino side, the [lora-serialization](https://github.com/thesolarnomad/lora-serialization) library is used. The documentation shows a [function](https://github.com/thesolarnomad/lora-serialization#unsigned-16bit-integer-2-bytes) to send a value with 16 bits. This function can be used to send the values for humidity. The value for humidity ranges between 0 and 100%, so the following blocks can be used to send it: + +![](/img/blockly-bilder/lora/blockly-lora-humidity.svg) + +The measured value is multiplied by 100 to retain the two decimal places. + +Since the value for the temperature can also fall into the negative range, the value must first be converted to a positive value and then multiplied by a factor to retain the decimal places. + +![](/img/blockly-bilder/lora/blockly-lora-temperatur.svg) + +In this example, a temperature sensor is used that has measured values from -18 degrees Celsius and outputs the temperature with an accuracy of 0.0013 degrees Celsius. + +__TTN__: +In the TTN Console, two different values from the senseBox now arrive. These values must now be decoded from bytes back to the original values using a decoder. You can define the decoder under Payloads: + +![](/img/blockly-bilder/lora/blockly-lora-13.png) + + +```cpp +/** + * Convert the array of bytes to an unsigned integer, LSB. + * + * BEWARE: This is only safe up to 0x1FFFFFFFFFFFFF, so: 6 bytes. + */ +function uint(bytes) { + + return bytes.reduceRight(function(acc, b) { + // We expect an unsigned value, so to support more than 3 bytes + // don't use any bitwise operators, which would always yield a + // signed 32 bits integer instead. + return acc * 0x100 + b; + }, 0); +} +``` + +Here you can now define the decoder: + +```cpp +function Decoder(bytes) { + + var i = 0; + var decoded = {}; + // The index in the bytes array that needs to be handled next; + // use along with "i++" which returns the current value, and + // then increments it for the next usage + + + // Relative humidity with 0.01 precision, 0.00 through 100.00, LSB + var humidity = uint(bytes.slice(i, i+=2)) / 100; + // Temperature with 0.0013 precision, -18.000 through 67.000, LSB + var temperature = uint(bytes.slice(i, i+=2)) / 771 - 18; + // Unary plus operator to cast string result of toFixed to number + temperature = +temperature.toFixed(3); + + decoded['TEMPERATURE_SENSOR_ID'] = temperature + decoded['HUMIDITY_SENSOR_ID'] = humidity + + return decoded; +} +``` + +The function takes the first two bytes and converts them to the humidity measurement value. The next two bytes are converted to a temperature measurement value. If you use openSenseMap as an endpoint (`https://ttn.opensensemap.org/v1.1`) in the TTN HTTP integration, the measurement values will be linked with your sensor IDs and displayed on openSenseMap. Learn more about the openSenseMap TTN integration [here](https://sensebox.github.io/books-v2/osem/ttn_integration.html). + +### Important Points +Some important points to note: + +→ The decoding fails / returns incorrect values if you do not send everything that needs to be decoded. For example, if the decoder expects both humidity and temperature values, but the senseBox only sends a humidity value, you will not get correct values. + +→ When sending values larger than 3 bytes, it is a bit different. Values for illuminance can be larger than a 2-byte integer at maximum. Therefore, 3 bytes are needed. You can send it as follows: + +![](/img/blockly-bilder/lora/blockly-lora-illuminance.svg) + + +and decode as follows: +```cpp +var lux = bytes[i] | bytes[i+1]<<8 | bytes[i+2]<<16; +i = i + 3 // increment counter afterwards +``` + + +## Cayenne LPP +![](/img/blockly-bilder/lora/blockly-lora-5.svg) + +![](/img/blockly-bilder/lora/blockly-lora-6.svg) + +![](/img/blockly-bilder/lora/blockly-lora-7.svg) + +![](/img/blockly-bilder/lora/blockly-lora-8.svg) + +![](/img/blockly-bilder/lora/blockly-lora-9.svg) + +![](/img/blockly-bilder/lora/blockly-lora-10.svg) + +![](/img/blockly-bilder/lora/blockly-lora-11.svg) + +![](/img/blockly-bilder/lora/blockly-lora-12.svg) + +The [Cayenne Low Power Payload Format](https://community.mydevices.com/t/cayenne-lpp-2-0/7510) offers an easy way to send data over the LoRaWAN network. The data can be directly decoded back into a readable format using an existing decoder. Different blocks are available for different measurements to ensure that all decimal places are transmitted correctly. + +![](/img/blockly-bilder/lora/blockly-lora-14.png) + + + + + + + + + +In the TTN Console, you can select the decoder under __Payload__. Choose Cayenne LPP, and the values will be automatically decoded. + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/opensensemap.mdx b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/opensensemap.mdx new file mode 100644 index 0000000..2ef79b1 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/opensensemap.mdx @@ -0,0 +1,34 @@ +--- +sidebar_position: 3 +title: openSenseMap +hide_title: false +--- + +# Web - openSenseMap + +## openSenseMap + +The [openSenseMap](https://www.opensensemap.org) is an open data portal for environmental data. To send measurements to it, you first need to create a new senseBox. Then, you will be shown a Box ID and Sensor IDs for each specified sensor. More information can be found in the openSenseMap section. + +To send measurements to openSenseMap, you must first connect your box to it. Use the `Connect to openSenseMap` block. + +![](/img/en/blockly-bilder/web-opensensemap/blockly-Web-oSeM-1.svg) + +In the first dropdown menu of the block, you can select whether your senseBox should send data to the traditional openSenseMap or to workshop.openSenseMap. + +> **opensensemap.org:** senseBoxes created for long-term measurements. +> +> **workshop.opensensemap.org:** senseBoxes created for short-term experiments or testing. + +In the second dropdown menu of the block, you select whether your senseBox is a stationary or a mobile station, and in the text field "senseBox ID," you enter the senseBox ID displayed after registration. +In the free block section `Sensors`, the connected sensors must then be linked using the `Send measurement to openSenseMap` block. + +![](/img/en/blockly-bilder/web-opensensemap/blockly-Web-oSeM-2.svg) + +In this block, the "Sensor ID" displayed after registration is added and linked to the corresponding sensor in the free block section. +:::warning Caution +Sensor IDs are specific to each sensor. It is important to ensure that the correct ID is assigned to the correct sensor/measurement. +::: + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/telegram.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/telegram.md new file mode 100644 index 0000000..353a3b2 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/telegram.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 4 +title: Telegram +hide_title: false +--- +# Telegram + +## Telegram +Mit [Telegram](https://www.telegram.org) kannst du einen Chatbot bauen, der dir hilft, deine senseBox von überall per Textnachricht auszulesen. + +> Telegram ist ein kostenloser Messenger, der die Möglichkeit bietet, auf einfachste Art Chatbots anzulegen. Um diesen nutzen zu können, benötigst du einen Telegram-Account. Bei der Erstellung deines Chatbots wird dir dann ein Token angezeigt, welches du in Blockly verwenden kannst, um dich zu authentifizieren. Mehr zur Erstellung eines Chatbots findest du im Projekt [Telegram Chatbot für die senseBox mit Blockly](https://sensebox.de/projects/de/2019-12-15-telegram-blockly). + +Mit dem `Telegram Bot initialisieren`-Block wird im Setup() die senseBox darauf vorbereitet, Daten auf Anfrage an den Chatbot zu senden. Im Textfeld "Token" musst du den beim Erstellen deines Chatbots angezeigten Token eintragen. + +![](/img/blockly-bilder/web-telegram/blockly-Web-Telegram-1.svg) + +Anschließend kann mit dem Block `Telegram mache` in der Endlosschleife() programmiert werden, was genau der Chatbot ausführen soll. + +![](/img/blockly-bilder/web-telegram/blockly-Web-Telegram-2.svg) + +Die Blöcke `Bei Nachricht` und `Sende Nachricht` können im freien Blockabschnitt des `Telegam mache`-Blocks platziert werden, um festzulegen, was die senseBox beim Empfang einer bestimmten Nachricht ausführen soll. + +![](/img/blockly-bilder/web-telegram/blockly-Web-Telegram-3.svg) ![](/img/blockly-bilder/web-telegram/blockly-Web-Telegram-4.svg) + + + +Mit dem `Bei Nachricht`-Block kann eine Aktion festgelegt werden, die die senseBox ausführen soll, wenn eine bestimmte Nachricht über Telegram eintrifft. Zum Beispiel eine LED an- oder ausschalten. + +Mit dem `Sende Nachricht`-Block kann eine Nachricht über Telegram an die/den Nutzer:in des Bots gesendet werden. + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/webserver.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/webserver.md new file mode 100644 index 0000000..7143901 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/webserver.md @@ -0,0 +1,33 @@ +--- +sidebar_position: 5 +title: Webserver +hide_title: false +--- + +# Webserver + +## Webserver + +Mit diesen Blöcken kann die senseBox als Webserver eingesetzt werden: + +______________________________________________________________________________ +| Block | Funktion | +| ---- | ----- | +|![](/img/blockly-bilder/web-server/blockly-Web-Web-1.svg)| Verwende diesen Block im Setup() um den HTTP-Server zu initialisieren. Über das Feld Port kannst du einstellen, über welchen Port der Server im Browser erreichbar sein soll. Standardmäßig ist hier Port 80 eingetragen.| +|![](/img/blockly-bilder/web-server/blockly-Web-Web-2.svg)|Dieser Block wird in der Endlosschleife verbunden. In den freien Blockabschnitt fügst du die Blöcke ein, die ausgeführt werden sollen, wenn ein Client (z.B. ein/e Nutzer:in über den Browser) auf den Server zugreift.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-3.svg)| Dieser Block gibt dir die IP-Adresse deiner senseBox im Netzwerk zurück.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-4.svg)|Dieser Block gibt dir die Methode zurück.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-5.svg)| Dieser Block gibt dir die URI zurück.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-6.svg)|Dieser Block gibt dir die HTTP Version zurück.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-7.svg)|Mit diesem Block kannst du eine HTTP Antwort an den Client senden, wenn dieser auf den Server zugreift. Die Antwort ist der HTML Code, der aus verschiedenen Blöcken zusammengebaut werden kann.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-8.svg)|Mit diesem Block kannst du eine HTTP Antwort an den Client senden, wenn dieser auf den Server zugreift. Die Antwort ist der HTML Code, der aus verschiedenen Blöcken zusammengebaut werden kann.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-9.svg)|Dieser Block kann als mögliche HTTP Antwort gesendet werden, wenn eine fehlerhafte Seite aufgerufen wird.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-10.svg)|Dies ist der Grundbaustein für den HTML Code. An den Body hängst du deinen HTML Code, der den Aufbau der Website beschreibt.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-11.svg)|Mit den Tags kannst du deine HTML-Seite direkt über Blockly aufbauen.| +| ![](/img/blockly-bilder/web-server/blockly-Web-Web-2.svg)|Diesen Block kannst du an den Grundbaustein für den HTML Code anhängen und eine .html Datei von der SD-Karte laden.| +______________________________________________________________________________ + + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) + + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/wifi.mdx b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/wifi.mdx new file mode 100644 index 0000000..2b2333a --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/web/wifi.mdx @@ -0,0 +1,18 @@ +--- +title: WiFi +--- + +## General + +In Blockly, you have various options for implementing projects that work with the internet. For all of them, you must first connect your senseBox to the internet. + +## WiFi + +With the `Connect to WiFi` block, you can connect your senseBox to a WiFi network in the Setup(). Enter the network name under SSID and the WiFi password under Password. + +![Image Description](/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-1.svg) + +With the `Initialize WiFi Access Point` block, your senseBox can create a WiFi network that you can join with other devices. In the SSID text field, you can set the name of your network. + +![Image Description](/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-2.svg) + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/zeit.md b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/zeit.md new file mode 100644 index 0000000..d617dcb --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/editors/blockly/blocks/zeit.md @@ -0,0 +1,38 @@ +--- +sidebar_position: 13 +title: Time +hide_title: false +--- + +# Time + +## Interrupt Program Code + + +![](/img/en/blockly-bilder/zeit/blockly-zeit-1.svg) + +![](/img/en/blockly-bilder/zeit/blockly-zeit-2.svg) + + +## Elapsed Time +With the `Elapsed Time` blocks, you can display the time your program has been running. The runtime is given in milliseconds or microseconds. + +![](/img/en/blockly-bilder/zeit/blockly-zeit-3.svg) + +![](/img/en/blockly-bilder/zeit/blockly-zeit-4.svg) + + +## Wait Forever +With the `Wait Forever` block, you can stop your program. + +![](/img/en/blockly-bilder/zeit/blockly-zeit-5.svg) + + +## Interval +With the `Interval` block, you can set how often your measurements are transmitted. By default (without the Measurement Interval block), the measurements are transmitted every second. + +![](/img/en/blockly-bilder/zeit/blockly-zeit-6.svg) + + +- [Blockly.senseBox.de](https://blockly.sensebox.de/) + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/display.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/display.mdx new file mode 100644 index 0000000..afdd845 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/display.mdx @@ -0,0 +1,96 @@ +--- +sidebar_position: 1 +title: OLED Display +hide_title: false +description: senseBox OLED Display +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import display from '@site/static/img/hardware-bilder/oled/display.png' +import TutorialPorts_en from '@site/src/components/TutorialPorts/TutorialPorts_en' + +# OLED Display + +With the senseBox OLED display, you can display measurements, status messages, and much more on 128x64 pixels. + + + +## Technical Information + +- "Plug-in-and-Go" senseBox compatible through breakout board with JST connector +- Dimensions: 24mm x 25mm x 19mm +- Resolution of 128x64 pixels +- Panel size: 26.70x19.26x1.45 (mm) + +## Connection + + + +## Programming (Arduino) + +### Software Library + +To program the sensor in Arduino, you need to install the software libraries [Adafruit GFX Library](https://www.arduino.cc/reference/en/libraries/adafruit-gfx-library/) **and** [Adafruit SSD1306](https://www.arduino.cc/reference/en/libraries/adafruit-ssd1306/). + +### Code + +This sketch displays "Hello World!" on the display. + +```cpp +#include +#include +#include // http://librarymanager/All#Adafruit_GFX_Library +#include // http://librarymanager/All#Adafruit_SSD1306 + + +#define SCREEN_WIDTH 128 +#define SCREEN_HEIGHT 64 +#define OLED_RESET -1 + +Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); + +void setup() { + display.begin(SSD1306_SWITCHCAPVCC, 0x3D); + display.display(); + delay(100); + display.clearDisplay(); +} + + +void loop() { + display.setCursor(0,0); + display.setTextSize(1); + display.setTextColor(WHITE,BLACK); + display.println("Hallo Welt!"); + display.display(); +} +``` + +## Programming (Blockly) + +To display information on the screen, it must first be initialized in the `Arduino run first`. +Then, in the `Arduino loop forever`, the `Print on Display` loop and the `Clear Display` block can be placed. +In the free section of the `Print on Display` block, it can then be specified what exactly should be displayed. +The `Clear Display` block must be added so that different information is not written on top of each other. + +![Text/Zahl anzeigen](/img/en/blockly-bilder/display/blockly-display-1.svg) + +### Display Text/Number + +To display text or a number, drag the `Display Text/Number` block into the free section of the `Print on Display` block. + +![Text/Zahl anzeigen](/img/en/blockly-bilder/display/blockly-display-2.svg) + +The `Write Text/Number` block has five settings: + +- **Font color:** Here you can choose whether you want to write with white text on a black background or with black text on a white background. +- **Font size:** Here you can set the size of your text or number. In font size 1, a character is 8 pixels high, in font size 2, it is already 16 pixels. +- **x-coordinate:** Here you set the x-coordinate (see figure above) where you want to start writing. +- **y-coordinate:** Here you set the y-coordinate (see figure above) where you want to start writing. +- **Value:** The respective text, number, or measured value can be attached to this free block section. + +![Text/Zahl anzeigen](/img/en/blockly-bilder/display/blockly-display-3.svg) + +## Projects + +- #### [IoT Messstation](https://sensebox.de/projects/de/2024-01-10-iotmesstation_s2) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/expander.md b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/expander.md new file mode 100644 index 0000000..34f4825 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/expander.md @@ -0,0 +1,16 @@ +--- +sidebar_position: 2 +title: Expander +hide_title: false +description: senseBox Expander +--- +# Expander + +The sensor hub is an extension to connect more sensors to the senseBox. Four additional ports are available for connecting JST cables. + +![](/img/hardware-bilder/expander/hub_bottom.png) + +## Technical Information + +* "Plug-in-and-Go" senseBox compatible through breakout board with JST connector +* 4x JST connector diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/gps.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/gps.mdx new file mode 100644 index 0000000..0a2d72c --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/gps.mdx @@ -0,0 +1,91 @@ +--- +sidebar_position: 4 +title: GPS +hide_title: false +description: GPS u-blox CAM-M8Q Multi GNSS Modul +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import gps from '@site/static/img/hardware-bilder/gps/gps.png' +import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' + +# GPS + +The GPS module receives the position (longitude/latitude/altitude) of the senseBox. +This can be used for mobile applications, e.g., mobile data transmission to the openSenseMap. +This sensor is compatible with common GNSS systems (GPS, QZSS, GLONASS, BeiDou, Galileo) and is based on the u-blox CAM-M8Q Multi GNSS module. + + + + +The GPS sensor is connected to an I2C port. + +## Technical Details + +- "Plug-in-and-Go" senseBox compatible through breakout board with JST connector +- Simultaneous reception of GPS, QZSS, GLONASS, BeiDou +- Navigation sensitivity of –167 dBm +- Receiver: 72-channel u-blox M8 +- Update rate: Single GNSS - up to 18Hz, Dual GNSS up to 10Hz +- Power consumption: 30mA in continuous operation or 10mA power save mode 1Hz at 3V + +## Connection + + + +## Programming (Arduino) + +### Software Library + +To program the sensor in Arduino, you need to install the software library [SparkFun u-blox GNSS Arduino Library](https://www.arduino.cc/reference/en/libraries/sparkfun-u-blox-gnss-arduino-library/). + +### Code + +This code stores the values for latitude and longitude in the variables `latitude` and `longitude`. + +```cpp +#include +#include // http://librarymanager/All#SparkFun_u-blox_GNSS_Arduino_Library +#include + +SFE_UBLOX_GNSS myGNSS; +float latitude; +float longitude; +void setup() { + Wire.begin(); + + if (myGNSS.begin() == false) //Connect to the Ublox module using Wire port + { + Serial.println(F("Ublox GPS not detected at default I2C address. Please check wiring. Freezing.")); + while (1); + } + + myGNSS.setI2COutput(COM_TYPE_UBX); //Set the I2C port to output UBX only (turn off NMEA noise) + myGNSS.saveConfiguration(); //Save the current settings to flash and BBR +} + +void loop() { + latitude = myGNSS.getLatitude(); + longitude = myGNSS.getLongitude(); + +} +``` + +## Programming (Blockly) + +In Blockly, the sensor can be read using the following block: + +![](/img/en/hardware-bilder/gps/block_gps.svg) + +In the block, you can select between the different parameters of the GPS module: + +- Longitude +- Latitude +- Altitude +- Timestamp (RFC3339) +- Speed +- Date +- Time + +> - [Shop](https://sensebox.kaufen/product/gps) +> - [CAM M8Q](https://sensebox.kaufen/assets/datenblatt/senseBox-CAM-M8Q_v20.pdf) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/led-matrix.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/led-matrix.mdx new file mode 100644 index 0000000..432ea14 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/led-matrix.mdx @@ -0,0 +1,37 @@ +--- +title: LED-Matrix +description: Visualize data or create animations with the versatile LED matrix. +categories: accessories +--- + +import ledMatrix from '@site/static/img/hardware-bilder/led-matrix/led-matrix.png' +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import TutorialPorts_en from '@site/src/components/TutorialPorts/TutorialPorts_en' + +# LED-Matrix + +{' '} + +## Technical Information + +- 12x8 Matrix +- 96 LEDs + +## Connection + + + +## Programming (Blockly) +In Blockly the LED matrix must first be initialized. +There you have to specify the port to which you have connected the LED matrix. +After that you can display text for example. + +![Blockly](/img/en/hardware-bilder/led-matrix/led-matrix-block.svg) + +## Projects + +- #### [Displaying Emojis and Patterns](https://sensebox.de/projects/de/2024-04-02-smiley) +- #### [Displaying Depth Images on the LED Matrix](https://sensebox.de/projects/de/2024-04-02-tof-led) +- #### [Animated Name Tag](https://sensebox.de/projects/de/2024-04-02-namensschild) +- #### [CO2 Traffic Light with Python](https://sensebox.de/projects/de/2024-04-02-circuitpython-co2-ampel) +- #### [Surveillance Camera](https://sensebox.de/projects/de/2024-04-02-%C3%BCberwachungskamera) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/multiplexer.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/multiplexer.mdx new file mode 100644 index 0000000..c84a621 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/multiplexer.mdx @@ -0,0 +1,83 @@ +--- +sidebar_position: 3 +title: I2C-Multiplexer +description: senseBox I2C-Multiplexer +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import multiplexer from '@site/static/img/hardware-bilder/multiplexer/hub_bottom.png' +import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' + +# I2C-Multiplexer +With a senseBox I2C multiplexer, up to eight devices with the same addressing can be operated in parallel via the I2C bus. +This allows, for example, multiple identical temperature sensors to be connected. + + + +## Technical Information + +- "Plug-in-and-Go" senseBox compatible via breakout board with JST connector +- 8x JST connectors + +## Anschluss + + + +## Utilisation +The senseBox I2C multiplexer is based on the [TCA9548A from Texas Instruments](http://www.ti.com/product/TCA9548A), which has already become part of many community tutorials. + +For the implementation of the following example, we first include the required libraries. `Wire.h` for the I2C functionality and `Adafruit_HDC1000.h` for the sensor functions. + +```cpp +#include +#include // http://librarymanager/All#Adafruit_HDC1000_Library + +``` + +Now we define the address of the multiplexer and a list of channels to which the sensors are connected. + +```cpp +byte multiplexAddress = 0x77; +byte channels[] = {0,1,2}; +``` + +We create an object for the sensor and start its instance behind the serial connection in the setup function. + +```cpp +Adafruit_HDC1000 hdc = Adafruit_HDC1000(); + +void setup() { + Serial.begin(115200); + hdc.begin(); +} +``` + +In the infinite loop, the channels are continuously switched using a for loop. For each channel, the multiplexer is addressed via its address. +Then we simply pass the number of the channel to which all subsequent commands are sent. +This continues until a new channel is communicated. + +```cpp +for (int i = 0; i < (sizeof(channels)/sizeof(channels[0])); i++){ + Wire.beginTransmission(multiplexAddress); + Wire.write(1 << channels[i]); + Wire.endTransmission(); + + Serial.print(channels[i]); + Serial.print(F(". channel temperature: ")); + Serial.println(hdc.readTemperature()); +} +``` + +Now the sensors can be read individually. Minimal deviations can be detected among the identical sensors: + +```cpp +0. channel temperature: 21.96 +1. channel temperature: 22.09 +2. channel temperature: 22.14 +``` + +Equivalently, each I2C device can be used multiple times with the multiplexer. If more than eight devices with the same identifier are to be operated in parallel, the addressing of the multiplexer can be adjusted based on the three solder points on its back and the following table from its [datasheet](http://www.ti.com/lit/ds/symlink/tca9548a.pdf): + +![](/img/hardware-bilder/multiplexer/datasheet_table.png) + +Highlighted in the table is the default setting with the address 0x77. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/rgb-led-esp32.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/rgb-led-esp32.mdx new file mode 100644 index 0000000..e6cff6d --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/rgb-led-esp32.mdx @@ -0,0 +1,49 @@ +--- +title: RGB-LED +--- + +import rgbLed from '@site/static/img/hardware-bilder/rgb-esp32/rgb-led-esp32s2.png' +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import AlertBox from '@site/src/components/AlertBox/AlertBox' + +# ESP32 RGB-LED +With the RGB-LED you can display different colors. +The RGB-LED consists of three LEDs that light up in the colors red, green and blue. +By mixing these colors, many different colors can be displayed. + +{' '} + +:::success Module onBoard +The RGB-LED is built on the MCU S2! +You don't have to connect anything else here. +::: + +## Programming (Arduino) +This sketch lets the RGB-LED light up in a random color every second. + +```cpp +#include +Adafruit_NeoPixel rgb_led_1 + +void setup() { + rgb_led_1.begin(); + rgb_led_1.setBrightness(30); +} + +void loop() { + if (time_startInterval > time_actualInterval + intervalInterval) + { + time_actualInterval = millis(); + rgb_led_1.setPixelColor(0,rgb_led_1.Color(random(0, 255), random(0, 255), random(0, 255))); + rgb_led_1.show(); + } +} +``` + +## Programming (Blockly) + +In Blockly, the sensor can be read using the following block: + +## Projects + +### [RGB-LED Fader](https://sensebox.de/projects/de/2024-01-10-rgb-led_s2) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/rgb-led.md b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/rgb-led.md new file mode 100644 index 0000000..a9a010c --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/rgb-led.md @@ -0,0 +1,21 @@ +--- +sidebar_position: 4 +title: RGB-LED +hide_title: false +description: RGB-LED +--- +# RGB-LED + +![](/img/hardware-bilder/rgb/rgb_modul.jpeg) + +On the board is a WS2812 multi-color RGB LED. On the back are two JST sockets for input and output. The input is connected to a digital port on the senseBox MCU. Additional, identical RGB-LED modules can be connected via the output to create a light chain. + +The chainable RGB LED can be programmed with [Blockly](/blockly/blockly-led/). + + +## Technical Specifications + +- WS2812 RGB-LED +- JST input and output for creating RGB chains + +- [Shop](https://sensebox.kaufen/product/verkettbare-rgb-led) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/rtc-modul.md b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/rtc-modul.md new file mode 100644 index 0000000..7243ac8 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/accessoires/rtc-modul.md @@ -0,0 +1,125 @@ +--- +sidebar_position: 5 +title: RTC-Modul +hide_title: false +description: Mit dem RTC-Modul kann die Uhrzeit auch ohne Stromversorgung gespeichert werden. +--- +# RTC-Modul + +The RTC module allows you to save the time even without a power supply. This can be particularly useful if no internet connection is available and measured values are to be saved offline, e.g. on the SD card. A button cell battery is also required so that the time can also be saved without a power supply. + +![](/img/hardware-bilder/rtc/rtc.png) + + +## Connection +After inserting the button cell battery has been inserted into the holder, the RTC module is connected to an I2C port on the senseBox + +## Setting the time + +Before you use the RTC module, you must first set the initial time. This only needs to be done once, provided the battery is not disconnected from the module. In the following sketch, the time and date are set in the `setup` and output on the serial monitor in the `loop`. Remember to set the current time in the `setup` with the command `rtc.set(...)`. + +```c++ +#include +//#inlcude only use with blockly code and commend out senseBoxIO.h +#include +#include +#define BUFF_MAX 32 + +RV8523 rtc; +unsigned int recv_size = 0; +char recv[BUFF_MAX]; + +void setup() { + // put your setup code here, to run once: + Serial.begin(9600); + delay(200); + + Serial.println("Init RTC..."); + rtc.begin(); + rtc.start(); + rtc.set24HourMode(); + rtc.set(SECOND, MINUTE, HOUR, DAY, MONTH, YEAR); // Aktuelle Uhrzeit / Datum HIER setzen! + rtc.batterySwitchOver(1); +} + + +void loop() +{ + uint8_t sec, min, hour, day, month; + uint16_t year; + + //Uhrzeit befindet sich in den einzelnen Variablen ! + rtc.get(&sec, &min, &hour, &day, &month, &year); + + //serial output + Serial.print("\nTime: "); + Serial.print(hour, DEC); + Serial.print(":"); + Serial.print(min, DEC); + Serial.print(":"); + Serial.print(sec, DEC); + + Serial.print("\nDate: "); + Serial.print(day, DEC); + Serial.print("."); + Serial.print(month, DEC); + Serial.print("."); + Serial.print(year, DEC); + + //wait a second + delay(1000); +} +``` + +## Reading the time + +If the time is set and the RTC clock is counting the seconds, it can now be read in any sketch. You start the RTC clock like all other I2C sensors. Just make sure that you do not accidentally call the `rtc.set()` command again and thus reset the time. + +```c++ +#include +//#inlcude only use with blockly code and commend out senseBoxIO.h +#include +#include +#define BUFF_MAX 32 + +RV8523 rtc; +unsigned int recv_size = 0; +char recv[BUFF_MAX]; + +void setup() { + // put your setup code here, to run once: + Serial.begin(9600); + + Serial.println("Init RTC..."); + delay(200); + rtc.begin(); + rtc.start(); + rtc.batterySwitchOver(1); + +} +void loop() +{ + uint8_t sec, min, hour, day, month; + uint16_t year; + + //The time is stored in the individual variables! + rtc.get(&sec, &min, &hour, &day, &month, &year); + + //serial output + Serial.print("\nTime: "); + Serial.print(hour, DEC); + Serial.print(":"); + Serial.print(min, DEC); + Serial.print(":"); + Serial.print(sec, DEC); + + Serial.print("\nDate: "); + Serial.print(day, DEC); + Serial.print("."); + Serial.print(month, DEC); + Serial.print("."); + Serial.print(year, DEC); + //wait a second + delay(1000); +} +``` diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/bluetooth-bee.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/bluetooth-bee.mdx new file mode 100644 index 0000000..808d0db --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/bluetooth-bee.mdx @@ -0,0 +1,54 @@ +--- +type: Document +date: 2022-02-05T11:39:22.892Z +title: Bluetooth-Bee +description: Extend your project with Bluetooth/BLE functionality! +categories: hardware +resources: + - name: Shop + link: https://sensebox.kaufen/product/bluetooth-bee + - name: "Datenblatt ublox NINA - B3 " + link: https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_UBX-17052099.pdf + - name: Phyphox App + link: https://phyphox.org/ + - name: Programmbeispiel + link: https://blockly-react.netlify.app/gallery/60ae27f41842740018c65b07 +--- + +import bleBee from "@site/static/img/hardware-bilder/bees/bluetooth-bee/ble-bee.png" +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText" + +# Bluetooth-Bee + +With this certified module, Bluetooth or BLE functionalities can be utilized on the senseBox MCU S2. This allows sensor data to be transmitted wirelessly over short distances to a receiver, such as a smartphone, and visualized. + + + + +## Technical Information + +* senseBox compatible Xbee format +* based on u-blox NINA-B3 BLE +* Integrated antenna +* easy communication via UART +* Designation: BLE-Bee + +## Programming + +The Bluetooth-Bee can be programmed using our graphical learning and programming environment. + + +![](/img/en/hardware-bilder/bees/bluetooth-bee/phyphoxco2-messgerät.svg) + +You can retrieve the example program [here](https://blockly-react.netlify.app/gallery/60ae27f41842740018c65b07). To display the measured values on your smartphone or tablet, you will also need the [Phyphox App](https://phyphox.org/), which is available for iOS and Android devices. + +## Projects + +* #### [Analysis of Throwing Motions](https://sensebox.de/projects/de/2024-01-10-wurfbewegung-phyphox_s2) + +## Extras + +> - [Shop](https://sensebox.kaufen/product/bluetooth-bee) +> - [Datasheet ublox NINA - B3](https://www.u-blox.com/sites/default/files/NINA-B3_DataSheet_UBX-17052099.pdf) +> - [Phyphox App](https://phyphox.org/) +> - [Example Program](https://blockly-react.netlify.app/gallery/60ae27f41842740018c65b07) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/ethernet-bee.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/ethernet-bee.mdx new file mode 100644 index 0000000..bafb4fa --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/ethernet-bee.mdx @@ -0,0 +1,74 @@ +--- +date: 2020-03-11 +title: Ethernet-Bee +categories: hardware +description: With the Ethernet-Bee, you can connect the senseBox to the internet and transmit measurement data. +type: Document +resources: + - name: "Shop" + link: https://sensebox.kaufen/product/lan-bee + - name: WIZnet W5500 Data Sheet + link: http://wizwiki.net/wiki/lib/exe/fetch.php/products:w5500:w5500_ds_v109e.pdf + +image1: /images/2020-03-11-bee-lan/lan_bee.png +--- + +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText" +import ethernetBee from "@site/static/img/hardware-bilder/bees/ethernet-bee/lan_bee.png" + + + +# Ethernet-Bee + +The Ethernet-Bee is a connector to connect the senseBox to the internet via cable. +The LAN-Bee is based on the W5500 microchip from Wiznet, which enables a high data transfer rate. + + + + + + +## Technical Information + +* "Plug-in-and-Go" senseBox compatible +* 3.3V operating voltage with 5V I/O signal tolerance +* Dimensions: 46mm x 25mm x 12mm +* Weight: 9.2 g + + +## Programming (Arduino) + +```cpp +#include +#include +#include + +void setup() +{ + // Initializes the serial monitor + Serial.begin(9600); + // Restarts W5500 (LAN-Bee) in XBEE1 socket + senseBoxIO.powerXB1(false); + delay(250); + senseBoxIO.powerXB1(true); + Ethernet.init(PIN_XB1_CS); +} + +void loop() +{ + // Outputs the IP address of the senseBox + ip = Ethernet.localIP(); + Serial.print("IP: "); + Serial.println(ip); + delay(5000); +} +``` + +## Notes and Tips + +The LAN-Bee is delivered without a LAN cable. For permanent outdoor installation, flat LAN cables are particularly suitable, as they can be easily laid through windows and doors to the outside. Especially in combination with Power over Ethernet (PoE), the senseBox can then be easily operated. + + + +> - [Shop](https://sensebox.kaufen/product/lan-bee) +> - [WIZnet W5500 Data Sheet](http://wizwiki.net/wiki/lib/exe/fetch.php/products:w5500:w5500_ds_v109e.pdf) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/lora-bee.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/lora-bee.mdx new file mode 100644 index 0000000..07780c0 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/lora-bee.mdx @@ -0,0 +1,59 @@ +--- +date: 2020-03-11 +title: LoRa-Bee +categories: hardware +description: With the LoRa-Bee, data from the senseBox can be transmitted to the Internet with low power consumption +type: Document +resources: + - name: 'Shop' + link: https://sensebox.kaufen/product/lora-bee + - name: HopeRF RFM9xW Datenblatt + link: https://www.hoperf.com/modules/lora/RFM95.html + +image1: /images/2020-03-11-bee-lora/LoraBee_Bottom.png +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import LoRaBee from '@site/static/img/hardware-bilder/bees/lora-bee/LoraBee_Bottom.png' + +# LoRa-Bee + +It is possible to upload sensor data to the openSenseMap via [LoRaWAN™](https://de.wikipedia.org/wiki/Long_Range_Wide_Area_Network) +through [TheThingsNetwork](https://thethingsnetwork.org)(TTN). + +LoRa is an increasingly widespread wireless standard which, like WiFi, allows digital data transmission in an IP network, but offers significantly different features. TheThingsNetwork offers very good coverage in Germany compared to other countries, with ~2000 gateways. + + + +:::warning +Please check the LoRa availability in your region before you purchase a LoRa-Bee for your senseBox. +This is possible on the [map](https://www.thethingsnetwork.org/community#list-communities-map) of the TTN. +::: + +## Technical Information + +- HopeRF RFM95W/RFM96W LoRa Transceiver +- LoRa-Bee 868/915 MHz uses RFM95W (SX1276 compatible) +- LoRa-Bee 433/470 MHz uses RFM96W (SX1276 compatible) +- SPI interface +- Designation: RFN9xW +- Dimensions: 46mm x 25mm x 12mm +- Weight: 1.1 g + +## Usage + +A detailed tutorial on how to use the LoRa Bee in conjunction with the senseBoxMCU and [TheThingsNetwork](https://thethingsnetwork.org) can be found [here](/products/home/erweiterungen/home-erweiterung-LoRa). + +The Blockly tutorial for using LoRa can be found [here](/docs/editors/blockly/blocks/lora). + +## Projects + +- #### [TTN v3 with the senseBox](https://sensebox.de/projects/de/2021-02-19-ttnv3) +- #### [LoRaWAN and the Cayenne Payload](https://sensebox.de/projects/de/2020-08-15-lorawan-cayenne) +- #### [TTN Mapper in under 10 minutes](https://sensebox.de/projects/de/2020-03-06-ttn-mapper) +- #### [TTN Decoding for Beginners](https://sensebox.de/projects/de/2020-01-21-ttn-decoding-de) +- #### [Mobile Data Logger for Particulate Matter (LoRa)](https://sensebox.de/projects/de/2019-05-06-mobilerfeinstaubloggerlora) +- #### [LoRaWAN IoT Weather Station](https://sensebox.de/projects/de/2019-05-10-lora-osem-tago) + +> - [Shop](https://sensebox.kaufen/product/lora-bee) +> - [HopeRF RFM9xW Datasheet](https://www.hoperf.com/modules/lora/RFM95.html) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/sd-bee.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/sd-bee.mdx new file mode 100644 index 0000000..9324095 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/sd-bee.mdx @@ -0,0 +1,92 @@ +--- +date: 2020-03-11 +title: SD-Bee +categories: hardware +description: With the SD-Bee, the measurement data of your senseBox is stored on an SD card. +type: Document +resources: + - name: "Shop" + link: https://sensebox.kaufen/product/sd-bee + - name: WIZnet W5500 Data Sheet + link: http://wizwiki.net/wiki/lib/exe/fetch.php/products:w5500:w5500_ds_v109e.pdf +image1: /images/2020-03-11-bee-sd/msd.png +--- + + +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText" +import sdBee from '@site/static/img/hardware-bilder/bees/sd-bee/msd.png' + +# SD-Bee + +With the microSD-Bee, the data of the senseBox can be stored on an SD card. + + + + +# Technical Information +* "Plug-in-and-Go" senseBox compatible +* Port for miniSD card +* Designation: mSD-Bee +* Dimensions: 24mm x 21mm x 9mm +* Weight: 2.4 g + +Make sure that the mSD-Bee is connected to the XBEE2 connector of the senseBox-MCU, otherwise there may be problems saving your measurement data. + +## Programming (Arduino) +In the following example, we show you how the string `Hello World!` is saved on the SD card in a file named `senseBox.txt`. + +```cpp +// Include the libraries +#include +#include + +File myFile; +// Name of the file on the SD card +// Make sure that this name (without file extension) is not longer than 8 characters! +String fileName = "senseBox.txt"; + +void setup() +{ + // Starting the SD-Bee + SD.begin(28); + // Open the file on the SD card + myFile = SD.open(fileName, FILE_WRITE); + myFile.close(); + + hdc.begin(); +}; + +void loop() +{ + // Open file with write access + myFile = SD.open(fileName, FILE_WRITE); + myFile.println("Hallo Welt!"); + // After use, the file is closed again + myFile.close(); +}; +``` + +## Programming (Blockly) + +The `Create file on SD card` block can be used in the setup() to create a new file on the SD card. +The name of the file can be changed in the dropdown menu of the block. + +![](/img/en/blockly-bilder/sd-karte/blockly-sd-1.svg) + +With the `Open file on SD card` block, the previously created file can be opened in the endless loop. + +![](/img/en/blockly-bilder/sd-karte/blockly-sd-2.svg) + +In the free block section of the `Open file on SD card` block, the `Write data to SD card` block can then be placed. +In this, the text or number to be written can be placed in the free block section. +In addition, by checking the box at `Line break`, it can be determined whether a line break should be inserted after each measured value or not. + +Additionally, we get the block for an interval from the `Time` category and the desired sensor from the `Sensors` category. + +![](/img/en/blockly-bilder/sd-karte/blockly-sd-3.svg) + + + + +> - [Shop](https://sensebox.kaufen/product/sd-bee) +> - [WIZnet W5500 Data Sheet](http://wizwiki.net/wiki/lib/exe/fetch.php/products:w5500:w5500_ds_v109e.pdf) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/wifi-bee.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/wifi-bee.mdx new file mode 100644 index 0000000..cdbebaa --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/bee/wifi-bee.mdx @@ -0,0 +1,98 @@ +--- +date: 2020-03-11 +title: WiFi-Bee +categories: hardware +description: With the WiFi-Bee, the measurement data of your senseBox can be transmitted via WLAN. +type: Document +resources: + - name: "Shop" + link: https://sensebox.kaufen/product/wifi-bee + - name: Atmel ATWINC1500 Data Sheet + link: http://ww1.microchip.com/downloads/en/DeviceDoc/ATWINC15x0-MR210xB-IEEE-802.11-b-g-n-SmartConnect-IoT-Module-Data-Sheet-DS70005304C.pdf +image1: /images/2020-03-11-bee-wifi/wifi.png +image2: /images/2020-03-11-bee-wifi/1-test.png +image3: /images/2020-03-11-bee-wifi/2-result.png +image4: /images/2020-03-11-bee-wifi/3-updater.png +image5: /images/2020-03-11-bee-wifi/4-firmware-updater.png +image6: /images/2020-03-11-bee-wifi/5-test-connection.png +image7: /images/2020-03-11-bee-wifi/6-update-firmware.png +image8: /images/2020-03-11-bee-wifi/ArduinoUpdaterSelect.png +image9: /images/2020-03-11-bee-wifi/ArduinoToolsUpdater.png +image10: /images/2020-03-11-bee-wifi/WifiFirmwareTool.PNG +image11: /images/2020-03-11-bee-wifi/ingressInput.png +image12: /images/2020-03-11-bee-wifi/apiInput.png +image13: /images/2020-03-11-bee-wifi/CertificatesResults.png + +--- + +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText" +import wifiBee from '@site/static/img/hardware-bilder/bees/wifi-bee/wifi.png' + +# WiFi-Bee + +The WiFi-Bee is the connection piece to connect the senseBox to the internet. +The data from the senseBox is transmitted via WLAN (WiFi) to the existing network. +The WiFi-Bee is based on the ATWINC1500 microchip from Atmel. + + + + +:::info +Some of our WINC1500 WiFi Bees may have outdated firmware (version 19.4.4) installed. +This can lead to transmission problems. If you are experiencing these problems, take a look at !!!! to update the firmware. +::: + +## Technical Information + +* "Plug-in-and-Go" senseBox compatible +* Single-band 2.4GHz b/g/n +* Operating voltage: 3.0V to 4.2V +* Encryption protocols: WPA/WPA2 Personal, TLS, SSL +* Network services: DHCP, DNS, TCP/IP (IPv4), UDP, HTTP, HTTPS +* Designation: WINC1500 +* Dimensions: 24mm x 25mm x 9mm +* Weight: 3.5 g + +## Connection Test + +To test the connection of the Bee with the internet, i.e., both the functionality of the component and the network, use the following sketch: + +```cpp +#include +#include +#include + +void setup() +{ + // Initializes the serial monitor + Serial.begin(9600); + + // Restart WINC1500 (WiFi-Bee) in XBEE1 socket + senseBoxIO.powerXB1(false); + delay(250); + senseBoxIO.powerXB1(true); +} + +void loop() +{ + delay(5000); + // Displays installed and latest firmware version + String fv = WiFi.firmwareVersion(); + Serial.print("Firmware installed: "); + Serial.println(fv); + Serial.print("Latest firmware: "); + Serial.println(WIFI_FIRMWARE_LATEST_MODEL_B); + + // Outputs the IP address of the senseBox + IPAddress ip = WiFi.localIP(); + Serial.print("IP: "); + Serial.println(ip); + delay(5000); +} +``` + +If all outputs are displayed in the serial monitor, especially if the IP address is shown in the form _192.107.256.4_, the WiFi-Bee is correctly initialized and the senseBox can be used with the internet. + + +> - [Shop](https://sensebox.kaufen/product/wifi-bee) +> - [Atmel ATWINC1500 Data Sheet](http://ww1.microchip.com/downloads/en/DeviceDoc/ATWINC15x0-MR210xB-IEEE-802.11-b-g-n-SmartConnect-IoT-Module-Data-Sheet-DS70005304C.pdf) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sd.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sd.mdx new file mode 100644 index 0000000..2c164f0 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sd.mdx @@ -0,0 +1,92 @@ +--- +sidebar_position: 10 +title: SD card +description: Learn how to use the built-in SD card module! +categories: hardware +hide_title: false +--- + +import AlertBox from '@site/src/components/AlertBox/AlertBox' +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import sdModul from '@site/static/img/en/mcus2/sd-card-slot.png' + +# SD module + +{' '} + +With the senseBox, you can use the SD-Bee to store data on a microSD card for later analysis on the computer. + + +:::success Module onBoard +The SD module is built into the MCU S2! So you don't need to connect anything else. +::: + +## Programming (Arduino) + +In this sketch, the values from a sensor (in this case, the HDC1080) are read and stored on the SD card. We use an interval that triggers every 60 seconds. + +```cpp +#include +#include +#include "FS.h" +#include // http://librarymanager/All#Adafruit_HDC1000_Library + +const long intervalInterval = 60000; +long time_startInterval = 0; +long time_actualInterval = 0; + +File Daten; +Adafruit_HDC1000 hdc = Adafruit_HDC1000(); +SPIClass sdspi = SPIClass(); + +void setup() { + + pinMode(SD_ENABLE,OUTPUT); + digitalWrite(SD_ENABLE,LOW); + sdspi.begin(VSPI_SCLK,VSPI_MISO,VSPI_MOSI,VSPI_SS); + SD.begin(VSPI_SS,sdspi); + Daten = SD.open("/Daten.csv", FILE_WRITE); + Daten.close(); + hdc.begin(); +} + +void loop() { + time_startInterval = millis(); + if (time_startInterval > time_actualInterval + intervalInterval) + { + time_actualInterval = millis(); + Daten = SD.open("/Daten.csv", FILE_WRITE); + Daten.println(hdc.readTemperature()); + Daten.close(); + } + +} + +``` + +## Programming (Blockly) + +With the `Create file on SD card` block, a new file can be created on the SD card in the setup(). +The name of the file can be changed in the dropdown menu of the block. + +![](/img/en/blockly-bilder/sd-karte/blockly-sd-1.svg) + +With the `Open file on SD card` block, the previously created file can then be opened in the loop. + +![](/img/en/blockly-bilder/sd-karte/blockly-sd-2.svg) + +In the block section of the `Open file on SD card` block, the `Write data to SD card` block can then be placed. +In this block, the text or number to be written can be placed in the free block section. +Additionally, by checking the `Line break` checkbox, it can be specified whether a line break should be inserted after each measurement value or not. + +Additionally, we get the block for an interval from the `Time` category and the desired sensor from the `Sensors` category. +Then we put everything together and get the following sketch. + +![](/img/en/blockly-bilder/sd-karte/blockly-sd-3.svg) + +> - [Blockly.senseBox.de](https://blockly.sensebox.de/) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/bmx055.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/bmx055.mdx new file mode 100644 index 0000000..113068d --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/bmx055.mdx @@ -0,0 +1,75 @@ +--- +sidebar_position: 1 +title: Absolute Orientation Sensor +hide_title: false +description: Bosch BMX055 +--- +# Absolute Orientation Sensor + +:::warning +The BMX055 is not present on some batches of the senseBox MCU. To check if your MCU has the orientation sensor, look [here](/docs/boards/mcu/mcu-revisions). +::: +The Bosch BMX055 is already soldered onto the senseBox MCU and can be used without any additional setup. +The sensor combines an accelerometer, a gyroscope, and a precise magnetometer. + +## Technical Information + +____________________________________________________________________ +| Parameter | Technical Specifications | +| --- | --- | +| Digital Resolution | Accelerometer (A): 0.98 mg
Gyroscope (G): 0.004 °/s
Magnetometer: (M): 0.3 μT | +| Measurement Ranges (programmable) | (A): ±2g, ±4g, ±8g, ±16 g
(G):±125°/s, ±250°/s, ±500°/s, ±1000°/s, ±2000°/s
(M): ±1300μT (x,y), ±2500μT (z) | +| Sensitivity (calibrated) | (A): ±2g: 1024LSB/g, ±4g: 512LSB/g, ±8g: 256LSB/g, ±16g: 128LSB/g
(G): ±125°/s: 262.4 LSB/°/s, ±250°/s: 131.2 LSB/°/s, ±500°/s: 65.6 LSB/°/s, ±1000°/s: 32.8 LSB/°/s, ±2000°/s: 16.4 LSB/°/s
(M): 3.3 LSB/μT | + + +## Programming (Arduino) + +### Software Library +To program the sensor in Arduino, you need to install the software library [BMX 055 Arduino](https://github.com/sensebox/BMX055-Arduino-Library/). + +### Code +With this code, the values of the acceleration sensor are output in the Serial Monitor. +Alternatively, you can also display the values in the Serial Plotter. + +```cpp +#include +#include + +BMX055 bmx; + +void setup() { + // Initialize serial communication with 9600 baud + Serial.begin(9600); + + // Start the accelerometer with configuration mode 0x3 + bmx.beginAcc(0x3); +} + +void loop() { + // Read the acceleration on the X-axis + int xAcc = bmx.getAccelerationX(); + int yAcc = bmx.getAccelerationY(); + int zAcc = bmx.getAccelerationZ(); + // Output the acceleration values to the serial monitor + Serial.print("X:"); + Serial.print(xAcc); + Serial.print(",Y:"); + Serial.print(yAcc); + Serial.print(",Z:"); + Serial.println(zAcc); + // Delay to limit the read rate + delay(100); +} +``` + +You can display the results in Arduino under `Tools -> Serial Plotter` or via the terminal program of your choice. + +![](/img/hardware-bilder/mpu6050/mpu-6050-plotter.png) + + +## Programming (Blockly) + +In Blockly, the accelerometer can be read using the following block: + + +![](/img/en/hardware-bilder/absolut-gps/bmx-block.svg) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/co2.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/co2.mdx new file mode 100644 index 0000000..4c04a58 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/co2.mdx @@ -0,0 +1,177 @@ +--- +sidebar_position: 11 +title: CO2 Sensor +hide_title: false +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import CO2Sensor from '@site/static/img/hardware-bilder/co2/scd30.png' +import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' + +# CO2 Sensor + +The SCD30 is a precise CO2 sensor from the Swiss manufacturer Sensirion. +The sensor board has a JST PHR4 connector, suitable for operation with the senseBox MCU. +It is also equipped with the Qwiic Connect System. + +In addition to CO2 detection, a high-quality Sensirion humidity and temperature sensor is used on the same sensor module. +Thanks to the applied dual-channel principle for measuring carbon dioxide concentration, the sensor is designed to automatically compensate for long-term drifts. + +:::warning +The CO2 sensor should not be used permanently outdoors. +::: + + + +## Technical Information + +- CO2 measurement range: 0 - 40,000 ppm +- Accuracy: ± (30 ppm + 3% MV) (25 °C, 400 - 10,000 ppm) +- Repeatability: 10 ppm +- Temperature stability: 2.5 ppm / °C (0-50 °C) +- Response time: 20s +- Humidity measurement range: 0 - 100 % RH +- Accuracy: ±3% RH (0-100% RH) +- Repeatability: 0.1% RH +- Response time: 8s +- Temperature measurement range: -40 °C - 70 °C +- Accuracy (°C): ± (0.4 °C + 0.023 x (T [°C] - 25°C)) +- Repeatability (°C): 0.1 °C +- Response time: >10s + +## Connection + + + +## Programmierung (Arduino) + +Dieser Sketch liest die CO2-Konzentration und gibt sie im Seriellen Monitor aus. + +### Software Library + +To program the sensor in Arduino, you need to install the software library [SparkFun SCD30 Arduino Library](https://www.arduino.cc/reference/en/libraries/sparkfun-scd30-arduino-library/). + +### Code + +```cpp +#include +#include // http://librarymanager/All#SparkFun_SCD30_Arduino_Library + +SCD30 airSensor; + +void setup() { + Serial.begin(9600); + Wire.begin(); + if (airSensor.begin() == false) + { + while (1) + ; + } + airSensor.useStaleData(true); +} +void loop() +{ + Serial.println(airSensor.getCO2()); + delay(500); +} + +``` + +## Programming (Blockly) + +You can read the CO2 sensor with the following block. + +![](/img/en/hardware-bilder/co2/scd30-block.svg) + +## Calibrating the CO2 Sensor (Auto Calibration) + +As a rule, the CO2 sensor comes pre-calibrated. +Rough handling, shipping, or soldering can reduce the accuracy of the sensor, making calibration necessary. +For this sketch, you need the display. +If you don't have a display, you can delete the display-related parts, this does not affect the calibration of the sensor! + +To calibrate the CO2 sensor, it must be exposed to fresh air with a CO2 concentration of `400ppm` for **at least 7 days**, each day for at least one hour. +As long as the sensor is not set up in the immediate vicinity of a CO2 source (e.g., your own breath, combustion process, etc.), we can assume that the atmosphere has a concentration of about `400ppm` [tendency increasing](https://www.esrl.noaa.gov/gmd/ccgg/trends//). + +Install the [Board Support Package](https://docs.sensebox.de/arduino/board-support-package-installieren/) of the senseBox and additionally the `SparkFun_SCD30_Arduino_Library` via the library manager in the Arduino IDE. +Then you can upload the following sketch to the MCU. + +Alternatively, the compiled `.bin` file can be downloaded [here](/docs/sensebox_co2_calibrate.bin). + +```cpp +#include +#include + +#include "SparkFun_SCD30_Arduino_Library.h" + +// DISPLAY_PART_START +#include +#include +#define OLED_RESET 4 +Adafruit_SSD1306 display(OLED_RESET); +// DISPLAY_PART_ENDE +SCD30 airSensor; + + +void setup() { + // DISPLAY_PART_START + senseBoxIO.powerI2C(true); + delay(2000); + display.begin(SSD1306_SWITCHCAPVCC, 0x3D); + display.display(); + delay(100); + display.clearDisplay(); + // DISPLAY_PART_ENDE + if (airSensor.begin(Wire, true) == false) + { + while (1) + ; + } + airSensor.getAutoSelfCalibration(); +} + + +void loop() { + + // DISPLAY_PART_START + long time_elapsed = millis(); + time_elapsed = time_elapsed / 1000; + time_elapsed = time_elapsed / 60; + + display.clearDisplay(); + display.setCursor(0, 0); + display.setTextColor(WHITE, BLACK); + display.setTextSize(1); + display.println("Sensor eine Stunde an der frischen Luft lassen!"); + display.println(); + display.println(); + display.println(); + display.print("Zeit vergangen: "); + display.print(time_elapsed); + display.println(" min"); + display.display(); + // DISPLAY_PART_ENDE + + if (airSensor.dataAvailable()) + { + airSensor.getCO2(); + airSensor.getTemperature(); + airSensor.getHumidity(); + } + delay(500); +} +``` + +After uploading the sketch, take the CO2 sensor outside to fresh air for at least 1 hour daily over a period of 7 days. +The display will show you how much time has passed since the upload. +For optimal calibration of the sensor, repeat this process for 7 days. +Please note that the senseBox must not be turned off during this period, otherwise the calibration must be restarted! + +## Calibrating the CO2 Sensor (Manual Calibration) + +In contrast to the automatic calibration of the CO2 sensor, which takes at least 7 days, you can alternatively perform manual calibration. +[An excellent guide has been written in the senseBox forum](https://forum.sensebox.de/t/co2-ampel-kalibrieren/1108). + +The compiled `.bin` file can be downloaded [here](/docs/sensebox_co2_calibrate_manual.bin). + +- [Shop](https://sensebox.kaufen/product/co2-sensor) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/distanz.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/distanz.mdx new file mode 100644 index 0000000..c801e1b --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/distanz.mdx @@ -0,0 +1,61 @@ +--- +sidebar_position: 2 +title: Ultrasonic Distance Sensor +hide_title: false +description: HC-SR04 +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import ultrasonic from '@site/static/img/hardware-bilder/distanz/US-Sensor.png' +import ultrasonicBuild from '@site/static/img/hardware-bilder/distanz/Aufbau-Ultraschall.png' + +# Ultrasonic Distance Sensor + +The HC-SR04 measures distances using ultrasound and outputs them in centimeters (cm). + + + +## Technical Information + +- Dimensions: 45mm x 20mm x 17mm +- Supply voltage of 5V with a current consumption of less than 2mA +- Up to 50 measurements per second possible + + + +## Programming (Arduino) + +### Code + +This code outputs the measured distance in **centimeters** to the Serial Monitor. + +```cpp +int trig = 1; // Trig pin of the sensor is connected to pin 1. +int echo = 2; // Echo pin of the sensor is connected to pin 2. + +// Define variables +unsigned int time = 0; +unsigned int distance = 0; + +void setup() { + Serial.begin(9600); // Starts the Serial Monitor + pinMode(trig, OUTPUT); + pinMode(echo, INPUT); +} + +void loop() { + digitalWrite(trig, HIGH); + delayMicroseconds(10); + digitalWrite(trig, LOW); + distance = time / 58; + Serial.println(distance); +} +``` + +## Programming (Blockly) + +In Blockly, the sensor can be read using the following block: + +![](/img/en/hardware-bilder/distanz/ultraschall-block.svg) + +Select the port to which you have connected the sensor from the dropdown menu. The trigger and echo pins will then be automatically adjusted. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/feinstaub-sds011.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/feinstaub-sds011.mdx new file mode 100644 index 0000000..e36aa8f --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/feinstaub-sds011.mdx @@ -0,0 +1,81 @@ +--- +sidebar_position: 3 +title: Particulate Matter Sensor SDS011 +hide_title: false +--- +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText" +import feinstaubSds from "@site/static/img/hardware-bilder/feinstaub/sensoren_feinstaub.png" +import { useBoardStore } from "@site/src/lib/stores/store"; +import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' + +# Particulate Matter Sensor SDS011 + +With this sensor SDS011, it is possible to determine the particulate matter concentration in the air. The sensor outputs two values: the concentration of PM2.5 (particles < 2.5 µm) and PM10 (particles < 10 µm). This sensor is equipped with a small fan to draw in air. Inside, there is a laser that, together with a photodiode, measures the number of particles. The results of the measurements are given in µg/m³ (micrograms per cubic meter). + + + + +## Technical Information +* Plug-in-and-go senseBox compatible +* Fast response time of less than 10 seconds +* High resolution up to 0.3µg/m3 +* Multiple scientific testing of data accuracy + +## Connection + + + + + +## Programmierung (Arduino) + +### Software Library +To program the sensor in Arduino, you need to install the software library [sds-dust-sensors-arduino-library](https://codeload.github.com/lewapek/sds-dust-sensors-arduino-library/zip/refs/heads/master). + +### Code +In the following code, the values for `PM25` and `PM10` are output to the serial monitor. +:::info +The sensor requires a warm-up time of 30 seconds before it outputs measurements. +::: + + +```cpp +#include +#include + +SDS011 my_sds(Serial1) // Serial1 specifies the serial port to which the sensor is connected +float p10, p25; + +void setup(){ + // Initialize the standard serial port + Serial.begin(9600); + while(!Serial); + // Initialize the serial port to which our sensor is connected + Serial1.begin(9600); + delay(5000); +} + +void loop(){ + // Assign the measured particulate matter values to variables + p10 = my_sds.getPm10(); + p25 = my_sds.getPm25(); + // Print values to the console + Serial.println("P2.5: " + String(p25)); + Serial.println("P10: " + String(p10)); + delay(1000); +} +``` + +## Programming (Blockly) + +In Blockly, the sensor can be read using the following block: + +![](/img/en/hardware-bilder/feinstaub/block_feinstaubsensor.svg) + +Select the port to which you have connected the sensor and the measurement value from the dropdown menu. + +- PM2.5: Particulate matter fraction below 2.5 µg/m^3 +- PM10: Particulate matter fraction below 10 µg/m^3 + +>- [Shop](https://sensebox.kaufen/product/feinstaub-sds011) +>- [Datenblatt NOVA SDS011](https://cdn-reichelt.de/documents/datenblatt/X200/SDS011-DATASHEET.pdf) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/feinstaub-sps30.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/feinstaub-sps30.mdx new file mode 100644 index 0000000..914be64 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/feinstaub-sps30.mdx @@ -0,0 +1,83 @@ +--- +sidebar_position: 3 +title: Particulate Matter Sensor SPS30 +hide_title: false +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import feinstaubSps from '@site/static/img/hardware-bilder/sps30/sps30.png' +import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' + +# Particulate Matter Sensor SPS30 + +Der Particulate Matter Sensor SPS30 ist ein hochpräzises Gerät zur Messung der Luftqualität, das speziell für die Erfassung von Feinstaubpartikeln entwickelt wurde. Er misst die Konzentrationen von PM1.0, PM2.5, PM4.0 und PM10 in der Luft. Das Gerät verwendet eine fortschrittliche Laserscattering-Technologie, um die Partikel zu zählen und deren Größe zu bestimmen. Die Messergebnisse werden in µg/m³ angezeigt. + + + +# Technical Information + +- Measures PM1.0, PM2.5, PM4.0, PM10 +- Long-term stable measurements thanks to automatic self-cleaning function +- High measurement accuracy and reliability + +## Connection + + + +## Programming (Arduino) + +### Software Library + +To program the sensor in Arduino, you need to install the software library [sensirion-sps](https://www.arduino.cc/reference/en/libraries/sensirion-sps/). + +### Code + +The following code demonstrates how to output the PM values on the Serial Monitor: + +```cpp +#include // http://librarymanager/All# + +struct sps30_measurement m; +uint32_t auto_clean_days = 4; +const long intervalsps = 1000; +unsigned long time_startsps = 0; +unsigned long time_actualsps = 0; + +void getSPS30Data(){ + + uint16_t data_ready; + int16_t ret; + + do { + ret = sps30_read_data_ready(&data_ready); + if (ret < 0) { + } else if (!data_ready) {} + else + break; + delay(100); /* retry in 100ms */ + } while (1); + ret = sps30_read_measurement(&m); +} + +void setup() { + sensirion_i2c_init(); + sps30_set_fan_auto_cleaning_interval_days(auto_clean_days); + sps30_start_measurement(); +} + +void loop() { + time_startsps = millis(); + if (time_startsps > time_actualsps + intervalsps) { + time_actualsps = millis(); + getSPS30Data(); + } + Serial.println(m.mc_1p0); +} + +``` + +### Programming (Blockly) + +You can read the sensor with the following block. + +![](/img/en/hardware-bilder/sps30/sps30-block.svg) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/helligkeit-uv.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/helligkeit-uv.mdx new file mode 100644 index 0000000..28fb4e6 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/helligkeit-uv.mdx @@ -0,0 +1,187 @@ +--- +sidebar_position: 5 +title: Brightness and UV Sensor +hide_title: false +description: Brightness and UV Sensor +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import lightSensor from '@site/static/img/hardware-bilder/helligkeit-uv/sensor_helligkeit_uv.png' +import TutorialPorts_en from '@site/src/components/TutorialPorts/TutorialPorts_en' + +# Brightness and UV Sensor +On this senseBox component, two sensors are combined. + +The light intensity is measured with the TSL45315 sensor from AMS-TAOS or the LiteOn LTR329ALS-01 sensor (since 02/21). +This sensor detects the light conditions similar to the human eye and outputs the brightness values directly in Lux, with a large dynamic range (3 Lux to 220k Lux). + +The second sensor is a Vishay VEML6070 Ultraviolet (UV) light sensor. +This sensor converts the intensity of the sun's UV light into digital data. +The sensor has excellent UV sensitivity and linearity over Filtron™ technology. +It has good UV radiation measurement even with long sun UV exposure and can excellently compensate for temperature fluctuations. + + + +## Technical Information + +### Light Meter + +- 3.3V - 5V tolerant I2C/TWI interface +- Input voltage range: 3.3V - 5V +- On-board 2.5V voltage regulator +- On-board level shifter + +### UV Sensor + +- Operating voltage: 2.7V - 5.5V I2C interface +- Supports acknowledgment function (Active Acknowledge function) +- Temperature compensation: -40°C to +85°C +- Software shutdown control for immunity to flickering fluorescent lights + +### Dimensions + +- 25mm x 25mm x 9mm +- Weight: 2.5 g + +## Connection + + + +## Programmierung (Arduino) + +### Software Library + +To program the sensor in Arduino, you need to install the software libraries [Adafruit LTR329 and LTR303](https://www.arduino.cc/reference/en/libraries/adafruit-ltr329-and-ltr303/) **and** [Adafruit VEML6070 Library](https://www.arduino.cc/reference/en/libraries/adafruit-veml6070-library/). + +### Code + +This code outputs the values for Lux and UV intensity in the Serial Monitor + +```cpp +#include +#include +#include +#include + +bool lightsensortype = 0; //0 for tsl - 1 for ltr +//settings for LTR sensor +LTR329 LTR; +unsigned char gain = 1; +unsigned char integrationTime = 0; +unsigned char measurementRate = 3; +VEML6070 veml; + + +int read_reg(byte address, uint8_t reg) + { + int i = 0; + Wire.beginTransmission(address); + Wire.write(reg); + Wire.endTransmission(); + Wire.requestFrom((uint8_t)address, (uint8_t)1); + delay(1); + if(Wire.available()) + i = Wire.read(); + return i; + } + + +void write_reg(byte address, uint8_t reg, uint8_t val) + { + Wire.beginTransmission(address); + Wire.write(reg); + Wire.write(val); + Wire.endTransmission(); + } + +void Lightsensor_begin() + { + Wire.begin(); + unsigned int u = 0; + u = read_reg(0x29, 0x80 | 0x0A); //id register + if ((u & 0xF0) == 0xA0) // TSL45315 + { + write_reg(0x29, 0x80 | 0x00, 0x03); //control: power on + write_reg(0x29, 0x80 | 0x01, 0x02); //config: M=4 T=100ms + delay(120); + lightsensortype = 0; //TSL45315 + } + else + { + LTR.begin(); + LTR.setControl(gain, false, false); + LTR.setMeasurementRate(integrationTime, measurementRate); + LTR.setPowerUp(); //power on with default settings + delay(10); //Wait 10 ms (max) - wakeup time from standby + lightsensortype = 1; // + } + } + + +unsigned int Lightsensor_getIlluminance() + { + unsigned int lux = 0; + if (lightsensortype == 0) // TSL45315 + { + unsigned int u = (read_reg(0x29, 0x80 | 0x04) << 0); //data low + u |= (read_reg(0x29, 0x80 | 0x05) << 8); //data high + lux = u * 4; // calc lux with M=4 and T=100ms + } + else if (lightsensortype == 1) //LTR-329ALS-01 + { + delay(100); + unsigned int data0, data1; + for (int i = 0; i < 5; i++) { + if (LTR.getData(data0, data1)) { + if(LTR.getLux(gain, integrationTime, data0, data1, lux)); + if(lux > 0) break; + else delay(10); + } + else { + byte error = LTR.getError(); + } + } + } + return lux; + } + + +void setup() { + Serial.begin(9600); + Lightsensor_begin(); + veml.begin(); + +} + +void loop() { + Serial.print("Illuminance: "); + Serial.println(ightsensor_getIlluminance()); + Serial.print("UV-Intensity: "); + Serial.println(veml.getUV()); +} +``` + +## Programming (Blockly) + +In Blockly, the sensor can be read using the following block: + +![](/img/en/hardware-bilder/helligkeit-uv/block_helligkeit_uv.svg) + +In the block, you can select between the different parameters of the brightness/UV sensor: + +- Brightness in LUX +- UV exposure in µW/cm^2 + +## Projects + +- #### [IoT Messstation](https://sensebox.de/projects/de/2024-01-10-iotmesstation_s2) + +## Extras + +> - [Data sheet](https://sensebox.kaufen/assets/datenblatt/senseBox-VEML-TSL_v20.pdf) +> - [Data sheet Vishay VEML6070](https://www.vishay.com/docs/84277/veml6070.pdf) +> - [Data sheet LTR329](https://optoelectronics.liteon.com/upload/download/DS86-2014-0006/LTR-329ALS-01_DS_V1.pdf) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/lautstaerke.md b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/lautstaerke.md new file mode 100644 index 0000000..41d1ba7 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/lautstaerke.md @@ -0,0 +1,49 @@ +--- +sidebar_position: 6 +title: Volume Sensor +hide_title: false +description: DFRobot SEN0232 Gravity +--- +# Volume Sensor + +The DFRobot SEN0232 measures the volume and outputs the measured values in decibels. + +![](/img/hardware-bilder/lautstaerke/sound.png) + +## Techincal Information + +* Dimensions: 60mm x 43mm x 9mm +* "Plug-in-and-Go" senseBox compatible +* Input voltage: 3.3-5V +* Output voltage: 0.6-2.6V +* Measurement range: accurate between 30 dBA and 130 dBA +* Measurement interval: 125 ms + +![](/img/hardware-bilder/lautstaerke/sound-anschluss.png) + + +## Programmierung (Arduino) + + +```c++ +#define SoundSensorPin A1 //this pin read the analog voltage from the sound level meter +#define VREF 5.0 //voltage on AREF pin,default:operating voltage + +void setup() +{ + Serial.begin(115200); +} + +void loop() +{ + float voltageValue,dbValue; + voltageValue = analogRead(SoundSensorPin) / 1024.0 * VREF; + dbValue = voltageValue * 50.0; //convert voltage to decibel value + Serial.print(dbValue,1); + Serial.println(" dBA"); + delay(125); +} +``` + +>- [Shop](https://sensebox.kaufen/product/lautstarkesensor) +>- [DFRobot SEN0232 Gravity](https://www.mouser.de/pdfdocs/SEN0232_Web.pdf) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/luftdruck-temperatur-bmp280.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/luftdruck-temperatur-bmp280.mdx new file mode 100644 index 0000000..f504c17 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/luftdruck-temperatur-bmp280.mdx @@ -0,0 +1,76 @@ +--- +date: 2020-03-11 +title: Air Pressure and Temperature Sensor (BMP280) [DEPRECATED] +categories: hardware +description: Air Pressure and Temperature Sensor (BMP280) +type: Document +resources: + - name: 'Shop' + link: https://sensebox.kaufen/product/luftdruck-temperatur + - name: 'Bosch BMP280 Data sheet' + link: https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp280-ds001.pdf +block: /images/2020-03-11-sensoren-luftdruck-temperatur/block_luftdruck_temperatur.svg +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import pressureSensor from '@site/static/img/hardware-bilder/luftdruck/bmp_top.png' +import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' + +# Air Pressure and Temperature Sensor (BMP280) + +This sensor measures air pressure and temperature and is based on the BMP280 sensor from Bosch. + + + +# Technical Information + +- "Plug-in-and-Go" senseBox compatible +- Operating pressure: 300 to 1100 hPa +- Relative precision: ±0.12 hPa +- Absolute precision: ±1 hPa +- Operating supply current: 2.7 μA at 1 Hz sampling frequency +- Dimensions: 25mm x 25mm x 9mm +- Weight: 2.4 g + +## Connection + + + +## Programming + +```cpp +#include // http://librarymanager/All#Adafruit_BMP280_Library +#include + +Adafruit_BMP280 bmp; + +void setup() { + Serial.begin(9600); + bmp_sensor.begin(); +} + +void loop() { + Serial.print("Pressure: "); + Serial.println(bmp_sensor.readPressure()); + Serial.print("Temperature: "); + Serial.println(bmp_sensor.readTemperature()); + Serial.print("Altitude: "); + Serial.println(bmp_sensor.readAltitude(1013)); +} +``` + +## Programming (Blockly) + +In Blockly, the sensor can be read using the following block: + +![](/img/hardware-bilder/luftdruck/block-bmp280.png) + +In the block, you can select between the different parameters of the air pressure/temperature sensor: + +- Air pressure in Pascal (Pa) +- Temperature in Celsius (°C) +- Altitude above sea level in meters (a reference air pressure is required) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/luftdruck-temperatur.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/luftdruck-temperatur.mdx new file mode 100644 index 0000000..992e128 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/luftdruck-temperatur.mdx @@ -0,0 +1,95 @@ +--- +sidebar_position: 7 +title: Air Pressure and Temperature Sensor +hide_title: false +description: Air Pressure and Temperature Sensor (DPS310) +displayedSidebar: board +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import pressureSensor from '@site/static/img/hardware-bilder/luftdruck/bmp_top.png' +import { useBoardStore } from '@site/src/lib/stores/store' +import TutorialPorts_en from '@site/src/components/TutorialPorts/TutorialPorts_en' + +# Air Pressure and Temperature Sensor + +The DPS310 air pressure sensor is one of the latest pressure and temperature sensors from Infineon with a digital I2C and SPI interface. +The breakout board also includes a voltage regulator and a level converter so that the sensor can be used in systems with 3 to 5.5 volts via the JST connection. + + + +:::info +The DPS310 replaces the BMP280 air pressure and temperature sensor. You can recognise which of the two sensors you have by the label on the sensor. +If you need the documentation for the BMP280, you can find it [here](/docs/hardware/sensors/luftdruck-temperatur-bmp280). +::: + +## Technical Information + +- Fully integrated into the senseBox system +- Measurement range: 300 to 1200 hPa +- Relative air pressure precision: ±0.06 hPa +- Absolute air pressure precision: ±1 hPa +- Temperature accuracy: ±0.5°C +- Average power consumption: 1.7 μA for pressure measurement, 1.5 μA for temperature measurement at 1 Hz sampling frequency +- Standby power consumption: 0.5 μA + +## Connection + + + +## Programming (Arduino) + +### Software Library +To program the sensor in Arduino, you need to install the software library [Adafruit DPS310](https://www.arduino.cc/reference/en/libraries/adafruit-dps310/). + +### Code +This sketch reads the air pressure and temperature and outputs the values via the serial interface. + +```cpp +#include // http://librarymanager/All#Adafruit_DPS310 + +Adafruit_DPS310 dps; + +void setup() { + Serial.begin(9600); + + dps.begin_I2C(0x76); + dps.configurePressure(DPS310_64HZ, DPS310_64SAMPLES); + dps.configureTemperature(DPS310_64HZ, DPS310_64SAMPLES); + +} + +void loop() { + sensors_event_t temp_event, pressure_event; + dps.getEvents(&temp_event, &pressure_event); + + Serial.print("Pressure: "); + Serial.println(pressure_event.pressure); + Serial.print("Temperature: "); + Serial.println(temp_event.temperature); +} +``` + +## Programming (Blockly) +In Blockly, the sensor can be read using the following block: + +![](/img/en/hardware-bilder/luftdruck/block_luftdruck_temperatur.svg) + +In the block, you can select between the different parameters of the air pressure/temperature sensor: + +- Air pressure in Pascal (Pa) +- Temperature in Celsius (°C) +- Altitude above sea level in meters (requires a reference air pressure) + +## Projects + +- #### [IoT Measurement Station](https://sensebox.de/projects/de/2024-01-10-iotmesstation_s2) + +## Extras + +> - [Shop](https://sensebox.kaufen/product/luftdruck-temperatur) +> - [Bosch BMP280 Data sheet](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmp280-ds001.pdf) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/mikro.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/mikro.mdx new file mode 100644 index 0000000..e299292 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/mikro.mdx @@ -0,0 +1,82 @@ +--- +sidebar_position: 8 +title: Microphone +hide_title: false +description: Condenser Microphone +--- + +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText" +import mikro from "@site/static/img/hardware-bilder/mikro/mic.png" +import mikroBuild from "@site/static/img/hardware-bilder/mikro/mikro-aufbau.png" + +# Microphone +This condenser microphone from Watterott Electronics is equipped with an amplifier and can detect noises between 58 and 110 dB. +It outputs the measured noises in a range of 0-5V. + + + +## Technical Information + +* Dimensions: 30mm x 11mm x 7.5mm +* Operating voltage: 2.7 - 5.5V DC +* Detection of sounds between 58 and 110 dB + + + + +## Programming (Arduino) + +### Code +This code outputs the measured voltage value to the Serial Monitor. + +```cpp + /* + * This code has been adapted from the + * Example Sound Level Sketch for the Adafruit Microphone Amplifier + */ + +unsigned int micValue; // Variable to store the current measurement value +int micPort = 1; +const int recordingTimeWindow = 100; // Duration of the measurement interval in ms (100 ms = 10Hz) + +void setup() { + Serial.begin(9600); // Starts the Serial Monitor +} + +void loop() +{ + unsigned long start = millis(); // Start of the measurement interval + unsigned int peakToPeak = 0; // Distance from maximum to minimum amplitude swing + unsigned int signalMax = 0; + unsigned int signalMin = 1024; + + // Collect data for 100 milliseconds + while (millis() - start < recordingTimeWindow) + { + micValue = analogRead(micPort); // Measure the current value + if (micValue < 1024) // filter out erroneous measurements with values above the max value of 1024 + { + if (micValue > signalMax) + { + signalMax = micValue; // store the maximum measured value + } + else if (micValue < signalMin) + { + signalMin = micValue; // store the minimum measured value + } + } + } + peakToPeak = signalMax - signalMin; // max - min = distance from maximum to minimum amplitude swing + double volts = (peakToPeak * 5.0) / 1024; // convert to volts + + + Serial.print(volts); + Serial.println(" Volts"); +} +``` +## Programming (Blockly) +In Blockly the sensor can be read using the following block: + +![](/img/en/hardware-bilder/mikro/mikro-block.svg) + +Choose the port to which you have connected the sensor via the dropdown menu. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/mpu6050.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/mpu6050.mdx new file mode 100644 index 0000000..7662de5 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/mpu6050.mdx @@ -0,0 +1,65 @@ +--- +title: Accelerometer +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import mpu6050 from '@site/static/img/en/hardware-bilder/mpu6050/mcu-top-mpu.png' + +# Accelerometer (MPU6050) + +With an Accelerometer sensor, you can detect and measure the invisible force of acceleration that occurs when an object moves faster, slows down or changes direction. +Imagine riding a bike and leaning into a bend - acceleration forces are at work at that very moment. +These sensors are like super-sensitive tools that can sense not only how fast you are accelerating or decelerating, but also in which direction you are moving. + + + +:::success Note +The Accelerometer is built into the MCU S2! You don't need to connect anything else here. +::: + +## Programming (Arduino) + +This sketch reads the acceleration values of the MPU6050 and outputs them via the serial interface. +You can display the values in a graph using the Serial Plotter. + +```cpp +#include +#include + +Adafruit_MPU6050 mpu; +sensors_event_t a, g, temp; + +void setup() { + // Start serial communication + Serial.begin(115200); + + Wire1.begin(); + mpu.begin(0x68, &Wire1); + mpu.setAccelerometerRange(MPU6050_RANGE_8_G); + + Serial.println("MPU6050 ready!"); +} + +void loop() { + mpu.getEvent(&a, &g, &temp); + + // Output acceleration data + Serial.print("X:"); + Serial.print(a.acceleration.x); + Serial.print(",Y:"); + Serial.print(a.acceleration.y); + Serial.print(",Z:"); + Serial.println(a.acceleration.z); + + // Short pause to keep the output readable + delay(100); +} +``` +You can display the results in Arduino under `Tools -> Serial Plotter` or via the terminal program of your choice. + +![](/img/hardware-bilder/mpu6050/mpu-6050-plotter.png) + +## Programming (Blockly) +In Blockly, you can read the sensor using the following block: + +![](/img/en/hardware-bilder/mpu6050/mpu-6050-block.svg) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/photodiode.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/photodiode.mdx new file mode 100644 index 0000000..9f68cd8 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/photodiode.mdx @@ -0,0 +1,56 @@ +--- +title: Photodiode +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import photodiode from '@site/static/img/en/hardware-bilder/photodiode/mcu-top-photodiode.png' + +# Photodiode +A photodiode is a light-sensitive semiconductor that converts light into electrical energy. +It is commonly used in various applications such as photodetectors, exposure meters, light barriers, and optical communication systems. +Photodiodes provide readings that are proportional to the intensity of the incident light, making them useful for detecting changes in brightness or quantifying light intensities in various applications. + + + +:::success Note +The photodiode is installed on the MCU S2! You don't need to connect anything else here. +::: + +## Programming (Arduino) +To test the photodiode, upload this sketch to your senseBox! + +```cpp +void setup() { + // put your setup code here, to run once: + pinMode(PD_ENABLE, OUTPUT); + analogReadResolution(12); + digitalWrite(PD_ENABLE, HIGH); + + Serial.begin(9600); +} + +void loop() { + // put your main code here, to run repeatedly: + + Serial.println(analogRead(PD_SENSE)); + delay(100); +} +``` + +The values for the photodiode will now be displayed in the Serial Monitor. You can also view the trend of the values in a graph in the Serial Plotter (Tools -> Serial Plotter). + +## Programming (Blockly) + +In Blockly, the sensor can be read using the following block: + +![](/img/en/hardware-bilder/photodiode/photodiode_block.svg) + +## Projects + +- #### [Smart Street Lighting](https://sensebox.de/projects/de/2024-01-10-stra%C3%9Fenbeleuchtung_s2) + +## Extras diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/temperatur-luftfeuchte.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/temperatur-luftfeuchte.mdx new file mode 100644 index 0000000..cc5c416 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/temperatur-luftfeuchte.mdx @@ -0,0 +1,81 @@ +--- +sidebar_position: 9 +title: Temperature and Humidity Sensor +hide_title: false +description: Temperature and Humidity Sensor (HDC1080) +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import tempSensor from '@site/static/img/hardware-bilder/temperatur-luftfeuchte/sensor_temperatur_luftfeuchte.png' +import TutorialPorts_en from '@site/src/components/TutorialPorts/TutorialPorts_en' +import { useBoardStore } from '@site/src/lib/stores/store' + +# Temperature and Humidity Sensor +The HDC1080 is a digital humidity and temperature sensor. The sensor has high accuracy and very low power consumption, making it ideal for the senseBox. The sensors are calibrated at the factory and can be used instantly. + + + +## Technical Information + +- "Plug-in-and-Go" senseBox compatible +- Relative humidity (RH) operating range: 0% to 100% +- 14-bit measurement resolution +- Relative humidity accuracy: ±4% +- Temperature accuracy: ±0.2°C +- 2100 nA power supply +- Operating voltage: 2.7 V to 5.5 V +- I2C interface + +## Connection + + + +## Programming (Arduino) + +### Software Library + +To program the sensor in Arduino, you need to install the software library [Adafruit HDC1000 Library](https://www.arduino.cc/reference/en/libraries/adafruit-hdc1000-library/). + +### Code +This code outputs the temperature and relative humidity in the Serial Monitor. + +```cpp +#include // http://librarymanager/All#Adafruit_HDC1000_Library + +Adafruit_HDC1000 hdc = Adafruit_HDC1000(); + +void setup(){ + Serial.begin(9600); + hdc.begin(); +} + +void loop(){ + Serial.print("Temperature: "); + Serial.println(hdc.readTemperature()); + Serial.print("Humidity: "); + Serial.println(hdc.readHumidity()); +} +``` + +## Programming (Blockly) + +In Blockly, the sensor can be read using the following block: + +![](/img/en/hardware-bilder/temperatur-luftfeuchte/block_temperatur_luftfeuchte.svg) + +In the block, you can select between the different parameters of the temperature and humidity sensor: +- Temperature in degrees Celsius (°C) +- Humidity in percent (%) + +## Projects + +- #### [IoT Measurement Station](https://sensebox.de/projects/de/2024-01-10-iotmesstation_s2) + +## Extras + +> - [Shop](https://sensebox.kaufen/product/temperatur-luftfeuchte) +> - [TI HDC1080 Datenblatt](https://www.ti.com/lit/ds/symlink/hdc1080.pdf) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/tof.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/tof.mdx new file mode 100644 index 0000000..b54bddd --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/tof.mdx @@ -0,0 +1,99 @@ +--- +title: Time-of-Flight (ToF) Sensor +description: Measure distances with high precision using the Time-of-Flight sensor. +categories: hardware +--- + +import tofSensor from '@site/static/img/hardware-bilder/tof/tofsensor.png' +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import TutorialPorts_en from '@site/src/components/TutorialPorts/TutorialPorts_en' + +# Time-of-Flight (ToF) Sensor + +{' '} + +Time-of-Flight(ToF) sensors are capable of generating high-resolution depth images. +These sensors emit infrared light and measure the time it takes for the light to be reflected back. Our ToF sensor is a multi-zone sensor that measures distance not only at one point but in multiple zones (8x8 zones). +According to the manufacturer, measurements of up to 400 cm are possible. However, the maximum measurable distance varies depending on the current lighting conditions (less distance is measured in more sunlight). The frame rate can be up to 60 Hz. + + +## Technical Information + +- VL53L8CX ToF Sensor + +## Connection + + + +## Programming (Arduino) + +For programming the Time-of-Flight sensor, you also need to install [this](https://github.com/stm32duino/VL53L8CX/tree/main) library in Arduino. +This sketch outputs the minimum distance in cm measured by the sensor to the serial monitor. + +```cpp +#include +#include +#include + +VL53L8CX sensor_vl53l8cx_top(&Wire, -1, -1); +float oldVl53l8cxMin = -1.0; + +// Function to get the minimum distance measured by the ToF sensor (VL53L8CX) +float getVl53l8cxMin() { + VL53L8CX_ResultsData Results; + uint8_t NewDataReady = 0; + uint8_t status; + + status = sensor_vl53l8cx_top.vl53l8cx_check_data_ready(&NewDataReady); + + if ((!status) && (NewDataReady != 0)) { + sensor_vl53l8cx_top.vl53l8cx_get_ranging_data(&Results); + float min = 10000.0; + for(int i = 0; i < VL53L8CX_RESOLUTION_8X8*VL53L8CX_NB_TARGET_PER_ZONE; i++) { + if((&Results)->target_status[i]!=255){ + float distance = (&Results)->distance_mm[i]; + if(min > distance) { + min = distance; + } + } + } + oldVl53l8cxMin = (min==10000.0) ? 0.0 : min; + } + return oldVl53l8cxMin; + } + + + +void setup(){ + Serial.begin(9600); + Wire.begin(); + Wire.setClock(1000000); //Sensor has max I2C freq of 1MHz + sensor_vl53l8cx_top.begin(); + sensor_vl53l8cx_top.init_sensor(); + sensor_vl53l8cx_top.vl53l8cx_set_ranging_frequency_hz(30); + sensor_vl53l8cx_top.vl53l8cx_set_resolution(VL53L8CX_RESOLUTION_8X8); + sensor_vl53l8cx_top.vl53l8cx_start_ranging(); + +} + +void loop(){ + Serial.println(getVl53l8cxMin()); +} + + +``` + +## Programming (Blockly) +In Blockly this sensor can be read out via the following block: + +![](/img/en/hardware-bilder/tof/tof_block.svg) + +## Projects + +- #### [Display depth images on the LED matrix](https://sensebox.de/projects/de/2024-04-02-tof-led) +- #### [Surveillance camera](https://sensebox.de/projects/de/2024-04-02-%C3%BCberwachungskamera) + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/truebner.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/truebner.mdx new file mode 100644 index 0000000..8aa1294 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/truebner.mdx @@ -0,0 +1,71 @@ +--- +sidebar_position: 9 +title: Soil Moisture and Temperature Sensor +hide_title: false +description: Soil Moisture and Temperature Sensor Truebner SMT50 +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import truebnerSensor from '@site/static/img/hardware-bilder/bodenfeuchte-temperatursensor/sensoren_bodenfeuchte_temperatur.png' +import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' + +# Soil Moisture and Temperature Sensor +The Truebner SMT50 is a capacitive soil temperature and moisture sensor and is therefore well suited for various applications in the home garden. +Capacitive soil moisture sensors generate an electric field around their measuring electrodes. The field penetrates the surrounding soil. The measuring electronics of the sensor determine the resulting electrical capacitance of the electrodes. +The higher the water content in the soil, the greater the measurement capacitance of the sensor. + + + +## Technical Details + +- Supply voltage: 3.3 - 30 VDC (direct current) +- Power consumption: approx. 2.7 mA (measured at 12VDC) +- Measurement range for volumetric water content: 0 – 50% (with +/- 3% accuracy) +- Measurement range for temperature: -20 to +85 °C (with +/- 1.0°C accuracy) +- Measurement method: FDR (Frequency Domain Response) +- Measurement signal: symmetric, bipolar differential + +## Connection + + + +### Dimensions + +- Size: approx. 13.5 cm x 2.15 cm +- Weight including 10m cable: approx. 235 g + +## Programming (Arduino) + +### Code + +```cpp +#include + +float getSMT50Temperature(int analogPin){ + int sensorValue = analogRead(analogPin); + float voltage = sensorValue * (3.3 / 1024.0); + return (voltage - 0.5) * 100; +} + + +void setup() { + Serial.begin(9600); +} + + +void loop() { + Serial.println(getSMT50Temperature(1)); +} +``` + +## Programming (Blockly) +In Blockly, the sensor can be read using the following block: + +![](/img/en/hardware-bilder/bodenfeuchte-temperatursensor/block_bodenfeuchte_temperatur.svg) + +In the block, you can select between the different parameters of the soil moisture and temperature sensor: +- Soil temperature in degrees Celsius (°C) +- Soil moisture + +> - [Shop](https://sensebox.kaufen/product/bodenfeuchte-temperatursensor-smt50) +> - [Truebner SMT50](https://www.truebner.de/assets/download/SMT50_Flyer_DE.pdf) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/umweltsensor.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/umweltsensor.mdx new file mode 100644 index 0000000..20980e8 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/umweltsensor.mdx @@ -0,0 +1,162 @@ +--- +sidebar_position: 10 +title: Environmental Sensor +hide_title: false +description: Air Pressure and Temperature Sensor (BME680) +--- + +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import umweltsensor from '@site/static/img/hardware-bilder/umweltsensor/bme.png' +import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' + +# Environmental Sensor + +With the BME680 sensor you can measure a variety of phenomena. Air temperature, relative humidity, air pressure and air quality can be determined with the BME680. It is a real all-rounder. + + + +## Technical Details + +- Fast response time of less than 10 seconds +- "Plug-in-and-Go" senseBox compatible +- Deviation in gas measurements of ±15% + + +## Connection + + + +:::warning +**Caution:** The BME gas sensor is not compatible with the BMP280 air pressure sensor. This means you can only connect and read one of the two at a time! +::: + +## Programming (Arduino) + +### Software Library +To program the sensor in Arduino you need to install the software library [BSEC Software Library](https://www.arduino.cc/reference/en/libraries/bsec-software-library/). + +### Code + +This code reads the temperature from the BME680 sensor and outputs it to the Serial Monitor. +You can access the other measured values through the variables `bmeTemperatur`, `bmeHumidity`, `bmePressure`, `bmeIAQ`, `bmeIAQAccuracy`, `bmeCO2`, and `bmeBreathVocEquivalent`. + +```cpp +#include +#include // http://librarymanager/All#BSEC_Software_Library + +float bmeTemperatur; +float bmeHumidity; +double bmePressure; +float bmeIAQ; +float bmeIAQAccuracy; +int bmeCO2; +float bmeBreathVocEquivalent; + +Bsec iaqSensor; + +void checkIaqSensorStatus(void) + { + if (iaqSensor.bsecStatus != BSEC_OK) { + if (iaqSensor.bsecStatus < BSEC_OK) { + for (;;) + errLeds(); /* Halt in case of failure */ + } + } + + if (iaqSensor.bme68xStatus != BME68X_OK) { + if (iaqSensor.bme68xStatus < BME68X_OK) { + for (;;) + errLeds(); /* Halt in case of failure */ + } + } +} + + +void errLeds(void) +{ + pinMode(LED_BUILTIN, OUTPUT); + digitalWrite(LED_BUILTIN, HIGH); + delay(100); + digitalWrite(LED_BUILTIN, LOW); + delay(100); +} + + +void setup() { + Wire.begin(); + iaqSensor.begin(BME68X_I2C_ADDR_LOW, Wire); + checkIaqSensorStatus(); + + bsec_virtual_sensor_t sensorList[13] = { + BSEC_OUTPUT_IAQ, + BSEC_OUTPUT_STATIC_IAQ, + BSEC_OUTPUT_CO2_EQUIVALENT, + BSEC_OUTPUT_BREATH_VOC_EQUIVALENT, + BSEC_OUTPUT_RAW_TEMPERATURE, + BSEC_OUTPUT_RAW_PRESSURE, + BSEC_OUTPUT_RAW_HUMIDITY, + BSEC_OUTPUT_RAW_GAS, + BSEC_OUTPUT_STABILIZATION_STATUS, + BSEC_OUTPUT_RUN_IN_STATUS, + BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_TEMPERATURE, + BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY, + BSEC_OUTPUT_GAS_PERCENTAGE + }; + + + iaqSensor.updateSubscription(sensorList, 13, BSEC_SAMPLE_RATE_LP); + checkIaqSensorStatus(); + + + +} + + +void loop() { + + if (iaqSensor.run()) { + bmeTemperatur = iaqSensor.temperature; + bmeHumidity = iaqSensor.humidity; + bmePressure = iaqSensor.pressure; + bmeIAQ = iaqSensor.iaq; + bmeIAQAccuracy = iaqSensor.iaqAccuracy; + bmeCO2 = iaqSensor.co2Equivalent; + bmeBreathVocEquivalent = iaqSensor.breathVocEquivalent; + } else { + checkIaqSensorStatus(); + } + + Serial.println(bmeTemperatur); + +} +``` + +## Programming (Blockly) + +In Blockly, the sensor can be read using the following block: + +![](/img/en/hardware-bilder/umweltsensor/block_umweltsensor.svg) + +In the block, you can select between the different parameters of the environmental sensor: + +- Temperature in degrees Celsius (°C) +- Humidity in % +- Air pressure in Pa +- Indoor air quality (IAQ) +- Calibration value +- CO2 equivalent +- Breath VOC equivalent + +## Calibration Value + +The calibration status can be read from the IAQ Accuracy value. It is either 0, 1, 2, or 3 and indicates the following: + +- IAQ Accuracy = 0 means the sensor is stabilizing (takes about 25 minutes) or there was a timeout (which should be indicated by a warning/error flag by BSEC ← Needs to be handled in Blockly), +- IAQ Accuracy = 1 means the value is inaccurate, +- IAQ Accuracy = 2 means the sensor is calibrating, +- IAQ Accuracy = 3 means the sensor is successfully calibrated. + +The IAQ index is only meaningful when IAQ Accuracy = 3. Besides the IAQ value, BSEC also provides CO2 and VOC equivalent values. + +> - [Shop](https://sensebox.kaufen/product/sensebox-mini) +> - [Bosch BME680](https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bme680-ds001.pdf) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/wassertemperatur.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/wassertemperatur.mdx new file mode 100644 index 0000000..b6d4b88 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/sensors/wassertemperatur.mdx @@ -0,0 +1,64 @@ +--- +title: Water Temperature Sensor +--- + +import waterTempSensor from '@site/static/img/hardware-bilder/wassertemperatur/wassertemperatur.JPG' +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' +import TutorialPorts from '@site/src/components/TutorialPorts/TutorialPorts' + +# Water Temperature Sensor (DS18B20) +The DS18B20 is a digital temperature sensor that is addressed via a 1-Wire bus. It can measure temperatures from -55°C to +125°C and is waterproof. It is therefore ideal for measuring water temperature. + +:::warning +To use the sensor with the senseBox you need the 1-Wire adapter. You can purchase it [here](https://sensebox.kaufen/product/sensebox-one-wire-adapter). +::: + + + +## Connection + + + +## Programming (Arduino) + +### Software Library + +To program the sensor in Arduino you need to install the software libraries [OneWire](https://www.arduino.cc/reference/en/libraries/onewire/) **and** [DallasTemperature](https://www.arduino.cc/reference/en/libraries/dallastemperature/). + +### Code +This code reads the temperature from the sensor and outputs it to the serial interface. + +```cpp +#include +#include // http://librarymanager/All#OneWire +#include // http://librarymanager/All#DallasTemperature + + +#define ONE_WIRE_BUS 1 +OneWire oneWire(ONE_WIRE_BUS); +DallasTemperature sensors(&oneWire); + +float getWaterTemp(){ + sensors.requestTemperatures(); + sensors.getTempCByIndex(0); +} + +void setup() { + Serial.begin(9600); + sensors.begin(); +} + +void loop() { + Serial.print("Wassertemperatur: "); + Serial.print(getWaterTemp()); +} +``` + +### Programming (Blockly) +In Blockly you can read the sensor with the following block: + +![](/img/en/hardware-bilder/wassertemperatur/wassertemperatur-block.svg) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/hardware/wifi.mdx b/i18n/en/docusaurus-plugin-content-docs/current/hardware/wifi.mdx new file mode 100644 index 0000000..edd1c18 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/hardware/wifi.mdx @@ -0,0 +1,71 @@ +--- +sidebar_position: 1 +title: WiFi +description: Connect your senseBox to the internet with the built-in WiFi module. +categories: hardware +hide_title: false +--- + +import wifiModul from '@site/static/img/en/mcus2/wifi-modul-s2.png' +import AlertBox from '@site/src/components/AlertBox/AlertBox' +import ImageWithText from '@site/src/components/ImageWithText/ImageWithText' + +# WiFi-Modul + +{' '} + +With the WiFi module, you can connect your senseBox to the internet. +Additionally, you have the options to create your own WiFi network with the WiFi module or connect to an existing network. + +:::success Module onBoard +The WiFi module is built into the MCU S2! +So you don't need to connect anything else here. +::: + +## General + +In Blockly, you have various options to implement projects that work with the internet. For all of them, you must first connect your senseBox to the internet. + +## Programming (Arduino) + +This sketch connects to your home WiFi and gives you the IP address of your senseBox. Remember to enter your network name and password in the `ssid` and `pass` variables. + +```cpp +#include + +char ssid[] = "SSID"; +char pass[] = "Password"; + +void setup() { + Serial.begin(9600); + WiFi.begin(ssid, pass); + if(WiFi.status() != WL_NO_SHIELD){ + while(true); + } +} + +void loop(){ + Serial.println(WiFi.localIP()); + delay(1000); +} +``` + +## Programming (Blockly) + +With the `Connect to WiFi` block, you can connect your senseBox to a WiFi network in the Setup(). Enter the network name under SSID and the WiFi password under Password. + +![](/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-1.svg) + +With the `Initialize WiFi Access Point` block, your senseBox can create a WiFi network that you can join with other devices. In the SSID text field, you can set the name of your network. + +![](/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-2.svg) + +## Projects + +- #### [Communication between senseBoxes with ESP-NOW](https://sensebox.de/projects/de/2024-03-24-esp-now) +- #### [IoT Measurement Station](https://sensebox.de/projects/de/2024-01-10-iotmesstation_s2) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/FAQ.mdx b/i18n/en/docusaurus-plugin-content-docs/current/misc/FAQ.mdx new file mode 100644 index 0000000..f9da84d --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/FAQ.mdx @@ -0,0 +1,164 @@ +--- +title: 'FAQ' +hide_title: false +--- + +# FAQ + +
+ Where can I find summarised information about the senseBox? + +All important information about the different senseBoxes can be found [here](https://sensebox.de/en/products) + +
+ +
+ Which senseBox is right for me? + +The [senseBox:edu](https://sensebox.kaufen/product/sensebox-edu)is the version of the senseBox specially developed for use in the educational sector. In addition to the senseBox MCU, it contains sensors for temperature, humidity, air pressure, brightness, UV intensity, distances and noise, a display, a WiFi and an SD card module as well as other electronic components. +All components are located in a tidy plastic box and are always well protected and easy to check even with regular use. +The [senseBox:mini](https://sensebox.kaufen/product/sensebox-mini) is the entry-level set into the world of the senseBox. +It contains the senseBox MCU, the WiFi module, the display and the senseBox environmental sensor (possibility to measure temperature, humidity, air pressure and indoor air quality). +The senseBox:mini offers everything you need to start with IoT projects, such as a home server or a chatbot. The senseBox:mini is also available as a class kit. +More information about the senseBox:mini class kit can be found in the attached information sheet. +The [senseBox:home](https://sensebox.kaufen/product/sensebox-home) is a DIY environmental monitoring station kit that can share its measurement values online on the openSenseMap. +We have already put together the microcontroller and some basic components as a set. All other sensors and components can be selected independently to create an individual environmental monitoring station. +The matching program code is provided by us, so there is no need to program it. + +
+ +
+ Who is the senseBox suitable for? + +In a school context, we recommend a minimum age of 12 years. +This recommendation is, of course, highly dependent on the supervision ratio. +We also conduct workshops in primary schools. + +
+ +
+ What do I need for the senseBox? + +A senseBox contains everything you need. +Except for a computer and an internet connection, of course. + +
+ +
+ Where can I buy the senseBox? + +The senseBox is available in our own online shop at [sensebox.kaufen](https://sensebox.kaufen). + +
+ +
+ Where can I find the instructions for my first steps? + +Here in the Docs you will find instructions for the first steps with [Blockly for senseBox](/docs/boards/mcus2/mcus2-in-betrieb-nehmen) and and the [Arduino IDE](docs/category/arduino). + +
+ +
+ Are there teaching/learning materials? + +Yes! Working with the senseBox depends on the provided material. +For the senseBox:edu and senseBox:mini you will find [teaching material](https://sensebox.de/en/material) and [projects](https://sensebox.de/en/projects/) on our website. +Instructions for the senseBox:home can be found [here](docs/category/aufbau-und-installation-1) in the Docs. +All materials are open educational resources (OER) and are therefore available free of cost. + +
+ +
+ Do you support schools in setting up the senseBox? + +Yes! Just contact us and we will see how we can set up the senseBox at your school. + +
+ +
+ How to programm the senseBox? + +The senseBox can be programmed graphically using [Blockly for senseBox](https://blockly.sensebox.de/ardublockly/?board=sensebox-mcu) and [openroberta](https://lab.open-roberta.org/), or text-based using the [Arduino IDE](https://www.arduino.cc/). +For more information on how to use the programming environments, refer to the [Docs](https://docs.sensebox.de/). + +
+ +
+ Why not use a standard Arduino or Raspberry? + +The Raspberry is too complicated for use with beginner programmers and too powerful for our purposes. +The senseBox MCU was specially developed on an Arduino basis and offers everything that a standard Arduino offers. +In addition, it allows browser-based programming without software installation and easy connection of sensors via JST cable. + +
+ +
+ Who's behind the senseBox? + +The senseBox was developed at the student lab [GI@School](https://www.uni-muenster.de/Geoinformatics/gi-at-school/) of the University of Münster. +After funding by the German Federal Ministry of Education and Research, the [reedu GmbH & Co. KG](https://reedu.de/) was founded in 2018. Today, reedu and the University of Münster jointly manage everything related to the senseBox. + +
+ +
+ Where can I find the new senseBox Connect App? + +You can download the app in the Apple [Appstore](https://apps.apple.com/ca/app/sensebox-connect/id1586961095?ign-mpt=uo%3D2). +Further information about the app and how to use it can be found at [sensebox.de/app](https://sensebox.de/app) + +
+ +
+ What happens if you press the reset button just once? + +The MCU restarts the sketch that is currently uploaded to the MCU. + +
+ +
+ What functions are hidden behind the switch button? + +The switch button can be controlled programmatically with the initialization `Button switchButton(0);`. +You can check if the button was pressed in the program with the line `switchButton.isPressed()`. +In an [example project](https://sensebox.de/projects/de/2021-01-05-display) with the display you can see a short instruction on how it works. + +
+ +
+ What happens if you disconnect the MCU from the power? Can you continue without any issues after reconnecting the power? + +Yes, you can continue without any issues. Just remember that the program starts "from the beginning" and executes the `setup()` function first. + +
+ +
+ How many sensors can be connected? When does the internal memory run out of space? + +As many as the senseBox has connections. +In addition, you can use additional I2C sensors with the help of the [Multiplexer](https://sensebox.kaufen/product/multiplexer). +However, you cannot connect two identical I2C sensors to the same MCU without the Expander. +That means you can't connect the HDC1080 twice to the same MCU. For that you would need the Expander. +The percentage of internal memory used is displayed at the end of the upload (via the Arduino IDE). +So far we have not reached the point where an MCU was "full". +This was rather always limited by the hardware (i.e. number of connections) or coupled to the transmission type (LoRa has a limit of ~14 measured values). + +
+ +
+ How do you set up a power-saving mode? + +In the senseBox MCU there is no power-saving mode. +However, you can program the MCU to save power. +This can mean, among other things, that measurement values are only uploaded every 10 minutes and within these 10 minutes the MCU is "put to sleep". +This can be done either via this [Library](https://www.arduino.cc/reference/en/libraries/arduino-low-power/lowpower.deepsleep/) or via other power-saving measures (Wifi off in the meantime, sensors off, ...) + +
+ +
+ How can I test whether the components are all working? + +If you have installed the [Arduino IDE and the senseBox Board Support Package](/docs/category/arduino), you can load a sketch in the Arduino IDE under File->Examples->senseBox-Tests->mcu_component_test`` that tests all connected sensors and displays initial values. +If you specify your WiFi data in line 25 and 26, you can also test the connection to the openSenseMap using a WiFi Bee. +After you have uploaded the sketch, all instructions will be displayed in the Serial Monitor. + +
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/circuitpython_esp32.mdx b/i18n/en/docusaurus-plugin-content-docs/current/misc/circuitpython_esp32.mdx new file mode 100644 index 0000000..4be870b --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/circuitpython_esp32.mdx @@ -0,0 +1,61 @@ +--- +sidebar_position: 1 +title: "Installing CircuitPython" +description: ⬇️ CircuitPython auf der senseBox MCU-S2 installieren +--- +import AlertBox from "@site/src/components/AlertBox/AlertBox"; + +# Installing CircuitPython +CircuitPython is a variant of MicroPython developed by Adafruit. It is a simplified version of Python, specifically for microcontrollers. CircuitPython is a great way to quickly and easily get started with programming microcontrollers. In this tutorial, we will show you how to install CircuitPython on your senseBox MCU-S2. + +![CircuitPython Logo](https://s3.amazonaws.com/adafruit-circuit-python/CircuitPython_Repo_header_logo.png) + + + +

You can only use the Web-Installer with Google Chrome or Microsoft Edge.

+
+ + +## Installing CircuitPython +To install CircuitPython on your senseBox MCU-S2, follow these steps: +1. Visit the [CircuitPython Download Page](https://circuitpython.org/board/sensebox_mcu_esp32s2/). +2. Connect your senseBox MCU-S2 to your computer using a USB cable. +3. Hold down the Boot button on the senseBox MCU-S2 and then press the Reset button. Release the Boot button. +4. Click on the `OPEN INSTALLER` button and select `Full CircuitPython X.X.X Install` (X.X.X represents the latest CircuitPython version). +5. Click `Next` and connect to your senseBox MCU-S2 in the next menu. Click the `Connect` button and select `ESP32-S2` as the device. +7. Click `Continue` and wait for the flash to be erased and the combined.bin file to be flashed. This process may take a few minutes. +8. Press the Reset button on the senseBox MCU-S2 to start the bootloader. A new drive named `senseBox` will appear. +9. Click `Select Bootloader Drive` and choose the `senseBox` drive. +9. CircuitPython will now be loaded onto the MCU. After a few seconds, you should see a new drive named `CIRCUITPY`. +10. CircuitPython has been successfully installed. The Web-Installer does not indicate that the process is complete, so you can simply close the Web-Installer. +11. You can now use CircuitPython on your senseBox MCU-S2. + + +## Hello World Programm +To verify that CircuitPython has been successfully installed, we will show you a simple Hello World program. +1. Visit the [CircuitPython Editor](https://code.circuitpython.org/). +2. Connect your senseBox MCU-S2 to your computer using a USB cable. +3. Connect to your senseBox MCU-S2 via `USB`. +4. Click on `Connect to Device` and select `senseBox MCU-S2 ESP32S2` as the device. You may need to allow the editor to access your senseBox MCU-S2. +5. Click on `Select New Folder` and choose the `CIRCUITPY` folder. +6. You may need to allow file editing. +7. Click on `Use CIRCUITPY`. +8. Click on `Open` and open the `code.py` file. +9. The file should already contain some example code. If not, insert the following code: +```python +print("Hello World!") +``` +10. Click on `Save + Run`. You should now see `Hello World!` in the console. + +## Uninstalling CircuitPython +If you want to uninstall CircuitPython from your senseBox MCU-S2 to use Arduino again, follow these steps: +1. Enter bootloader mode by briefly pressing the Reset button and then briefly pressing the Boot button. The RGB LED should now light up green. +2. Download the [flash-arduino.uf2](https://github.com/sensebox/MCU-S2-circuitpython-examples/raw/main/assets/flash-arduino.uf2) file. +3. Copy the `flash-arduino.uf2` file to the `senseBox` drive. +4. The senseBox MCU-S2 will now restart, and you can use Blockly or Arduino as usual. + + +## Projects + +* #### [CO2 Traffic Light](https://sensebox.de/projects/de/2024-04-02-circuitpython-co2-ampel) + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/espnow.mdx b/i18n/en/docusaurus-plugin-content-docs/current/misc/espnow.mdx new file mode 100644 index 0000000..f7eeeec --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/espnow.mdx @@ -0,0 +1,9 @@ +--- +title: ESP-NOW +--- + + + +## Projects + +* #### [Communication between senseBoxes with ESP-NOW](https://sensebox.de/projects/de/2024-03-24-esp-now) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/openRoberta.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/openRoberta.md new file mode 100644 index 0000000..9470a64 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/openRoberta.md @@ -0,0 +1,58 @@ +--- +date: 2020-03-11 +title: openRoberta +categories: misc +description: Programming the senseBox in openRoberta +type: Document +set: editoren +set_order: 3 +resources: + - name: "openroberta lab" + link: https://lab.openroberta.org + - name: "openroberta Wiki" + link: https://jira.iais.fraunhofer.de/wiki/display/ORInfo +image1: /images/2020-03-11-allgemein-einfuehrung-openroberta/openroberta-carousel.png +image2: /images/2020-03-11-allgemein-einfuehrung-openroberta/openroberta-oberflaeche.png +image3: /images/2020-03-11-allgemein-einfuehrung-openroberta/openroberta-buttons.png + +--- +# openRoberta + +openRoberta is a graphical programming interface developed by the Fraunhofer Institute. In addition to the senseBox, you can program many other systems with openRoberta. + +## Getting Started + +Open the Open Roberta Lab at [lab.open-roberta.org](https://lab.open-roberta.org/). There, you first need to select your system, which is the senseBox. + +![](/img/open-roberta-bilder/openroberta-carousel.png) + + +## Interface +Once you have selected your system, you will find yourself on the programming interface. +This can be roughly divided into three areas: The navigation bar at the top, the toolbox on the left and the large white workspace. + +![](/img/open-roberta-bilder/openroberta-oberflaeche.png) + +### Navigation Bar +The *Navigation Bar* can be divided into two areas. In the upper half, there are buttons like "Edit", "Robot", "Help", etc. Here, you can open saved programs or switch the system. +In the lower half, there are tabs for "Program" and "Robot Configuration". The "Program" tab is open by default and shows your workspace for writing programs. Under the "Robot Configuration" tab, you need to specify the various connected sensors and actuators. + +> If a connected component is not specified in the robot configuration, it cannot be used in the program! + +### Toolbox +The *Toolbox* contains all the blocks you need to program the senseBox. They can be easily dragged and dropped into the workspace. All blocks in a category are always colored the same as the category. + +### Workspace +In the *Workspace*, you program your senseBox. As you can see, there are already two blocks in the workspace by default: `Start` and `Repeat indefinitely`. These blocks are essential for every program and therefore cannot be removed. +Additionally, at the bottom right of the workspace, you will find the button to transfer your program to the senseBox, save the program in the cloud, zoom in and out of your blocks in the workspace, and the trash can to delete blocks. + +![](/img/open-roberta-bilder/openroberta-buttons.png) + +## Transferring Programs +To transfer your program to the senseBox, you need to connect the senseBox to your computer using the USB cable. Next, you can download it by clicking the "Play button" at the bottom left of the workspace. Follow the instructions in the pop-up window. + +## openRoberta Wiki +You can find this and all other information about the openRoberta lab online in the [documentation for the Open Roberta Lab from the Fraunhofer Institute](https://jira.iais.fraunhofer.de/wiki/display/ORInfo). + +> - [openRoberta Lab](https://lab.openroberta.org/) +> - [openroberta Wiki](https://jira.iais.fraunhofer.de/wiki/display/ORInfo) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/_category_.json b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/_category_.json new file mode 100644 index 0000000..20cf1a8 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "openSenseMap", + "position": 10, + "link": { + "type": "generated-index", + "description": "Information about the visual programming environment Blockly for senseBox." + } +} diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/api.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/api.md new file mode 100644 index 0000000..bd94257 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/api.md @@ -0,0 +1,11 @@ +--- +sidebar_position: 1 +hide_title: false +title: API Dokumentation +description: openSenseMap RESTful API +--- +# API Dokumentation + +Die openSenseMap erstellt eine API zur Abfrage von Daten zu Boxen und Messungen sowie zum Upload von Messungen. Du findest sie [hier](https://api.opensensemap.org/). + +Die Dokumentation der API-Routen ist [hier](https://docs.opensensemap.org) zu finden. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/community.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/community.md new file mode 100644 index 0000000..3953abf --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/community.md @@ -0,0 +1,38 @@ +--- +sidebar_position: 2 +title: Community Anwendungen +hide_title: false +description: Eine Übersicht über die verschiedenen Tools und Anwendungen zur openSenseMap aus der Community. +--- + +In der Community sind bereits einige Tools und Anwendungen entstanden, +welche die openSenseMap integrieren oder als Schnittstelle nutzen. + +> Falls dir weitere Integrationen bekannt sind, lass es uns wissen! + +## Visualisierung + +> - [DevelopmentSeed Dashboard](https://github.com/developmentseed/sense): elegantes Dashboard, welches die Messungen einer senseBox anzeigt +> - [HPI Makerclub Dashboard](https://github.com/HPIMakerKlub/sensebox) ([demo](http://rawgit.com/HPIMakerKlub/sensebox/master/statistics/sensor.html?senseBoxID=5719c4037514d05c121e317c)) +> - [senseBox Dashboard](https://github.com/sensebox/sensebox-dashboard): zeigt aktuelle Messwerte einer senseBox an +> - [senseBox Widget](osem_widget.md) +> - [Open Sense](https://play.google.com/store/apps/details?id=de.codefor.karlsruhe.opensense): Android Widget zum Darstellen von aktuellen Messwerten der opensensemap.org ([Code auf GitHub](https://github.com/CodeforKarlsruhe/opensense)) + + +## Datenanalyse + +> - [opensensmapr R client](https://github.com/noerw/opensensmapR): openSenseMap Messwerte und Boxen in der statistischen Umgebung R +> - [senseBox openSenseMap R client](https://github.com/JohannesFriedrich/senseBox): An R API for the senseBox project. Download and analyse environmental data provided by https://sensebox.de/en/. + +## Sensor Firmware + +> - [RasPi Wolkenbedeckungs-Sensor](https://github.com/felixerdy/senseBox-cloud) +> - [GSM Wassersensor](https://github.com/felixerdy/GSM-Temperature-senseBox) +> - [mobile GPS senseBox](https://github.com/noerw/mobile-sensebox) +> - [BigGIS LoRa senseBox](https://github.com/biggis-project/sensebox-station) + +## Sonstige + +> - [Alexa senseBox-Skill](https://github.com/Zeygon/alexa-sensebox) +> - [openhab2 smart home senseBox Integration](https://github.com/hakan42/openhab2-addons/tree/sensebox-binding/addons/binding/org.openhab.binding.sensebox) +> - [openSenseMap Game](https://github.com/MaxMoody/Senseboxgamification) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/download.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/download.md new file mode 100644 index 0000000..db9e54c --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/download.md @@ -0,0 +1,89 @@ +--- +sidebar_position: 3 +title: Datendownload +hide_title: false +description: Datendownload über die openSenseMap +--- + +# Datendownload + +Es bestehen mehrere Möglichkeiten Sensordaten von der openSenseMap herunterzuladen. +Abhängig von der Fragestellung bietet sich je eine Option an. +Bei den von der senseBox aufgenommenen Daten handelt es sich um Open Data, das heißt sie stehen allen Nutzer:innen zur freien Verfügung. + +## Daten zu einer Box + +Unter `https://archive.opensensemap.org` wird ein Archiv für sämtliche Messungen in der openSenseMap-Datenbank geführt. +Hier sind nach Tag und Box gegliederte Messwerte als CSV beziehungsweise ZIP-Archiv verfügbar. + +## Filter + +Durch einen Klick auf den Reiter "Filter" in der openSenseMap kannst du dir zunächst optional spezifische Dinge für deine Suche und den anschließenden Download der Daten vorfiltern lassen. +Solltest du nach einem Namen filtern, kannst du auch die Werte einer einzelnen senseBox herunterladen. +Dass der Filter aktiv ist, erkennst du an einem roten Dreieck unter dem Reiter "Namen". + +![](/img/open-sensemap-bilder/datendownload/1-filter.png) + +## Graphische Darstellung von Daten + +Neben der Funktion zum Filtern kannst du dir auch die Statistiken der einzelnen Boxen anzeigen lassen, indem du einfach auf eine beliebige Box in der Karte klickst, woraufhin du dann in der Sidebar die Statistiken auswählen kannst, die du angezeigt bekommen möchtest. + +## Download + +Wenn du auf der Seite der openSenseMap den Reiter "Datendownload" auswählst, kannst du eine Reihe von räumlichen und zeitlichen Filtern auf die bereits von den senseBoxen gemessenen Werte anwenden. + +![](/img/open-sensemap-bilder/datendownload/1-download.png) + +### Zeitraum auswählen + +Zunächst solltest du einen Zeitraum auswählen, von welchem du die Daten angezeigt haben möchtest. +Dies geht entweder manuell, oder du wählst zwischen "letzte 24 Stunden", "Letzte Woche" oder "Letzter Monat". + +### Gruppieren nach... + +Jetzt wählst du aus, ob du die Daten gemittelt haben möchtest. Hierbei kannst du wieder einen Zeitraum auswählen. +Alternativ ist es aber auch möglich, dir die Rohdaten ausgeben zu lassen. + +### Operation + +Jetzt kannst du unter "Operation" entscheiden, welche Funktion du auf die Werte anwenden möchtest. +Hierbei kannst du dir zum Beispiel das Maximum oder Minimum von gemessenen Temperaturen berechnen lassen. + +### Wähle einen Sensor + +Hier kannst du nun einen Sensor auswählen, von dem du die gewünschten Werte mit den Filtern, die du vorher ausgewählt hast, angezeigt haben möchtest. + +### Columns + +Klicke auf den Button "Columns", um auswählen zu können, welche zusätzlichen Informationen du zu deinen Werten bekommen möchtest. + +> **Achtung**: Je nach Auswahl der Filterparameter kann der Download sehr groß werden (mehrere 100MB)! + +### Formate + +Derzeit wird nur das Datenformat CSV unterstützt, welches problemlos mit Tabellenkalkulations-Tools wie +`Microsoft Excel`, `Libre office`, `R-Studio` oder `ArcGis` verarbeitet werden kann. + +Jede Zeile enthält eine Messung einer senseBox mit dem ausgewählten Phänomen. +Der Messwert (`value`), Standort des Sensors (`lat`, `lng`, Referenzsystem WGS84) und ein Zeitstempel (`createdAt`) sind in je einer Spalte angegeben: + +```csv +createdAt;value;lat;lng +2016-09-20T10:05:49.581Z;18.70;7.64568;51.962372 +2016-09-20T10:00:52.689Z;18.62;7.64568;51.962372 +2016-09-20T09:55:54.282Z;18.47;7.64568;51.962372 +.... +``` + +## API-Download + +Falls die beiden genannten Möglichkeiten nicht flexibel genug sind, können über die [REST API unter `/boxes/data`](https://docs.opensensemap.org/#api-Measurements-getData-) auch komplexe Anfragen gestellt werden. + +Für solche Anfragen bietet sich das Kommandozeilenwerkzeug `curl` an. +Unter Linux ein Terminal öffnen und beispielsweise folgenden Befehl eingeben, um sämtliche Temperatur-Messungen im geographischen Bereich 51°N - 52°N, 7°E - 8°E in die Datei `measurements.csv` herunterzuladen: + +``` +curl "https://api.opensensemap.org/boxes/data?phenomenon=Temperatur&bbox=7,51,8,52" > measurements.csv +``` + +Andere geeignete Parameter (Zeitraum, Box-IDs, ...) lassen sich der verlinkten API-Dokumentation entnehmen. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/faq.mdx b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/faq.mdx new file mode 100644 index 0000000..40f3165 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/faq.mdx @@ -0,0 +1,51 @@ +--- +title: 'openSenseMap FAQ' +hide_title: false +--- + +# Willkommen auf der openSenseMap - Deiner Plattform für freie Umweltdaten. + +
+ Wer steckt hinter dem Projekt? + + Die [opensenseMap](https://opensensemap.org/) ist im Jahr 2014 vom Institut für + Geoinformatik der Universität Münster ins Leben gerufen worden. Seit dem Start + ist die openSenseMap eng mit dem Projekt der [senseBox](https://sensebox.de) verbunden. +
+ +
+ Welche Art von Daten kann ich hochladen? + + Die openSenseMap versteht nur numerische Messwerte. Texte, Bilder oder binäre Dateien können nicht übertragen werden. +
+ +
+ Wie kann ich Daten hochladen? + + Die Messwerte können über eine Vielzahl verschiedener Geräte hochgeladen werden. +
+ +
+ Wie viele Daten kann ich pro Minute hochladen? + + Um die Datenbank nicht zu überlasten, können 6 Pakete mit Messwerten pro Minute hochgeladen werden. Du solltest daher darauf achten. +
+ +
+ Wo werden die Daten gespeichert? + + Die Daten werden auf dem Rechenzentrum der Uni Münster gespeichert. +
+ +
+ Welche Geräte werden unterstützt? + + Die openSenseMap empfängt, als offene Plattform, Daten von allen Geräten, die ihre Messdaten zur openSenseMap schicken. +
+ +
+ Ich habe keine senseBox kann ich trotzdem Daten hochladen? + + Nicht nur von der senseBox können Daten auf die openSenseMap geladen werden. Die openSenseMap unterstützt auch Messgeräte aus den Citizen Science Projekten [luftdaten.info](https://luftdaten.info/) und [HackAIR](https://www.hackair.eu/). Dank der [REST API](https://docs.opensensemap.org/) können jedoch von fast jedem IoT-Messgeräte Messwerte an die openSenseMap gesendet werden. Weitere Informationen und wie du dein Messgerät registrierst, findest du unter [https://docs.sensebox.de/](https://docs.sensebox.de/). +
+ diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/hackair.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/hackair.md new file mode 100644 index 0000000..bb164a5 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/hackair.md @@ -0,0 +1,41 @@ +--- +sidebar_position: 4 +title: hackAIR +hide_title: false +description: Anleitung eines hackAIR +--- +# hackAIR + +Es besteht die Möglichkeit, die gemessenen Daten der hackAIR home Sensoren (Version 2) auch an die openSenseMap zu senden. + +Dazu musst du zuerst deinen hackAIR Sensor wie folgt [zusammenbauen](http://www.hackair.eu/hackair-home-v2/) und den [hackAIR-v2-advanced](https://github.com/mkraats/hackair-v2-advanced) aufspielen. + +Danach steht dir die openSenseMap-Konfiguration im Webinterface zur Verfügung. + +![](/img/open-sensemap-bilder/hackair/02_Sensor_Konfiguration.png) + +Danach muss eine senseBox auf der openSenseMap mit der korrekten Hardware registriert werden. + +## 1. Neue senseBox [registrieren](https://opensensemap.org/register) +- User, Standort, Aufstellungsort und Namen ausfüllen. Gruppenkennzeichnung könnte z.B. hackAIR sein. +- Unter dem Punkt **"Hardware"** im Schritt **"meine senseBox"** das Feld **"hackAIR"** ausklappen und die passende Sensorkonfiguration auswählen. + +![](/img/open-sensemap-bilder/hackair/01_openSenseMap_Konfiguration.png) + + +- Registrierung abschließen. +- **Wichtig:** `senseBox ID` kopieren. Dies ist eine 24 Zeichen lange Zeichenkette, die ungefähr so aussieht: *58a88c6b650831d8a3625e01* +- **Wichtig:** `access token` kopieren. Dies ist eine 64 Zeichen lange Zeichenkette. +- Wenn eine korrekte E-Mailadresse angegeben wurde, kommt die senseBox-ID auch nochmal per Mail. (zum Beispiel: *Deine senseBox-ID lautet: 58a88c6b650831d8a3625e01*) + +## 2. hackAIR Gerät konfigurieren +Der `hackAIR home v2` Sensor lässt sich bequem über eine Webseite konfigurieren. Dazu schließt ihr das Gerät am Strom an. +Danach sollte ein offenes Netzwerk mit dem Namen `ESP-wemos` verfügbar sein. Danach müsst ihr noch folgende Schritte durchführen: + +- Mit dem Browser die Konfigurationsseite des hackAIR home v2 aufrufen (http://192.168.4.1). +- Unter dem Punkt **Configure WiFi** tragt ihr im Feld **openSenseMap senseBox ID** die *senseBox-ID* ein. +- Unter dem Punkt **Configure WiFi** tragt ihr im Feld **senseBox access token** den *access token* ein. +- Ganz unten auf der Seite auf **Save** klicken. + +## Fertig +Der `hackAIR home v2` Sensor sollte nun die Daten an die openSenseMap senden. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/luftdaten.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/luftdaten.md new file mode 100644 index 0000000..c6a6f81 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/luftdaten.md @@ -0,0 +1,38 @@ +--- +sidebar_position: 5 +title: luftdaten.info +hide_title: false +description: Registrieren einer neuen senseBox auf der openSenseMap +--- +# luftdaten.info + +Die Feinstaubsensoren des OK Lab Stuttgart [Luftdaten.info](https://luftdaten.info/) erlauben es, die gemessenen Daten auch an die openSenseMap zu senden. Um die Daten an die openSenseMap zu senden, muss zuallererst herausgefunden werden, welche Sensoren am Feinstaubsensor verwendet werden. Dies kann man am besten in dem Webinterface des Feinstaubsensors nachsehen. ([Abb.1](#abbildung-1-webinterface-feinstaubsensor)) + +Danach muss eine senseBox auf der openSenseMap mit der gerade erhaltenen Konfiguration registriert werden. +Sollten bei der Registrierung die falschen Sensoren ausgewählt worden sein, ist es am einfachsten die Box einfach wieder zu löschen und mit der korrekten Sensorkonfiguration neu zu registrieren. + +## 1. Neue senseBox registrieren +Erstellen einer neuen senseBox unter: [registrieren](https://opensensemap.org/register) +- User, Standort, Aufstellungsort und Namen ausfüllen. Gruppenkennzeichnung könnte z.B. Luftdaten sein. +- Unter dem Punkt **"Hardware"** im Schritt **"meine senseBox"** das Feld **"luftdaten.info"** ausklappen und die passende Sensorkonfiguration auswählen. ([Abb.2](#abbildung-2-registrierung-opensensemap)) +- Registrierung abschließen. +- **Wichtig:** senseBox ID kopieren. Dies ist eine 24 Zeichen lange Zeichenkette, die ungefähr so aussieht: *58a88c6b650831d8a3625e01*. +- Wenn eine korrekte E-Mailadresse angegeben wurde, kommt die senseBox ID auch nochmal per Mail (zum Beispiel: *Deine senseBox-ID lautet: 58a88c6b650831d8a3625e01*). + +## 2. Feinstaubsensor konfigurieren +Der Feinstaubsensor von Luftdaten.info lässt sich bequem über eine Webseite konfigurieren. Hierfür muss zuerst die IP des Gerätes im WLAN ausfindig gemacht werden. Dies gelingt am besten durch Ablesen im WLAN-Router. + +- Mit dem Browser die Konfigurationsseite des Feinstaubsensors aufrufen. +- Unter dem Punkt **Weitere APIs** einen Haken bei **An openSenseMap senden** machen. In das Feld *senseBox-ID* die eigene senseBox-ID eintragen. +- Ganz unten auf der Seite auf **Speichern** klicken. + +## Fertig +Der Feinstaubsensor sollte nun seine Daten an die openSenseMap senden. + +## Abbildung 1: Webinterface Feinstaubsensor + +![](/img/open-sensemap-bilder/luftdaten/02_Sensor_Konfiguration.png) + +## Abbildung 2: Registrierung openSenseMap + +![](/img/open-sensemap-bilder/luftdaten/01_openSenseMap_Konfiguration.png) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/manage.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/manage.md new file mode 100644 index 0000000..57cb5d8 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/manage.md @@ -0,0 +1,33 @@ +--- +sidebar_position: 6 +title: Verwalten von Boxen +hide_title: false +description: Verwalten von senseBoxen +--- + +# Verwalten von Boxen + +Jeder registrierte Nutzer kann beliebig viele Boxen auf der openSenseMap verwalten. +Wenn die Einstellungen einer Box nachträglich geändert oder der Sketch heruntergeladen werden sollen, ist dies über das **Dashboard** möglich. +Dieses ist in der Menuleiste unter dem User-Icon verfügbar, sobald ein Nutzer eingeloggt ist: + +![](/img/open-sensemap-bilder/manage/osem_dashboard.png) + +Im Dashboard können... + +- [neue Boxen registriert werden](/opensensemap/opensensemap-register/), +- bestehende Boxen angepasst oder entfernt werden, +- Sketches zur Programmierung einer Box heruntergeladen werden. + +## senseBox anpassen +Durch Klick auf den *ÄNDERN*-Button einer Box im Dashboard können beliebige Eigenschaften dieser Box nachträglich verändert werden. +Nachdem in einem der Abschnitte Änderungen vorgenommen wurden, werden diese durch Klick auf das Diskettensymbol oben rechts übernommen. + +> ***Hinweis:*** *Wenn die Sensorkonfiguration geändert wurde, muss der Programmcode der senseBox in den allermeisten Fällen ebenfalls aktualisiert werden. Dieser ist unter dem Reiter Skript zu finden, um ihn in die Arduino IDE zu kopieren. Falls die WiFi-Version der senseBox verwendet wird, muss erneut die SSID und das WiFi Passwort im Sketch ersetzt werden!* + +## senseBox löschen +Falls eine senseBox nicht mehr verwendet wird oder die Messungen dieser Box von der openSenseMap entfernt werden sollen, kann diese gelöscht werden. +Dazu muss im Bearbeitungsmodus (s.o.) im Reiter *Allgemein* unter dem Feld "senseBox löschen" der Wert `DELETE` eingetragen werden. +Anschließend erscheint unter dem Feld ein Button, durch welchen die senseBox und ihre Messungen gelöscht werden. + +> ***Achtung:*** *Hierdurch werden neben der senseBox alle hinterlegten Sensordaten unwiderruflich entfernt! Da die Messungen auch für eine nachträgliche Datenauswertung wertvoll sein können, muss abgewägt werden, ob die senseBox gelöscht werden sollte.* diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/mqtt.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/mqtt.md new file mode 100644 index 0000000..158df33 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/mqtt.md @@ -0,0 +1,27 @@ +--- +sidebar_position: 7 +title: MQTT Integration +description: MQTT Integration für die openSenseMap +hide_title: false +--- + +# MQTT Integration + +Diese Anleitung beschreibt die Möglichkeit, Messwerte über MQTT an die openSenseMap zu senden. Die openSenseMap ist in der Lage, sich als MQTT Client mit einem öffentlichen MQTT Broker zu verbinden. Einen eigenen MQTT Broker bietet die openSenseMap nicht an. Der openSenseMap MQTT Client verbindet sich, wenn nicht anders in den Verbindungseinstellungen angegeben, mit einer 13 Stelligen ID mit prefix `osem_` gefolgt von 8 zufälligen Ziffern und Buchstaben von A bis F. + +Für jede registrierte senseBox müssen separate MQTT Einstellungen vorgenommen werden. Für eine Verbindung mit einem Broker können die folgenden Parameter angegeben werden. Alle angegeben Einstellungen werden in der Datenbank der openSenseMap gespeichert. Es bietet sich also an, eigene Zugangsdaten einzurichten. + +## URL +Die Adresse zum MQTT Broker sollte mit `mqtt://` oder `ws://` beginnen. Sollte der MQTT Broker eine Authentifizierung mittels Nutzername und Passwort benötigen, können diese in der URL kodiert werden. Die URL sollte dann wie folgt aussehen: `mqtt://username:password@hostname.of.mqtt.broker`. + +## Topic +Das MQTT Topic unter dem die openSenseMap Nachrichten empfangen soll, kann zum Beispiel `home/temperatures/outside` lauten. + +## Nachrichtenformat +Hier sollte zwischen `json` und `csv` ausgewählt werden. Die Formate entsprechen JSON-Array und csv dokumentiert in [docs.opensensemap.org](https://docs.opensensemap.org/#api-Measurements-postNewMeasurements). + +## Dekodierungsoptionen +Erwartet ein JSON Objekt. Nur für Nachrichtenformat json: Erlaubt es, unter dem Schlüssel jsonPath einen JSONPath Ausdruck anzugeben, welches die Position der JSON kodierten Daten angibt. Beispiel: `{"jsonPath":"$.payload_fields"}`. + +## Verbindungsoptionen +Erwartet ein JSON Objekt. Erlaubt es, dem MQTT Client Verbindungsoptionen zu übergeben. Die Schlüssel `keepAlive`, `reschedulePings`, `clientId`, `username` und `password` von [https://github.com/mqttjs/MQTT.js#client](https://github.com/mqttjs/MQTT.js#client) sind erlaubt. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/register.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/register.md new file mode 100644 index 0000000..e723141 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/register.md @@ -0,0 +1,30 @@ +--- +sidebar_position: 8 +title: Registrieren einer neuen senseBox +description: Registrieren einer neuen senseBox auf der openSenseMap +hide_title: false +--- + +Um eine neue senseBox auf der openSenseMap zu registrieren, muss zunächst unter *Anmelden* ein Nutzer-Account erstellt werden. +Anschließend ist unter dem User-Logo oben rechts das Dashboard zu finden, über welches senseBoxen hinzugefügt und [verwaltet](/opensensemap/opensensemap-manage/) werden können. + +Unter *Neue senseBox* kann nun eine neue senseBox registriert werden. Die folgenden Angaben sind notwendig: + +- **Name der senseBox**: z.B. der Standort +- **Aufstellungsort**: dient der Filterung von Boxen +- **Standort**: kann über die Karte ausgewählt werden +- **Modell**: bestimmt die Sensorkonfiguration + +Es gibt eine Vorauswahl für verschiedene Modelle. +Falls eine nicht vorhandene Sensorkonfiguration vorliegt, können einzelne Sensoren unter *Manuelle Konfiguration* von Hand hinzugefügt werden. + +Nachdem die Registrierung abgeschlossen wurde, wird ein Arduino-Sketch angezeigt, welcher die angegebenen Sensoren ausliest und deren Daten regelmäßig zur openSenseMap überträgt. +Um diesen auf die senseBox zu übertragen, wird die [Arduino IDE](https://www.arduino.cc/en/Main/Software) benötigt, eine exemplarische Installations-Anleitung für die *senseBox:home* ist [hier](https://home.books.sensebox.de/de/software_installation.html) zu finden. + +## Erweiterte Konfiguration +Es besteht die Möglichkeit neben der [HTTP REST API](https://docs.opensensemap.org/) auch andere Schnittstellen zur Datenübertragung zu nutzen. +Einstellungen hierfür müssen unter dem entsprechenden Reiter im Abschnitt *Erweitert* vorgenommen werden. +Detaillierte Anleitungen dazu sind hier zu finden: + +> - [MQTT](mqtt_client.md) +> - [TheThingsNetwork](ttn_integration.md) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/scriptable.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/scriptable.md new file mode 100644 index 0000000..ef98609 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/scriptable.md @@ -0,0 +1,19 @@ +--- +sidebar_position: 11 +title: openSenseMap iOS Widget +description: Ein einfaches Widget für iOS 14 Geräte +--- + +![](/img/open-sensemap-bilder/scriptable/widget.jpg) + +Über die App [Scriptable](https://apps.apple.com/de/app/scriptable/id1405459188) lassen sich unter iOS 14 schnell und einfach kleine Widgets bauen. Mit dem folgenden Code könnt ihr euch ein kleines Widget zum Abrufen der Messwerte eurer senseBox erstellen. Kopiert dazu einfach eure senseBox ID und die Sensor ID in das Script und öffnet dieses in Scriptable. + +Wenn ihr folgende URL direkt über ein iOS Gerät öffnet, auf dem App installiert ist, wird das Widget automatisch hinzugefügt. +[scriptable:///run?scriptName=Osem%20Widget](scriptable:///run?scriptName=Osem%20Widget) + +Alternativ könnt ihr den Code über folgenden [Link](https://gist.github.com/mariopesch/61fc8167b84776225ce4d7c7738bba9b) abrufen und kopieren. + +Viel Spaß damit! + + +> - [Scriptable](https://apps.apple.com/de/app/scriptable/id1405459188) \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/security.md b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/security.md new file mode 100644 index 0000000..12f36d2 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/misc/opensensemap/security.md @@ -0,0 +1,22 @@ +--- +sidebar_position: 10 +title: Sicherheit +description: Sicherer Datenupload zur openSenseMap +--- +# Sicherheit + +Es besteht die Möglichkeit, deine senseBox mit einem Token vor falscher Dateneingabe zu schützen. Diese Option lässt sich auf der openSenseMap in deinem Dashboard pro senseBox aktivieren oder deaktivieren. Zudem hast du dort die Möglichkeit, einen neuen Token zu generieren, falls dieser in die falschen Hände gefallen sein sollte. + +![](/img/open-sensemap-bilder/security/security_osem_de.jpg) + +## Wie wird der Token genutzt? + +Sobald du die Option "Authentifizierung aktivieren" ausgewählt hast, müssen alle POST-Requests für deine senseBox an die Endpunkte `https://api.opensensemap.org/boxes/:senseBoxId/:sensorId` und `https://api.opensensemap.org/boxes/:senseBoxId/data` mit einem Authorization-Header versehen werden. Requests ohne diese Header oder mit einem falschen Token werden von der openSenseMap nicht mehr akzeptiert. So ein Header sieht wie folgt aus: + +``` +'Authorization' : 'YOUR_BOX_ACCESS_TOKEN' +``` + +## MQTT und TTN + +Solltest du die Datenübertragung per MQTT oder TTN durchführen, brauchst du diesen Authentifizierungs-Token zwar nicht, es ist aber trotzdem ratsam, die Authentifizierung zu aktivieren, um zu verhindern, dass Dritte Daten zu deiner senseBox senden. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/bike/app/benutzung.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/app/benutzung.mdx new file mode 100644 index 0000000..fde7d80 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/app/benutzung.mdx @@ -0,0 +1,18 @@ +--- +title: Setting Up the App +--- + +# Setting Up the App + +Once the senseBox:bike app is successfully connected to your senseBox:bike, you gain access to live data displayed during your bike ride. +This live data includes a variety of environmental parameters and information about the condition of your bike. + + +## Live Data +You have the option to record this data locally and review it later. However, if you want to upload the data to openSenseMap simultaneously, you must first link your user account with the app. This function is located in the menu of the senseBox:bike app. + +After successfully linking your account, the data will be automatically uploaded to openSenseMap during recording. This allows you to share your collected data with other users and contribute to environmental research and mapping. + +## Private Zones + +Furthermore, the senseBox:bike app offers the possibility to set up private zones. In these zones, such as your home, no data will be collected or uploaded to openSenseMap. This ensures your privacy and allows you to customize data collection according to your individual needs. You can find and configure this function in the settings menu of the app. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/bike/app/download.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/app/download.mdx new file mode 100644 index 0000000..82955b5 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/app/download.mdx @@ -0,0 +1,35 @@ +--- +title: Download +--- + +import GooglePlayBadge from "@site/static/img/bike/app/google-play-badge.png"; +import iosPlayBadge from "@site/static/img/bike/app/apple-store-badge.png"; +import GoogleQRCode from "@site/static/img/bike/app/google-qr-code.png" +import iosQRCode from "@site/static/img/bike/app/apple-qr-code.png" + +# Download + +Before you can start using your senseBox:bike, make sure you have downloaded the senseBox:bike app to your smartphone. This app allows you to visualize and control the data from your senseBox:bike. + +
+
+ + Google Play Store + + QR Code Google Play Store +
+
+ + Apple Play Store + + QR Code Apple Store +
+
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/bike/app/setup.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/app/setup.mdx new file mode 100644 index 0000000..1ead72e --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/app/setup.mdx @@ -0,0 +1,3 @@ +--- +title: Installation +--- diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/bike/bike-overview.md b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/bike-overview.md new file mode 100644 index 0000000..6d49aac --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/bike-overview.md @@ -0,0 +1 @@ +Hello from bike \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/bike/halterung/installation.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/halterung/installation.mdx new file mode 100644 index 0000000..78a7905 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/halterung/installation.mdx @@ -0,0 +1,44 @@ +--- +title: Installation +--- +import halterungSattel from "@site/static/img/bike/halterung/halterungSattel.png" +import halterungGepaeck from "@site/static/img/bike/halterung/halterungGepaeck.png" + +# Installation + +## Step 1: Preparation +- Unpack the delivery and check the contents for completeness. +- Ensure that you have received both the seat post mount and the luggage rack mount. + + +## Step 2: Mounting the Brackets + +
+
+ Seat post mount +

Seat post mount

+
+
+ Luggage rack mount +

Luggage rack mount

+
+
+- Select the desired mounting location for the holder: seat post or luggage rack. +- Attach the holder to your bicycle. Ensure that the small lever on the slider points forward in the direction of travel. +- Make sure the holder is securely and firmly attached to prevent slipping during the ride. + + +## Step 3: Mounting the senseBox:bikeapp + - Place the senseBox:bike on the slider of the holder. + - Carefully push the senseBox:bike onto the slider until it securely clicks into place. + - You can now start your ride. + +:::info +Note: Please regularly check the mounting of the senseBox:bike to ensure it is securely and correctly attached. +::: + + +## Removing the senseBox:bike +To detach the senseBox:bike, simply press the small lever on the slider, located at the front in the direction of travel. +Pressing the lever releases the lock, allowing you to slide the senseBox:bike off the slider. +Be sure to perform this action carefully and in a controlled manner to avoid any damage. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/bike/halterung/revisionen.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/halterung/revisionen.mdx new file mode 100644 index 0000000..e69de29 diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/bike/misc/care.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/misc/care.mdx new file mode 100644 index 0000000..2a29507 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/misc/care.mdx @@ -0,0 +1,11 @@ +--- +title: Care Instructions for the senseBox:bike +--- + +# Care Instructions for the senseBox:bike + +To ensure the optimal performance and longevity of your senseBox:bike, please follow these care instructions: +- Regularly clean the senseBox:bike with a soft, dry cloth to remove dust and dirt. +- Avoid contact with water or other liquids to prevent damage to the sensors and electronic components. +- Store the senseBox:bike in a dry and clean place, away from direct sunlight and extreme temperatures. +- Regularly check the attachment of the senseBox:bike to the bicycle to ensure it is secure and firmly in place. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/bike/misc/errors.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/misc/errors.mdx new file mode 100644 index 0000000..e82c83a --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/bike/misc/errors.mdx @@ -0,0 +1,22 @@ +--- +title: Troubleshooting +--- + +# Troubleshooting +If you encounter any issues with your senseBox:bike, please refer to the following troubleshooting tips. + +## No connection to the App +- Make sure the senseBox:bike is turned on and within range of your smartphone. +- Check if Bluetooth is enabled on your smartphone and the app has the necessary permissions. +- Try reconnecting by closing and reopening the app. + +## Sensors providing no data + - Make sure the senseBox:bike is properly mounted and turned on. + - Wait for about 10 seconds after pressing the start button for all sensors to be successfully configuredrt sind + +## Incorrect data recording + - Check the settings and configurations in the app to ensure all parameters are set correctly. + - Update the firmware of the senseBox:bike and the app to fix any software issues. + - Reset the senseBox:bike to factory settings and reconfigure it + +If the problem persists, please contact our customer support for further assistance. \ No newline at end of file diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-1.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-1.mdx new file mode 100644 index 0000000..d6765e8 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-1.mdx @@ -0,0 +1,33 @@ +--- +title: Prepare Sensor Mounts +--- + +# Prepare Sensor Mounts + +The display, CO2 sensor, and RGB LED are attached to the sensor mount. Later, it will be connected to the mainboard and tested. + +First, attach the four middle spacers on the top side: + +![](/img/co2ampel/image3.jpg) + +Next, you need 6 short spacers and attach them as follows on the same side of the PCB mount: + +![](/img/co2ampel/image4.jpg) + +Now attach 5 short spacers on the underside: + +![](/img/co2ampel/image5.jpg) + +Now attach the CO2 sensor and the RGB LED to the underside: + +![](/img/co2ampel/image6.jpg) +![](/img/co2ampel/image7.jpg) + +Finally, attach the frosted plexiglass over the RGB LED on the top side and the display on the other end. Make sure the display is oriented correctly: + +![](/img/co2ampel/image8.jpg) + +Your result should look like this: + +![](/img/co2ampel/image9.jpg) +![](/img/co2ampel/image10.jpg) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-2.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-2.mdx new file mode 100644 index 0000000..7f54c5c --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-2.mdx @@ -0,0 +1,35 @@ +--- +title: Connect components to the MCU +--- + +# Connect components to the MCU + +Insert the four long spacers into the corner holes of the senseBox MCU: + +![](/img/co2ampel/image11.jpg) + +Before attaching the board to the bottom of the case, first remove the protective film from both sides of the large plexiglass plate: + +![](/img/co2ampel/image12.jpg) + +Now place the MCU on the plate so that the corners fit into the four drilled holes and the board does not cover the elongated cutouts of the case bottom: + +![](/img/co2ampel/image13.jpg) + +Use the black plastic clips to secure it. Insert them from below through the plexiglass plate and then through the board. Press them firmly until they snap into place: + +![](/img/co2ampel/image14.jpg) +![](/img/co2ampel/image15.jpg) + +Now insert a connection cable for the RGB LED into one of the digital ports and two connection cables for the display and CO2 sensor into one of the three I2C slots: + +![](/img/co2ampel/image6.jpg) + +Now you can connect the cables to the CO2 sensor, the display, and the RGB LED. Make sure that the RGB LED is connected to the digital port, and the display and CO2 sensor are each connected to one of the I2C ports: + +![](/img/co2ampel/image17.jpg) +![](/img/co2ampel/image18.jpg) + +Now you can connect the sensor holder to the MCU using the long spacers. Make sure that the holder is not attached the wrong way around and is exactly parallel to the MCU: + +![](/img/co2ampel/image19.jpg) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-3.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-3.mdx new file mode 100644 index 0000000..e890786 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-3.mdx @@ -0,0 +1,24 @@ +--- +title: Installing and Testing the Software +--- + +# Installing and Testing the Software + +To be able to test the traffic light, you must download the programme file [here](@site/static/arduino-sketches/co2-trafficlight/co2ampel_watchdog/co2ampel_watchdog.bin) and transfer it to the senseBox. To do this, connect the measuring station to a PC using the USB cable +with the USB cable. There is a red button next to the USB port on the MCU. Press it twice in succession. + +![](/img/co2ampel/image20.jpg) + +After that, the senseBox should appear as a new removable drive in your operating system. + +![](/img/co2ampel/image21.png) + +Now copy the file _sensebox_co2_ampel.bin_ from your download folder to the "SENSEBOX" removable drive: + +![](/img/co2ampel/image22.png) + +The station will then restart automatically and should display the first measurement values on the screen. + +![](/img/co2ampel/image23.jpg) + +If the display remains black, press the reset button mentioned above once to restart the program on the station. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-4.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-4.mdx new file mode 100644 index 0000000..2132ded --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/aufbau/aufbau-co2Ampel-schritt-4.mdx @@ -0,0 +1,15 @@ +--- +title: Installing the senseBox in the Case +--- + +# Installing the senseBox in the Case + +Next, insert the side walls. **_DO NOT_** remove the film from the side parts, as they will stay in place more firmly when assembled: + +![](/img/co2ampel/image25.jpg) + +Finally, remove the protective film from both sides of the case cover and attach it so that the spacers and side parts snap into place: + +![](/img/co2ampel/image26.jpg) + +Now the CO2 traffic light is ready for use! You can now hang it up and connect it to a power outlet using the USB cable and power adapter. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/co2Ampel-overview.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/co2Ampel-overview.mdx new file mode 100644 index 0000000..4af3c64 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/co2Ampel/co2Ampel-overview.mdx @@ -0,0 +1,43 @@ +--- +title: CO2 Traffic Light +--- + +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText"; +import image1 from "@site/static/img/co2ampel/image1.jpg"; +import image2 from "@site/static/img/co2ampel/image2.jpg"; + +# CO2 Traffic Light + + + +# Required Components + +
+
+ + +
+
+
    +
  • senseBox Microcontroller (MCU)
  • +
  • CO2 Sensor
  • +
  • RGB LED
  • +
  • Display
  • +
  • 3x JST Connection Cables
  • +
  • USB Cable
  • +
  • USB Power Supply
  • +
+
    +
  • Case Parts
  • +
      +
    • 11x Short Spacers
    • +
    • 4x Medium Spacers
    • +
    • 4x Long Spacers
    • +
    • 2x Black Plastic Clips
    • +
    • PCB Sensor Holder
    • +
    • 6x Plexiglass Plates
    • +
    • 1x Piece of Frosted Plexiglass
    • +
    +
+
+
diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/_category_.json b/i18n/en/docusaurus-plugin-content-docs/current/products/home/_category_.json new file mode 100644 index 0000000..a6cb8db --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "senseBox:home", + "position": 9, + "link": { + "type": "generated-index", + "description": "5 minutes to learn the most important Docusaurus concepts." + } +} diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau-home-v1.md b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau-home-v1.md new file mode 100644 index 0000000..650b016 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau-home-v1.md @@ -0,0 +1,204 @@ +--- +date: 2021-01-28 +title: Aufbau der senseBox:home v1 +categories: misc +description: Aufbau der senseBox:home mit Arduino Uno +type: Document +image1: /images/2021-01-28-rtc-modul/rtc.png +--- + +# **Aufbau der senseBox:home** + +Diese Anleitung ist nur für Nutzer:innen der senseBox:home v1, die mit einem Arduino/Genuino Uno ausgeliefert wurde. Diese Version der senseBox wird seit Anfang 2018 nicht mehr verkauft! Die Dokumentation zur aktuellen Version der senseBox:home mit senseBox MCU ist `[hier](/sensebox-home/home-schritt-1/)` zu finden. + +## Inhalt der senseBox + +#### Basisstation bestehend aus drei Platinen + +Die senseBox:home ist in zwei Ausgaben verfügbar: Einmal mit LAN-, und einmal mit WLAN-Netzwerkverbindung. +Je nach Ausgabe ist ein W5500 Ethernet Shield, oder ein Watterott WLAN-Shield enthalten. + +![](/img/aufbau-home-v1-bilder/sensebox_home_platinen.jpg) + +|Platine|Beschreibung| +| ----- | ------ | +|Genuino Uno (unten)|Liest die angeschlossenen Sensoren aus und überträgt die Messungen ins Internet| +|W5500 Ethernet Shield oder Watterott WLAN-Shield (mitte)|Ist für die Internetverbindung zuständig| +|senseBox Shield (oben)|Hier werden die Sensoren angeschlossen| + +#### Grundausstattung mit vier Sensoren + +![](/img/aufbau-home-v1-bilder/sensebox_home_sensoren.jpg) + + +|Sensor|Beschreibung| +|---|---| +|HDC1008|Temperatur in Grad Celsius (°C) und relative Luftfeuchte in Prozent (%)| +|BMP280|Luftdruck in Pascal (pa)| +|TSL45315|Beleuchtungsstärke des sichtbaren Lichts in Lux (lx)| +|VEML6070|Intensität der ultravioletten Strahlung in Mikrowatt pro Quadratcentimeter (μW/cm2) + +#### Anschlusskabel für Sensoren und USB-Verbindung + +- 1x USB-Kabel für den Anschluss des Mikrocontrollers an den Computer +- 1x langes Verbindungskabel für kombiniertes Thermo- bzw. Hygrometer +- 3x kurzes Verbindungskabel für Barometer, Luxmeter und UV-Lichtsensor + +#### Netzteil + +- 9V Netzteil (670mA) + +#### Gesamtüberblick: + +![](/img/aufbau-home-v1-bilder/sensebox_home_alles.jpg) + + +## Zusätzliche Materialien (NICHT im Lieferumfang enthalten) + +- LAN-Kabel für den Anschluss der senseBox an euren Router, falls die senseBox:home LAN vorliegt +- Gehäuse für eine wetterfeste Installation der Elektronik +- Werkzeuge für den Aufbau wie z.B. Heißklebepistole + +--- + +# Aufbau der senseBox +Du kannst deine Messstation kann in wenigen Schritten zusammenbauen. + +> Die senseBox wird entweder über das USB-Kabel oder über das Netzteil mit Strom versorgt. Für den temporären Betrieb wird das Netzteil also nicht benötigt. + +Im Bausatz der senseBox:home befinden sich vier kleinen Platinen mit den Sensoren. Die eigentlichen Sensoren sind nur wenige Millimeter groß und befinden sich auf der Oberseite der Platinen. Um einer Beschädigung vorzubeugen, solltest du die kleinen Sensoren nicht berühren, sondern die Platinen nur am Rand anfassen. Der Anschluss der Sensoren ist denkbar einfach: Benutze die Verbindungskabel, um die Sensoren mit den mittleren Steckplätzen auf der Basisstation zu verbinden. Welcher Anschluss dabei gewählt wird spielt keine Rolle. + +![](/img/aufbau-home-v1-bilder/02_connection.png) + + +> Das lange Verbindungskabel ist für den HDC1008 gedacht, um ihn außerhalb eines Gehäuses anbringen zu können! + + +# Treiber und Softwareinstallation +Bevor die senseBox aktiviert werden kann, musst du Treiber sowie eine Software auf deinem Computer installieren. Außerdem ist es vor Inbetriebnahme der senseBox ratsam einen Testlauf durchzuführen, um zu überprüfen ob die Sensoren korrekt funktionieren und die Kommunikation mit dem Internet reibungslos läuft. + +Falls etwas bei dem Testlauf schief geht, melde dich am besten [per Mail](mailto:support@sensebox.de) bei unserem Support. + +## Arduino Software herunterladen +> Für einen reibungslosen Ablauf bitte Arduino 1.8.3 oder höher nutzen. + +Das Mainboard der senseBox ist eine modifizierte Version des Arduino Uno Mikrocontrollers. Um ein Programm auf das Board zu laden, brauchst du die integrierte Entwicklungsumgebung von Arduino, kurz *Arduino IDE*. Lade die neueste Version als zip-Datei von der [Arduino Homepage](https://www.arduino.cc/en/main/software) herunter: + +![](/img/aufbau-home-v1-bilder/03_arduino-dl.png) + + +Arduino ist ein Open-Source Projekt und wird durch Spenden finanziert. Daher wirst du vor dem Download nach einer Spende gefragt; das kannst du überspringen indem du auf „just download“ klickst. + +![](/img/aufbau-home-v1-bilder/04_donate.png) + + +Lege auf deiner Festplatte einen neuen Ordner an und entpacke darin die Zip-Datei. +Durch starten der Datei `arduino.exe` kann die IDE gestartet werden. + +## Installation der IDE unter Linux +Linux-Nutzer können die Linuxvariante herunterladen und entpacken. Das enthaltene `install.sh`-Skript legt automatisch eine Desktopverknüpfung an. +Am schnellsten geht dies über die folgenden Terminal-Befehle: + +```bash +tar -xvf arduino-1.8.3-linux64.tar.xz +cd arduino-1.8.3 +./install.sh +``` + +Um den Arduino programmieren zu können, sind unter Ubuntu 14 & 16 zusätzliche Rechte notwendig. +Diese können für den aktuellen Nutzer mit den folgenden Befehlen eingerichtet werden (benötigt Admin-Rechte): +Führe `udevadm monitor --udev` aus und schließe den Arduino per USB an, um die Device-ID zu bestimmen. +Der angegebene Bezeichnung am Ende der Ausgabe (zB. `ttyUSB0`) ist die Device-ID. +Beende `udevadm` per `ctrl+C`, und führe noch die folgenden Befehle aus, wobei die herausgefundene Device-ID eingesetzt werden muss: + +```bash +sudo usermod -a -G dialout $(whoami) +sudo chmod a+rw /dev/ +``` + +Nach einem Logout und erneutem Login sollte der Arduino aus der Arduino IDE programmierbar sein! + +## Arduino Bibliotheken installieren +Um die Sensoren und die Netzwerkkarte nutzen zu können, müssen noch ein paar Bibliotheken installiert werden. Ein zip-Archiv mit allen benötigten Bibliotheken findest du [hier](https://github.com/sensebox/resources/raw/master/libraries/senseBox_Libraries.zip). + +Lade dieses zip-Archiv herunter und integriere nun die beiden Ordner `examples` und `libraries` aus dem Archiv in deinen Arduino Ordner. +Wenn ihr gefragt werdet ob bestehende Dateien ersetzt werden sollen, folge den Anweisungen unten auf der Seite. + +![](/img/aufbau-home-v1-bilder/06_copy.png) + + +Setze nun wie unten dargestellt im ersten Dialogfeld den Haken unten und bestätigt mit „Ja“. Daraufhin öffnet sich ein neues Fenster, in dem du wieder den Haken setzt, und „Kopieren und ersetzen“ auswählst. + +![](/img/aufbau-home-v1-bilder/07_replace.png) + + +Das folgende Video zeigt den Kopiervorgang noch einmal im Detail: + + + +## Sensoren testen +Die Sensoren der senseBox:home können nun auf funktionstüchtigkeit und getestet werden. +Hierzu gibt es einen Sketch, welcher mit den zuvor Arduino-Bibliotheken installiert wurde. +Vorraussetzung für den test ist natürlich, dass die Sensoren mit dem Arduino verbunden wurden ;) + +1. Arduino Anwendung starten + - Es kann sein, dass nach dem Start eine Meldung über neue Updates erscheint. Fall du die Version 1.6.5 oder höher installiert hast, kannst du dies überspringen. +2. unter `Werkzeuge` → `Board` das `Arduino Uno` auswählen +3. unter `Werkzeuge` → `COM-Port` den entsprechenden Anschluss wählen + - Falls mehrere Auswahlmöglichkeiten angezeigt werden, musst du zuerst den richtigen COM-Port im Geräte Manager finden, oder alle Ports ausprobieren. + +Ladet nun das Programm, um die Sensoren zu testen und übertragt es auf die Messstation: + +1. in der Menüleiste `Datei` → `Beispiele` → `senseBox` → `_01_sensor_test` auswählen +2. das Programm über das **Pfeil** Icon auf den Mikrocontroller laden +3. warten bis das Programm übertragen wurde +4. den seriellen Monitor über das **Lupe** Icon öffnen + +![](/img/aufbau-home-v1-bilder/11_serial1.png) + + +Du kannst durch experimente prüfen, ob sich die gemessene Temperatur, Luftfeuchtigkeit oder Beleuchtungsstärke verändern. +Der Luftdruck lässt sich nicht ohne weiteres beeinflussen. Er sollte grob, je nach Höhenlage und Wetterverhältnissen, zwischen 600 hPa und 1000 hPa liegen. +Die Intensität des UV-Lichts kann nur mit speziellen Lampen oder durch direkte Sonneneinstrahlung getestet werden. +In einem geschlossen Raum sollte keine bzw. nur minimale UV-Strahlung gemessen werden können. + +## Verbindung zur openSenseMap testen +Nach dem selben Schema kann noch die Internetverbindung der senseBox:home getestet werden: + +1. den seriellen Monitor (Fenster mit den Messwerten) schließen +2. wenn ein Ethernet Modell vorliegt: + - ein Netzwerkkabel von eurem Heimnetzwerk mit der senseBox verbinden + - in Menüleiste `Datei` → `Beispiele` → `senseBox` → `_02_internet_test` auswählen +2. mit WLAN-Modell: + - in Menüleiste `Datei` → `Beispiele` → `senseBox` → `_03_wifi_internet_test` + - ganz oben in der Datei `03_wifi_internet_test`die WLAN Zugangsdaten eintragen (Netzwerk-Name und Passwort) +3. das Programm über das **Pfeil** Icon auf den Mikrocontroller laden +4. den seriellen Monitor über das **Lupe** Icon starten + +Wenn die Verbindung klappt, bekommst du eine entsprechende Meldung im seriellen Monitor angezeigt. + +![](/img/aufbau-home-v1-bilder/12_serial2.png) + + +# Web-Integration +Hier wird die Einbindung der senseBox in unser Sensornetzwerk durch die Registrierung auf der openSenseMap beschrieben. + +## Registrierung auf der openSenseMap +Unter `https://opensensemap.org/register` kann eine neue Sensorstation für das openSenseMap Sensornetzwerk registriert werden. + +Während der Registrierung wirst du nach einem Hardware Setup gefragt. Wähle dort die „senseBox:home“ aus und setze danach je nach Variante den Haken bei „senseBox:home (Ethernet)“ oder „senseBox:home (WLAN)“. + +Ein Software-Programm für einen Arduino Mikrocontroller ist an der Dateiendung `.ino` zu erkennen. Eine solche Datei wird benötigt, um eure senseBox mit der openSenseMap im Internet zu verbinden. Den passenden Sketch bekommst du zusammen mit einer E-Mail zugeschickt, wenn die Station auf der openSenseMap registriert wurde. + +## Programm auf die Station laden +Nachdem du den `.ino` Anhang der Email heruntergeladen hast, muss dieses Programm auf deine senseBox geladen werden. Wie man genau ein Programm auf den Mikrocontroller lädt, ist [hier](software_installation.md) ausführlich erklärt worden. Hier die Schritte in der Übersicht: + +- Arduino Anwendung öffnen +- In der Menüleiste `Datei` → `Öffnen` auswählen und die `sensebox.ino` Datei auswählen +- Dialog mit "Ja" bestätigen +- Das Programm über das **Pfeil** Icon auf den Mikrocontroller laden +- Warten bis das Programm übertragen wurde + +Wenn alles richtig gelaufen ist, kannst du nun auf der openSenseMap deine Station auswählen und verfolgen, wie Messungen kontinuierlich übertragen werden! + + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/aufbau-video.md b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/aufbau-video.md new file mode 100644 index 0000000..ad74e87 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/aufbau-video.md @@ -0,0 +1,19 @@ +--- +sidebar_position: 1 +title: senseBox:home assembly Video +description: Assembly of the senseBox:home as a Video +--- +# senseBox:home assembly Video + +> [![](/img/sensebox-home-bilder/aufbau-video/Bildschirmfoto-vom-2022-09-01-15-37-31.png)](https://www.youtube.com/watch?v=dUuRfZI39U8&ab_channel=senseBox) + +This tutorial shows you how to assemble your senseBox:home. +The video is divided into different chapters, and you can jump directly to the individual chapters using the links: + +Inserting the senseBox MCU into the case: 0:10 +Attaching the WiFi-Bee: 0:46 +Assembling the radiation protection housing with temperature and humidity sensor: 1:18 +Assembling the fine dust sensor (SDS011): 2:18 +Connecting the external sensors and the USB cable: 4:34 +Connecting the mounting level for sensors in the case. Connecting the air pressure and light sensor: 5:56 +Final steps: 7:49 diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-aufstellen.md b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-aufstellen.md new file mode 100644 index 0000000..47e7f58 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-aufstellen.md @@ -0,0 +1,36 @@ +--- +sidebar_position: 1 +title: "Setting up the senseBox:home" +description: Setting up the senseBox:home +--- +# Setting up the senseBox:home + +To ensure successful data transmission and maximize data comparability, here are some tips to consider when setting up the senseBox:home. + +## Technical requirements at the installation site + +1. Power Supply: The senseBox requires a continuous power supply. The supplied cable has a length of 3 meters. + +2. Data Transmission: The senseBox needs a way to continuously transmit data to the internet. The senseBox can be ordered with WiFi, LoRa, or LAN as transmission options. Depending on the version, access to the corresponding network (WiFi network, TheThingsNetwork (LoRa), or LAN cable to the router) is required. + +## Installation Site + +1. There is no right or wrong place to set up the senseBox. We encourage you to set up the senseBox where you are most interested in the measurements. + +2. The senseBox community appreciates good documentation on the openSenseMap. This includes: + * A picture of the station + * Characteristics of the installation site, such as height, shelter, orientation + * Other descriptions + +3. From a scientific perspective, there is extensive research on optimal measurement data collection. Many different factors influence the quality of the measurements. We refer to the following points: + * Different positions naturally change the measurements. For example, placing the senseBox directly in the sun can result in very high temperature readings due to radiation. + * It is also better to place the senseBox a bit away from the house wall (e.g., on a balcony railing) to avoid distortion from heat dissipation. Detailed information on meteorological data collection can be found at the following link: [https://globalcryospherewatch.org/bestpractices/docs/wmo_8-2012_en.pdf](https://globalcryospherewatch.org/bestpractices/docs/wmo_8-2012_en.pdf) + +4. The quality of the measurement data also depends on the placement of the sensors within the senseBox. This information can be found in our construction manuals: [www.sensebox.de/en/material](https://sensebox.de/en/material) + +## Maintenance + +1. It is essential to avoid condensation inside the senseBox. Therefore, a visual check of the senseBox is recommended at least once a month. If necessary, the silica gel should be replaced. +2. The senseBox should be regularly cleaned of any accumulated dirt. + +You can find more tips at [www.sensebox.de](https://www.sensebox.de) and in our forum [forum.sensebox.de](https://forum.sensebox.de/). diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-schritt-1.md b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-schritt-1.md new file mode 100644 index 0000000..31e3285 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-schritt-1.md @@ -0,0 +1,172 @@ +--- +sidebar_position: 5 +title: "Step 1: Hardware assembly" +description: Step 1 for assembling the senseBox:home. +--- + +# Step 1: Hardware assembly + +## Welcome to the tutorial for assembling the senseBox:home + +:::info +Note: Since December 2020, a new acrylic case has been used. Only the first step differs from the previous assembly. All other steps can be carried out analogously to the old case. +::: +Since the senseBox is a modular kit, individual steps for sensors may vary or even be skipped in your case. + +## Inserting the MCU into the Case + +In the first step, the MCU is inserted into the case. The system has been slightly revised over time, so a new mounting system has been used since December 2020. + +### senseBox:home from December 2020 + +senseBoxes purchased since December 2020 are equipped with a new case. The assembly differs only slightly in the first steps from the old version. First, we get an overview of the available components. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-32.jpeg) + +The protective film can now be removed from the acrylic plate. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-33.jpeg) + +Now screw the acrylic plate into the case. Make sure that the opening for the USB port aligns with the opening of the case. +After that, you can use the black screws to attach the senseBox MCU to the acrylic plate. Again, ensure that the USB port is aligned with the opening of the case. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-34.jpeg) + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-35.jpeg) + +The following steps can be carried out analogously to the old case/mounting system. + +### senseBox:home until November 2020 + +First, we will show how to insert the microcontroller into the case. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-1.jpg) + +Take the case and align it with the drilled hole facing downwards. Place the green senseBox microcontroller on the opposite side so that the red reset button and the USB port are facing forward. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-2.jpg) + +Now, take the two smaller screws included and attach the PCB to the housing through the middle mounting holes. +If the PCB has some play, it’s not a problem. + +## Attaching the WiFi-Bee + +Next, we’ll demonstrate how to attach the WiFi-Bee. + +Each Bee module includes a marking that indicates the correct orientation. +If you have a different data transmission module, such as LAN or LoRaWAN, the attachment process is the same. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-3.jpg) + +The WiFi-Bee is mounted on XBee Port 1 and carefully pressed into the socket so that all the Bee's pins are securely inserted. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-4.jpg) + +## Assembling the Radiation Shield Housing + +Now, we’ll show how to assemble the radiation shield housing, where the temperature and humidity sensor will be installed. +The radiation shield includes some mounting parts for attaching it externally, but we won’t need them initially. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-5.jpg) + +First, thread a long senseBox cable through the opening at the base of the radiation shield and connect it to the temperature and humidity sensor inside. + +The sensor can also be secured to the stand with tape or a cable tie. +The radiation shield housing ensures good air circulation and protects the sensor from weather conditions. + +Now, assemble the radiation shield housing. Later, the sensor will be connected to the senseBox microcontroller. + +## Assembling the Particulate Matter Sensor + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-10.jpg) + +Next, we’ll demonstrate how to assemble the particulate matter sensor. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-11.jpg) + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-13.jpg) + +The housing for the sensor must have openings for cables and air intake. +These openings should be on opposite sides with two predefined breakpoints each. + +For safety reasons, we recommend drilling these openings. +Theoretically, you can also punch them out at the breakpoints with a blunt object. + +Next, place the particulate matter sensor inside the housing, +ensuring that the cable connection and air intake nozzle align with the newly created openings. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-14.jpg) + +The cable for the particulate matter sensor has a different color and should be connected to the larger connector on the sensor. + +Then, attach the cable glands. +Disassemble the cable gland and arrange the individual parts in the correct order. Then screw them back together securely. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-15.jpg) + +On the other side of the sensor, attach the hose to the air intake nozzle. + +> The air intake nozzle now comes with a filter. This filter prevents coarse dirt and insects from entering the sensor. +> Use a cable gland to seal the hose. After arranging everything correctly, a bit of pressure is required to attach the hose to the nozzle. +> Finally, put on the lid, and the particulate matter sensor is ready. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-16.jpg) + +## Connecting External Sensors to the MCU + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-17.jpg) + +The external sensors, including the temperature and humidity sensor and the particulate matter sensor, are now connected to the MCU. +First, take the cable from the radiation shield and thread it through the last cable gland into the housing. + +Connect the cable to one of the slots labeled I2C/Wire. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-19.jpg) + +Next, take the cable from the particulate matter sensor and thread it through the cable gland. +This cable goes into one of the slots labeled UART/Serial. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-20.jpg) + +## Connecting the USB Cable + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-23.jpg) + +Finally, connect the mini-USB cable, which is used to program the microcontroller and power the senseBox during operation. +Please note that the mini-USB port is sensitive and exposed to the leverage effect of the cable. +Therefore, avoid pulling on the USB cable. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-24.jpg) + +## Connecting Internal Sensors to the MCU + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-25.jpg) + +After connecting the external sensors, the remaining sensors inside the housing are installed. +First, assemble a mounting level. Insert four spacers into the outer holes of the microcontroller. + +The spacers have a snap mechanism. If you need to remove them, press lightly on the head instead of forcing them out. +Next, connect two senseBox cables to the I2C/Wire slots for the air pressure sensor and light sensor. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-26.jpg) + +Thread the cables through the middle openings of the mounting plate. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-27.jpg) + +Then, press the mounting plate onto the spacers and connect the cables to the sensors. +Equip each sensor with two spacers and attach them to the mounting plate. + +If you have chosen a light sensor, place it as centrally as possible in the housing to obtain accurate measurements. +The air pressure sensor can be installed in the outer slot. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-28.jpg) + +Finally, secure the lid with screws and place a silica gel packet inside the housing for additional moisture protection. + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-29.jpg) + +![](/img/sensebox-home-bilder/home-schritt-1/sensebox-home-30.jpg) + +Now, screw in the quick-release fasteners to seal the senseBox. + diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-schritt-2.md b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-schritt-2.md new file mode 100644 index 0000000..680da67 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-schritt-2.md @@ -0,0 +1,40 @@ +--- +sidebar_position: 6 +title: "Step 2: Register on openSenseMap" +description: Step 2 for setting up the senseBox:home +--- + +# Step 2: Register on openSenseMap + +After your measurement station has been assembled, it will be registered on [openSenseMap](https://opensensemap.org). + +openSenseMap is a platform to store, compare, and visualize sensor data. Just take a look at it. Go to [www.opensensemap.org](https://www.opensensemap.org) and discover a huge pool of sensor data from around the world. Not only senseBoxes send data to openSenseMap, but also other microcontrollers with sensors. How the individual functions of openSenseMap and its interfaces work can be found [here](https://docs.sensebox.de/opensensemap/). + +![](/img/sensebox-home-bilder/home-schritt-2/osem-1.png) + +## 1. User Account Registration +Go to [www.opensensemap.org](https://www.opensensemap.org) and create an account. To do this, click on "Login" in the top right corner and then go to "Sign up". You need a valid email address to register. After successful registration, you will receive an email with a confirmation link. Please click the link to complete the registration. + +![](/img/en/sensebox-home-bilder/home-schritt-2/osem-2.png) + +## 2. Create a new senseBox +After successful registration, you can start creating your senseBox. Click on "New senseBox / Neue senseBox" in your menu and accept the terms of use. Then follow the registration instructions and provide the following information: + +* A freely selectable name for the senseBox +* The environment (Exposure) where you want to place your senseBox +* The location where you want to place your senseBox (you can also determine your location automatically) + +![](/img/en/sensebox-home-bilder/home-schritt-2/osem-3.png) + +Since openSenseMap is open to all types of senseBoxes, you will be asked about the hardware you are using. Select *senseBox:home V2* and the data transmission module you are using. If you want to send your data to openSenseMap via LoRa, select LoRa as the "Connection type". Then you can enter your LoRa settings in the "Advanced" tab. Here you need to enter the Application ID and Device ID that you specified on [TheThingsNetwork](www.thethingsnetwork.org). More information can be found [here](/sensebox-home-erweiterungen/home-erweiterung-lora/). + +![](/img/en/sensebox-home-bilder/home-schritt-2/osem-4.png) + +For some sensors, you need to select which port you have connected them to. + +![](/img/en/sensebox-home-bilder/home-schritt-2/osem-5.png) + +## 3. Summary of the Registration and Email +When you have completed the registration, you need to agree to the publication of your data once again. Then you will receive an overview of your registration. There you will see your senseBox ID, your sensor IDs, and the Arduino code. + +The senseBox ID is a unique identifier for your senseBox. With it, you can find your senseBox, for example, via the URL (opensensemap.org/explore/ENTER-YOUR-SENSEBOX-ID-HERE) or track it in datasets. It is also used for various applications and functions related to the senseBox and openSenseMap. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-schritt-3.md b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-schritt-3.md new file mode 100644 index 0000000..a82b5ac --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/aufbau/home-schritt-3.md @@ -0,0 +1,35 @@ +--- +sidebar_position: 7 +title: "Step 3: Transfer Program Code" +description: Step 3 for setting up the senseBox:home +--- + +# Step 3: Transfer Program Code + +After registration, the program code must be copied to the senseBox. If you have a senseBox with WiFi-Bee or Lan-Bee, you can compile the program code online quickly and easily and transfer it via drag-and-drop. You don't need to install any software on your computer. + +## Compile Online + +The easiest way to get your code onto the senseBox is to use our online compiler. You need to provide some information in the form. If something does not fit your individual setup of the senseBox, you can simply leave the field blank. Finally, press "Compile" and a .BIN file will be downloaded by your browser. + +![](/img/sensebox-home-bilder/home-schritt-3/compile.png) + +### Transfer to the senseBox MCU + +Connect your senseBox MCU to your computer and double-click the red button, it will be recognized as a removable drive. By clicking "Compile Code" in the web interface, your program code will be compiled on the server and a .BIN file will be offered for download. Depending on the operating system you are using, the copying process differs. + +#### Copying on Windows + +On Windows, you can simply drag and drop the created .BIN file onto the removable drive SENSEBOX. The red LED on the button will flicker briefly and then the board will restart itself and execute your program code. + +#### Copying on MacOS + +On MacOS, copying the .BIN file via drag and drop unfortunately does not work at the moment. The following options are available to copy the file to the senseBox: + +- Use the [senseBox Copy Tool](https://sensebox.de/docs/senseBox_Sketch_Uploader_DE.zip). Unzip the ZIP file and start the program contained within. +- Use an alternative file manager such as [muCommander](http://www.mucommander.com/) +- Copy the file via Terminal using the dd command (recommended only for experienced users!) + +#### Copying on Linux + +On Linux, you can simply drag and drop the created .BIN file onto the removable drive SENSEBOX. The red LED on the button will flicker briefly and then the board will restart itself and execute your program code. diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/erweiterungen/circuitpython.md b/i18n/en/docusaurus-plugin-content-docs/current/products/home/erweiterungen/circuitpython.md new file mode 100644 index 0000000..82d96ff --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/erweiterungen/circuitpython.md @@ -0,0 +1,156 @@ +--- +date: 2021-01-28 +title: Programming with Circuit Python +categories: misc +description: Program your senseBox MCU with Python +type: Document +resources: + - name: "Circuit Python" + link: https://circuitpython.org/board/sensebox_mcu/ + - name: "Libraries" + link: "https://circuitpython.org/libraries" + - name: senseBox MCU CircuitPython on Github + link: "https://github.com/adafruit/circuitpython/tree/main/ports/atmel-samd/boards/sensebox_mcu" +image1: /images/2021-01-28-rtc-modul/rtc.png +--- + +# Programming with Circuit Python +CircuitPython is a programming language that simplifies experimenting and programming on basic microcontroller boards. Once the board is set up, programming can be done using any text editor. The senseBox MCU is CircuitPython compatible. + +## Installation of Circuit Python + +The latest version can always be downloaded from the official [CircuitPython Website](https://circuitpython.org/board/sensebox_mcu/). +Connect the senseBox MCU to your computer using a USB cable and put it into programming mode by double-clicking the red reset button. Copy the .uf2 file to your senseBox MCU. The senseBox will then be recognized as a new device named "CircuitPy". + +## Programming + +Open/create the file Code.py on the "CircuitPy" drive and copy the following code as the first example: + +```python +import board +import digitalio +import time + +led = digitalio.DigitalInOut(board.GREEN_LED) +led.direction = digitalio.Direction.OUTPUT + +while True: + led.value = True + time.sleep(0.5) + led.value = False + time.sleep(0.5) +``` + +After saving the file, the code will be executed immediately, and the small LED next to the reset button will start blinking. You can now easily modify and save the code, and it will be executed directly. + +Alternatively, you can use the following web editor (only with Google Chrome): +[https://circuitpython.sensebox.de/](https://circuitpython.sensebox.de/) + +Many more details about programming with CircuitPython are available on the official [CircuitPython Website](https://circuitpython.org/awesome). + +## Libraries + +Most components of the senseBox have libraries available that can be used. However, it is important to note that the libraries must be copied to the CIRCUITPY drive. A total of 48Kb of storage is available for this purpose. + +> Note: Due to the limited storage space available for libraries, more complex projects such as the CO2 traffic light or the environmental monitoring station cannot be implemented with CircuitPython. However, the storage space should be sufficient to read individual sensors. + +The complete package with the libraries can be downloaded [here](https://circuitpython.org/libraries). Make sure to download the _.mpy version_. + +### Supported Components + +Since some components do not have libraries available or the libraries are too large, here is a brief list of the tested components: + +:::info +The table may be incomplete and is continuously updated. If you have tested components that are not yet listed, we would appreciate a short feedback. +::: + +| Component | Library Available | Test Successful | +| ------------------- | ----------------- | ---------------------------------------- | +| BME680 Environmental Sensor | Yes | Yes | +| CO2 Sensor | Yes | Yes | +| BMP280 | Yes | Yes (adjustment of the I2C address necessary) | +| HDC1080 | No | No | +| BMX055 | No | No | +| HC-SR04 Ultrasonic | Yes | | +| WS2818 RGB LED | Yes | Yes | +| Display | Yes | Yes | +| SD-Bee | Yes | Yes | +| LoRa-Bee | | | +| WiFi-Bee | No | WiFi is not supported by CP | + +## Serial Monitor + +To access the Serial Monitor via the terminal + +``` +ls /dev/tty.* +``` + +alle verfügbaren Ports auflisten lassen. Die senseBox MCU sollte als usbmodemXXX auftauchen. + +``` +screen /dev/tty.board_name 115200 +``` + +## SD Card + +To load libraries from the SD card, copy the following code as `sdmount_lib.py` onto the SD card. + +```python +import sys + +import adafruit_sdcard +import board +import busio +import digitalio +import storage +from digitalio import DigitalInOut, Direction + +xb2_pwr = DigitalInOut(board.XB2_PWR) +xb2_pwr.direction = Direction.OUTPUT +xb2_pwr.value = False + + +# Connect to the card and mount the filesystem. +spi = busio.SPI(board.SCK, board.MOSI, board.MISO) +cs = digitalio.DigitalInOut(board.XB2_CS) +sdcard = adafruit_sdcard.SDCard(spi, cs) +vfs = storage.VfsFat(sdcard) +storage.mount(vfs, "/sd") +sys.path.append("/sd") +sys.path.append("/sd/lib") +``` + +The libraries can then be copied to the SD card in /lib. +By using `import sdmount_lib`, the SD module is activated and the libraries can be used. More information on using an SD module with Circuit Python can be found directly at [Adafruit](https://learn.adafruit.com/adafruit-micro-sd-breakout-board-card-tutorial/circuitpython). + +## Uninstallation + +To uninstall Circuit Python, put the senseBox into programming mode by double-clicking the red reset button. Simply copy a .bin file (e.g., created in Blockly) onto the senseBox MCU, and the senseBox MCU will be programmable again as usual via Blockly and Arduino. + +## Power Supply of the Ports + +By default, the individual ports/pins are not powered. The following code (as used in the SD example) can be used to power the individual interfaces. + +Example for the XBee 2 port: + +```python +xb2_pwr = DigitalInOut(board.XB2_PWR) # hier den jeweilen Pin angeben siehe Tabelle +xb2_pwr.direction = Direction.OUTPUT +xb2_pwr.value = True +``` +The other ports can be turned on as follows. Note that the status of the XBee ports is inverted: + +| Ports/Pin | Name in Code | Status (activated) | Status (deactivated) | +| ----------- | ------------ | ------------------ | -------------------- | +| XBEE 1 | XB1_PWR | False | True | +| XBEE 2 | XB2_PWR | False | True | +| I2C | I2C_PWR | True | False | +| UART | UART_PWR | True | False | +| Green LED | GREEN_LED | True | False | +| Red LED | RED_LED | True | False | +| Pins D1-D13 | D1-D13 | True | False | + +- [Circuit Python](https://circuitpython.org/board/sensebox_mcu/) +- [Libraries](https://circuitpython.org/libraries) +- [senseBox MCU CircuitPython on Github](https://github.com/adafruit/circuitpython/tree/main/ports/atmel-samd/boards/sensebox_mcu) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/erweiterungen/home-erweiterung-LoRa.md b/i18n/en/docusaurus-plugin-content-docs/current/products/home/erweiterungen/home-erweiterung-LoRa.md new file mode 100644 index 0000000..61af16a --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/erweiterungen/home-erweiterung-LoRa.md @@ -0,0 +1,119 @@ +--- +sidebar_position: 3 +title: senseBox:home with LoRa +description: Transmit senseBox:home data via LoRa +--- + +# senseBox:home with LoRa + +## LoRa and TheThingsNetwork + +The data is transmitted via [TheThingsNetwork](https://www.thethingsnetwork.org/) (TTN). +In the first step, you need to create an **Application** and a **Device** and set up data forwarding to the openSenseMap using a **Webhook**. +In general, all sensors that can be selected directly on the openSenseMap can be used. +Decoding takes place directly on the openSenseMap, so there is **no need** to configure it in the TTN Console. + +## Registering with TheThingsNetwork + +Many gateways, established by various groups, associations, or companies, use TheThingsNetwork to receive and transmit data. +To process data within the network, you first need to create an account, set up an **Application**, and register the **Devices**. + +In many cities, the network already has good coverage. You can check the coverage on [ttnmapper.org](https://ttnmapper.org/). +> Note: The coverage data may not reflect reality and could be outdated. + +### Creating the Application and Adding a Device + +Create a new account at [https://eu1.cloud.thethings.network/](https://eu1.cloud.thethings.network/). +Then, select **Go to Applications**. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-00.png) + +You’ll see an overview of all registered **Applications**. Click **add Application** to create a new one. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-01.png) + +Choose a name for your Application and optionally add a short description. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-03.png) + +After clicking **Add Application**, you’ll be taken to the overview page. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-04.png) + +Within an Application, you can now register multiple Devices. Click **+ Add end device**. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-05.png) + +Now, click **Manually** at the top and fill in the fields as shown in the image. +Generate the **DeviceEUI** and **AppKey** using the respective buttons, and click **Fill with zeros** for the **AppEUI**. +Finally, you can give the Device a custom ID or use the pre-generated one. Click **Register end device**. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-06.png) + +### Setting up the openSenseMap Integration + +The data is transmitted via TheThingsNetwork as simple bytes and forwarded to the openSenseMap. +To enable this forwarding, click **Integrations** in the sidebar, then **Webhooks**, and add a new Webhook using the **+ Add webhook** button. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-07.png) + +Some services already have pre-configured **Webhooks**. +For forwarding to the openSenseMap, select a **Custom webhook** (the last option in the list). + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-08.png) + +Name the integration and enter it under Webhook ID. Select **JSON** as the **Webhook Format**. +For the integration URL, use `https://ttn.opensensemap.org/v3` and check **Uplink Message**. Leave the field that appears empty. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-09.png) + +Now, click **Register Webhook**. + +The registration with TheThingsNetwork is now complete. + +## Registering on the openSenseMap + +Register on the openSenseMap as described here. Select "LoRa" as the connection type and add the sensors you connected to your senseBox in the first step. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-10.png) + +To ensure proper communication between TheThingsNetwork and the openSenseMap, select **senseBox:home** as the decoding profile. +Add your TTN Application ID and TTN Device ID. Click next to complete the registration. + +## Compiling and Uploading + +After registration, you can compile the program code for your senseBox on the openSenseMap. +No software installation on your computer is required. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-12.png) + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-13.png) + +Copy the Device EUI, Application EUI, and Application Key from the Device overview and paste them into the respective fields. +Click "Compile" to generate the program. + +### Copying to the senseBox + +Put the senseBox into learning mode by double-clicking the red reset button. +The senseBox will appear as a removable drive, and you can copy the previously downloaded program onto it. +The senseBox will then restart automatically, and the data will be transmitted. + +> Note: On macOS, dragging and dropping the .BIN file does not work. +> The easiest way is to use our senseBox Sketch Uploader. Simply unzip the file and start the program. +> You can [download it here](https://sensebox.de/docs/senseBox_Sketch_Uploader_DE.zip). Alternatively, you can use [MuCommander](https://www.mucommander.com/) or copy the file via the terminal using `dd` (recommended for advanced users only). + +## Troubleshooting + +If your data is not displayed on the openSenseMap, first check whether the data is reaching TheThingsNetwork. +You can do this from your Application's overview page. Look for **Live Data** messages marked **Forward Uplink Data message**. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-14.png) + +If data appears in the console but is not forwarded to the openSenseMap, verify that all parameters for TTN integration were copied correctly to the openSenseMap. +You can find these parameters in the openSenseMap dashboard. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-15.png) + +Click "Edit" for your senseBox and select "TheThingsNetwork" from the sidebar menu. + +![](/img/sensebox-home-bilder/home-erweiterung-lora/home-lora-16.png) diff --git a/i18n/en/docusaurus-plugin-content-docs/current/products/home/erweiterungen/home-erweiterung-solar.mdx b/i18n/en/docusaurus-plugin-content-docs/current/products/home/erweiterungen/home-erweiterung-solar.mdx new file mode 100644 index 0000000..167f527 --- /dev/null +++ b/i18n/en/docusaurus-plugin-content-docs/current/products/home/erweiterungen/home-erweiterung-solar.mdx @@ -0,0 +1,59 @@ +--- +sidebar_position: 4 +title: Solar Extension +description: Extend your senseBox:home with a solar panel +--- + +import ImageWithText from "@site/src/components/ImageWithText/ImageWithText"; +import solarZelle from "@site/static/img/sensebox-home-bilder/home-erweiterung-solar/solar_top.png"; +import powerBoost from "@site/static/img/sensebox-home-bilder/home-erweiterung-solar/powerboost-top.png"; + +# Solar Extension + +## Solar Panel + + + +### Technical Details + +- Model Number: VB-010P +- Maximum Power (Pm): 10W +- Clamp Voltage (V): 7.2V +- Voltage at Max Power (Vm): 6.0V +- Short Circuit Current (Isc): 1.83A +- Dimensions: 340x235x17mm +- Weight: 1kg + +## Powerboost + +The [Adafruit Powerboost 1000C](https://www.adafruit.com/product/2465) features an integrated charging circuit, allowing the solar panel to charge the battery, which then powers the senseBox. + + + +### Technical Details + +- Maximum Input Power: 3.7V +- Maximum Output Power: 5.2V +- Chipset: [TI TPS61090](http://www.ti.com/product/TPS61090/description) +- 2A Internal Switch +- LEDs indicate battery charge level +- Weight: 6g + +## Connection + +To use the senseBox with a solar panel, you only need a Powerboost and a [LiPo battery](https://eckstein-shop.de/LiPo-Akku-Lithium-Ion-Polymer-Batterie-37V-2000mAh-JST-PH-Connector), something around 1000 mAh should suffice. +The diagram below shows how the components are connected. +We recommend a [fireproof bag](https://www.amazon.de/Jamara-141360-LiPo-Guard-Lipobrandschutztasche/dp/B003OFCUIS/ref=sr_1_18?keywords=LIPO+TRESOR&qid=1556284975&s=gateway&sr=8-18) for the battery, as damage could pose a serious injury risk. + +![](/img/sensebox-home-bilder/home-erweiterung-solar/solar_powerboost.jpg) + +> Important: +> The LiPo battery and Powerboost should be protected from moisture when the station is operated outdoors. +> The appropriate housing is included in the set but is the same as for components like the particulate matter sensor. +> Note that low temperatures can significantly affect the battery's performance. + +> - [Shop](https://sensebox.kaufen/product/solar-set) diff --git a/i18n/en/docusaurus-theme-classic/footer.json b/i18n/en/docusaurus-theme-classic/footer.json new file mode 100644 index 0000000..55f5841 --- /dev/null +++ b/i18n/en/docusaurus-theme-classic/footer.json @@ -0,0 +1,38 @@ +{ + "link.title.Materials": { + "message": "Materials", + "description": "The title of the footer links column with title=Materials in the footer" + }, + "link.title.Community": { + "message": "Community", + "description": "The title of the footer links column with title=Community in the footer" + }, + "link.item.label.Impressum": { + "message": "Imprint", + "description": "The label of footer link with label=Impressum linking to https://sensebox.de/de/imprint" + }, + "link.item.label.openSenseMap": { + "message": "openSenseMap", + "description": "The label of footer link with label=openSenseMap linking to https://opensensemap.org/impressum" + }, + "link.item.label.FAQ": { + "message": "FAQ", + "description": "The label of footer link with label=FAQ linking to /docs/misc/faq" + }, + "link.item.label.Forum": { + "message": "Forum", + "description": "The label of footer link with label=Forum linking to https://forum.sensebox.de" + }, + "link.item.label.GitHub": { + "message": "GitHub", + "description": "The label of footer link with label=GitHub linking to https://github.com/sensebox" + }, + "link.item.label.Support": { + "message": "Support", + "description": "The label of footer link with label=Support linking to https://sensebox.de/de/contact" + }, + "copyright": { + "message": "© senseBox 2024. All rights reserved.", + "description": "The footer copyright" + } +} diff --git a/i18n/en/docusaurus-theme-classic/navbar.json b/i18n/en/docusaurus-theme-classic/navbar.json new file mode 100644 index 0000000..4ae0b50 --- /dev/null +++ b/i18n/en/docusaurus-theme-classic/navbar.json @@ -0,0 +1,18 @@ +{ + "title": { + "message": "senseBox Docs", + "description": "The title in the navbar" + }, + "logo.alt": { + "message": "senseBox Logo", + "description": "The alt text of navbar logo" + }, + "item.label.senseBox.de": { + "message": "senseBox.de", + "description": "Navbar item with label senseBox.de" + }, + "item.label.GitHub": { + "message": "GitHub", + "description": "Navbar item with label GitHub" + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b07d7e3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,18710 @@ +{ + "name": "docs", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "docs", + "version": "0.0.0", + "dependencies": { + "@crowdin/cli": "^3.7.8", + "@docusaurus/core": "3.1.1", + "@docusaurus/preset-classic": "3.1.1", + "@emotion/react": "^11.11.4", + "@emotion/styled": "^11.11.0", + "@fortawesome/fontawesome-svg-core": "^6.5.1", + "@fortawesome/free-solid-svg-icons": "^6.5.1", + "@fortawesome/react-fontawesome": "^0.2.0", + "@mdx-js/react": "^3.0.0", + "@radix-ui/react-accordion": "^1.1.2", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-select": "^2.0.0", + "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-switch": "^1.0.3", + "@radix-ui/react-tabs": "^1.0.4", + "@radix-ui/react-tooltip": "^1.0.7", + "autoprefixer": "^10.4.17", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "eslint-config-prettier": "^9.1.0", + "framer-motion": "^11.0.25", + "lucide-react": "^0.344.0", + "postcss": "^8.4.35", + "prettier": "^3.2.5", + "prettier-plugin-tailwindcss": "^0.5.14", + "prism-react-renderer": "^2.1.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-youtube": "^9.0.2", + "remark-collapse": "^0.1.2", + "tailwind-merge": "^2.2.1", + "tailwindcss": "^3.4.1", + "tailwindcss-animate": "^1.0.7", + "zustand": "^4.5.1" + }, + "devDependencies": { + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/preset-react": "^7.26.3", + "@docusaurus/module-type-aliases": "3.0.0", + "@docusaurus/types": "3.0.0", + "dotenv": "^16.0.1" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", + "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.9.3", + "@algolia/autocomplete-shared": "1.9.3" + } + }, + "node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz", + "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz", + "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.9.3" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz", + "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.22.1.tgz", + "integrity": "sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.22.1" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.22.1.tgz", + "integrity": "sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==", + "license": "MIT" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.22.1.tgz", + "integrity": "sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.22.1" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.22.1.tgz", + "integrity": "sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.22.1.tgz", + "integrity": "sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.22.1.tgz", + "integrity": "sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.22.1.tgz", + "integrity": "sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.1.tgz", + "integrity": "sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", + "license": "MIT" + }, + "node_modules/@algolia/logger-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.22.1.tgz", + "integrity": "sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==", + "license": "MIT" + }, + "node_modules/@algolia/logger-console": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.22.1.tgz", + "integrity": "sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==", + "license": "MIT", + "dependencies": { + "@algolia/logger-common": "4.22.1" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.22.1.tgz", + "integrity": "sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.22.1" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.22.1.tgz", + "integrity": "sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==", + "license": "MIT" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.22.1.tgz", + "integrity": "sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==", + "license": "MIT", + "dependencies": { + "@algolia/requester-common": "4.22.1" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.22.1.tgz", + "integrity": "sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==", + "license": "MIT", + "dependencies": { + "@algolia/cache-common": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/requester-common": "4.22.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.9.tgz", + "integrity": "sha512-B2L9neXTIyPQoXDm+NtovPvG6VOLWnaXu3BIeVDWwdKFgG30oNa6CqVGiJPDWQwIAK49t9gnQI9c6K6RzabiKw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz", + "integrity": "sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "license": "MIT", + "dependencies": { + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", + "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx/node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz", + "integrity": "sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz", + "integrity": "sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==", + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.23.3.tgz", + "integrity": "sha512-zP0QKq/p6O42OL94udMgSfKXyse4RyJ0JqbQ34zDAONWjyrEsghYEyTSK5FIpmXmCpB55SHokL1cRRKHv8L2Qw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", + "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name/node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", + "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/generator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/parser": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/traverse": { + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@babel/types": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", + "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations/node_modules/@babel/types": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.9.tgz", + "integrity": "sha512-A7clW3a0aSjm3ONU9o2HAILSegJCYlEZmOhmBRReVtIpY/Z/p7yIZ+wR41Z+UipwdGuqwtID/V/dOdZXjwi9gQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.9.tgz", + "integrity": "sha512-3kBGTNBBk9DQiPoXYS0g0BYlwTQYUTifqgKTjxUwEUkduRT2QOa0FPGBJ+NROQhGyYO5BuTJwGvBnqKDykac6A==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.9", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.9", + "@babel/plugin-transform-modules-umd": "^7.23.3", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.8", + "babel-plugin-polyfill-corejs3": "^0.9.0", + "babel-plugin-polyfill-regenerator": "^0.5.5", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.26.3.tgz", + "integrity": "sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-transform-react-display-name": "^7.25.9", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-react-jsx-development": "^7.25.9", + "@babel/plugin-transform-react-pure-annotations": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/generator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/parser": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.3" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", + "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/traverse": { + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@babel/types": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/preset-react/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@babel/preset-react/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/preset-react/node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/preset-react/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/@babel/preset-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", + "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.30.2", + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@crowdin/cli": { + "version": "3.19.4", + "resolved": "https://registry.npmjs.org/@crowdin/cli/-/cli-3.19.4.tgz", + "integrity": "sha512-j0SiRGKOH/Pa/TdBeIxBBRrByHPqmVqWVo/LSjnri1lLPGywjcu9kB+pib7P4wmI00jgcVu+80yGdun5zRcDNQ==", + "license": "MIT", + "dependencies": { + "command-exists-promise": "^2.0.2", + "node-fetch": "2.7.0", + "shelljs": "^0.8.5", + "tar": "^6.2.0", + "yauzl": "^3.1.0" + }, + "bin": { + "crowdin": "jdeploy-bundle/jdeploy.js" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@docsearch/css": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.2.tgz", + "integrity": "sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==", + "license": "MIT" + }, + "node_modules/@docsearch/react": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.2.tgz", + "integrity": "sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "1.9.3", + "@algolia/autocomplete-preset-algolia": "1.9.3", + "@docsearch/css": "3.5.2", + "algoliasearch": "^4.19.1" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0", + "search-insights": ">= 1 < 3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "search-insights": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.1.1.tgz", + "integrity": "sha512-2nQfKFcf+MLEM7JXsXwQxPOmQAR6ytKMZVSx7tVi9HEm9WtfwBH1fp6bn8Gj4zLUhjWKCLoysQ9/Wm+EZCQ4yQ==", + "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.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.5.1", + "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": "^4.2.2", + "cssnano": "^5.1.15", + "del": "^6.1.1", + "detect-port": "^1.5.1", + "escape-html": "^1.0.3", + "eta": "^2.2.0", + "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", + "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@5.5.2", + "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/core/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.1.1.tgz", + "integrity": "sha512-LnoIDjJWbirdbVZDMq+4hwmrTl2yHDnBf9MLG9qyExeAE3ac35s4yUhJI8yyTCdixzNfKit4cbXblzzqMu4+8g==", + "license": "MIT", + "dependencies": { + "cssnano-preset-advanced": "^5.3.10", + "postcss": "^8.4.26", + "postcss-sort-media-queries": "^4.4.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/logger": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.1.1.tgz", + "integrity": "sha512-BjkNDpQzewcTnST8trx4idSoAla6zZ3w22NqM/UMcFtvYJgmoE4layuTzlfql3VFPNuivvj7BOExa/+21y4X2Q==", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.1.1.tgz", + "integrity": "sha512-xN2IccH9+sv7TmxwsDJNS97BHdmlqWwho+kIVY4tcCXkp+k4QuzvWBeunIMzeayY4Fu13A6sAjHGv5qm72KyGA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.22.7", + "@babel/traverse": "^7.22.8", + "@docusaurus/logger": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "@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/module-type-aliases": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.0.0.tgz", + "integrity": "sha512-CfC6CgN4u/ce+2+L1JdsHNyBd8yYjl4De2B2CBj2a9F7WuJ5RjV1ciuU7KDg8uyju+NRVllRgvJvxVUjCdkPiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "3.0.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@5.5.2" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/module-type-aliases/node_modules/react-helmet-async": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.4.tgz", + "integrity": "sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.1.1.tgz", + "integrity": "sha512-ew/3VtVoG3emoAKmoZl7oKe1zdFOsI0NbcHS26kIxt2Z8vcXKCUgK9jJJrz0TbOipyETPhqwq4nbitrY3baibg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "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/plugin-content-blog/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/plugin-content-docs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.1.1.tgz", + "integrity": "sha512-lhFq4E874zw0UOH7ujzxnCayOyAt0f9YPVYSb9ohxrdCM8B4szxitUw9rIX4V9JLLHVoqIJb6k+lJJ1jrcGJ0A==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/module-type-aliases": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "@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/plugin-content-docs/node_modules/@docusaurus/module-type-aliases": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.1.tgz", + "integrity": "sha512-xBJyx0TMfAfVZ9ZeIOb1awdXgR4YJMocIEzTps91rq+hJDFJgJaylDtmoRhUxkwuYmNK1GJpW95b7DLztSBJ3A==", + "license": "MIT", + "dependencies": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "3.1.1", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/plugin-content-docs/node_modules/@docusaurus/types/node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/react-helmet-async": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.4.tgz", + "integrity": "sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ==", + "license": "Apache-2.0", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.1.1.tgz", + "integrity": "sha512-NQHncNRAJbyLtgTim9GlEnNYsFhuCxaCNkMwikuxLTiGIPH7r/jpb7O3f3jUMYMebZZZrDq5S7om9a6rvB/YCA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "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/plugin-content-pages/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/plugin-debug": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.1.1.tgz", + "integrity": "sha512-xWeMkueM9wE/8LVvl4+Qf1WqwXmreMjI5Kgr7GYCDoJ8zu4kD+KaMhrh7py7MNM38IFvU1RfrGKacCEe2DRRfQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "fs-extra": "^11.1.1", + "react-json-view-lite": "^1.2.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/plugin-google-analytics": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.1.1.tgz", + "integrity": "sha512-+q2UpWTqVi8GdlLoSlD5bS/YpxW+QMoBwrPrUH/NpvpuOi0Of7MTotsQf9JWd3hymZxl2uu1o3PIrbpxfeDFDQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/plugin-google-gtag": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.1.1.tgz", + "integrity": "sha512-0mMPiBBlQ5LFHTtjxuvt/6yzh8v7OxLi3CbeEsxXZpUzcKO/GC7UA1VOWUoBeQzQL508J12HTAlR3IBU9OofSw==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "@types/gtag.js": "^0.0.12", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/plugin-google-tag-manager": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.1.1.tgz", + "integrity": "sha512-d07bsrMLdDIryDtY17DgqYUbjkswZQr8cLWl4tzXrt5OR/T/zxC1SYKajzB3fd87zTu5W5klV5GmUwcNSMXQXA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/plugin-sitemap": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.1.1.tgz", + "integrity": "sha512-iJ4hCaMmDaUqRv131XJdt/C/jJQx8UreDWTRqZKtNydvZVh/o4yXGRRFOplea1D9b/zpwL1Y+ZDwX7xMhIOTmg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "fs-extra": "^11.1.1", + "sitemap": "^7.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/preset-classic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.1.1.tgz", + "integrity": "sha512-jG4ys/hWYf69iaN/xOmF+3kjs4Nnz1Ay3CjFLDtYa8KdxbmUhArA9HmP26ru5N0wbVWhY+6kmpYhTJpez5wTyg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/plugin-content-blog": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/plugin-content-pages": "3.1.1", + "@docusaurus/plugin-debug": "3.1.1", + "@docusaurus/plugin-google-analytics": "3.1.1", + "@docusaurus/plugin-google-gtag": "3.1.1", + "@docusaurus/plugin-google-tag-manager": "3.1.1", + "@docusaurus/plugin-sitemap": "3.1.1", + "@docusaurus/theme-classic": "3.1.1", + "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-search-algolia": "3.1.1", + "@docusaurus/types": "3.1.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, + "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/react-loadable": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "license": "MIT", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.1.1.tgz", + "integrity": "sha512-GiPE/jbWM8Qv1A14lk6s9fhc0LhPEQ00eIczRO4QL2nAQJZXkjPG6zaVx+1cZxPFWbAsqSjKe2lqkwF3fGkQ7Q==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/module-type-aliases": "3.1.1", + "@docusaurus/plugin-content-blog": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/plugin-content-pages": "3.1.1", + "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-translations": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "@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/theme-classic/node_modules/@docusaurus/module-type-aliases": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.1.tgz", + "integrity": "sha512-xBJyx0TMfAfVZ9ZeIOb1awdXgR4YJMocIEzTps91rq+hJDFJgJaylDtmoRhUxkwuYmNK1GJpW95b7DLztSBJ3A==", + "license": "MIT", + "dependencies": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "3.1.1", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/theme-classic/node_modules/@docusaurus/types/node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@docusaurus/theme-classic/node_modules/react-helmet-async": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.4.tgz", + "integrity": "sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ==", + "license": "Apache-2.0", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.1.1.tgz", + "integrity": "sha512-38urZfeMhN70YaXkwIGXmcUcv2CEYK/2l4b05GkJPrbEbgpsIZM3Xc+Js2ehBGGZmfZq8GjjQ5RNQYG+MYzCYg==", + "license": "MIT", + "dependencies": { + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/module-type-aliases": "3.1.1", + "@docusaurus/plugin-content-blog": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/plugin-content-pages": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@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/theme-common/node_modules/@docusaurus/module-type-aliases": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.1.tgz", + "integrity": "sha512-xBJyx0TMfAfVZ9ZeIOb1awdXgR4YJMocIEzTps91rq+hJDFJgJaylDtmoRhUxkwuYmNK1GJpW95b7DLztSBJ3A==", + "license": "MIT", + "dependencies": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "3.1.1", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/theme-common/node_modules/@docusaurus/types": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", + "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/theme-common/node_modules/@docusaurus/types/node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@docusaurus/theme-common/node_modules/react-helmet-async": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-2.0.4.tgz", + "integrity": "sha512-yxjQMWposw+akRfvpl5+8xejl4JtUlHnEBcji6u8/e6oc7ozT+P9PNTWMhCbz2y9tc5zPegw2BvKjQA+NwdEjQ==", + "license": "Apache-2.0", + "dependencies": { + "invariant": "^2.2.4", + "react-fast-compare": "^3.2.2", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.1.1.tgz", + "integrity": "sha512-tBH9VY5EpRctVdaAhT+b1BY8y5dyHVZGFXyCHgTrvcXQy5CV4q7serEX7U3SveNT9zksmchPyct6i1sFDC4Z5g==", + "license": "MIT", + "dependencies": { + "@docsearch/react": "^3.5.2", + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-translations": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", + "algoliasearch": "^4.18.0", + "algoliasearch-helper": "^3.13.3", + "clsx": "^2.0.0", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "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/theme-translations": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.1.1.tgz", + "integrity": "sha512-xvWQFwjxHphpJq5fgk37FXCDdAa2o+r7FX8IpMg+bGZBNXyWBu3MjZ+G4+eUVNpDhVinTc+j6ucL0Ain5KCGrg==", + "license": "MIT", + "dependencies": { + "fs-extra": "^11.1.1", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/types": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.0.0.tgz", + "integrity": "sha512-Qb+l/hmCOVemReuzvvcFdk84bUmUFyD0Zi81y651ie3VwMrXqC7C0E7yZLKMOsLj/vkqsxHbtkAuYMI89YzNzg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@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/utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.1.1.tgz", + "integrity": "sha512-ZJfJa5cJQtRYtqijsPEnAZoduW6sjAQ7ZCWSZavLcV10Fw0Z3gSaPKA/B4micvj2afRZ4gZxT7KfYqe5H8Cetg==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.1.1", + "@svgr/webpack": "^6.5.1", + "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", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.6.0", + "url-loader": "^4.1.1", + "webpack": "^5.88.1" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.1.1.tgz", + "integrity": "sha512-eGne3olsIoNfPug5ixjepZAIxeYFzHHnor55Wb2P57jNbtVaFvij/T+MS8U0dtZRFi50QU+UPmRrXdVUM8uyMg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.1.1.tgz", + "integrity": "sha512-KlY4P9YVDnwL+nExvlIpu79abfEv6ZCHuOX4ZQ+gtip+Wxj0daccdReIWWtqxM/Fb5Cz1nQvUCc7VEtT8IBUAA==", + "license": "MIT", + "dependencies": { + "@docusaurus/logger": "3.1.1", + "@docusaurus/utils": "3.1.1", + "joi": "^17.9.2", + "js-yaml": "^4.1.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", + "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/serialize": "^1.1.2", + "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/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.11.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", + "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.8.1", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", + "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.3.tgz", + "integrity": "sha512-iD4D6QVZFDhcbH0RAG1uVu1CwVLMWUkCvAqqlewO/rxf8+87yIBAlt4+AxMiiKPLs5hFc0owNk/sLLAOROw3cA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", + "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz", + "integrity": "sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", + "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", + "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==", + "license": "MIT" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "license": "MIT", + "peer": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "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==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", + "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/object-schema": "^2.1.5", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "peer": true + }, + "node_modules/@eslint/core": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", + "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "peer": true + }, + "node_modules/@eslint/js": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", + "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", + "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", + "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==", + "license": "MIT" + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz", + "integrity": "sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==", + "hasInstallScript": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.1.tgz", + "integrity": "sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.1.tgz", + "integrity": "sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==", + "hasInstallScript": true, + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.5.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.2.0.tgz", + "integrity": "sha512-uHg75Rb/XORTtVt7OS9WoK8uM276Ufi7gCzshVWkUJbHhh3svsUUeqXerrM96Wm7fRiDzfKRwSoahhMIkGAYHw==", + "license": "MIT", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "react": ">=16.3" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "license": "MIT" + }, + "node_modules/@mdx-js/mdx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", + "integrity": "sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdx": "^2.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-build-jsx": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-util-to-js": "^2.0.0", + "estree-walker": "^3.0.0", + "hast-util-to-estree": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "markdown-extensions": "^2.0.0", + "periscopic": "^3.0.0", + "remark-mdx": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "source-map": "^0.7.0", + "unified": "^11.0.0", + "unist-util-position-from-estree": "^2.0.0", + "unist-util-stringify-position": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", + "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "license": "MIT", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", + "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", + "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz", + "integrity": "sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==", + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", + "license": "MIT" + }, + "node_modules/@radix-ui/number": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz", + "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.1.2.tgz", + "integrity": "sha512-fDG7jcoNKVjSK6yfmuAs0EnPDro0WMXIhMtXdTBWqEioVW206ku+4Lw07e+13lUkFkpoEQ2PdeMIAGpdqEAmDg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collapsible": "1.0.3", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.0.3.tgz", + "integrity": "sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz", + "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.5.tgz", + "integrity": "sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", + "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.0.6.tgz", + "integrity": "sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-menu": "2.0.6", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.0.6.tgz", + "integrity": "sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.7.tgz", + "integrity": "sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", + "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz", + "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz", + "integrity": "sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/number": "1.0.1", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-collection": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.0.3.tgz", + "integrity": "sha512-mxm87F88HyHztsI7N+ZUmEoARGkC22YVW5CaC+Byc+HRpuvCrOBPTAnXgf+tZ/7i0Sg/eOePGdMhUKhPaQEqow==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-use-previous": "1.0.1", + "@radix-ui/react-use-size": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tabs": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tabs/-/react-tabs-1.0.4.tgz", + "integrity": "sha512-egZfYY/+wRNCflXNHx+dePvnz9FbmssDTJBtgRfDY7e8SE5oIo3Py2eCB1ckAbh1Q7cQ/6yJZThJ++sgbxibog==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-direction": "1.0.1", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-roving-focus": "1.0.4", + "@radix-ui/react-use-controllable-state": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.0.7.tgz", + "integrity": "sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "@radix-ui/react-visually-hidden": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz", + "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz", + "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@slorber/remark-comment": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", + "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^1.0.0", + "micromark-util-character": "^1.1.0", + "micromark-util-symbol": "^1.0.1" + } + }, + "node_modules/@slorber/remark-comment/node_modules/micromark-factory-space": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", + "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/@slorber/remark-comment/node_modules/micromark-util-character": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", + "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^1.0.0", + "micromark-util-types": "^1.0.0" + } + }, + "node_modules/@slorber/remark-comment/node_modules/micromark-util-symbol": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", + "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/@slorber/remark-comment/node_modules/micromark-util-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", + "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "license": "MIT", + "dependencies": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "license": "MIT", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/acorn": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", + "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", + "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.4.tgz", + "integrity": "sha512-5idy3hvI9lAMqsyilBM+N+boaCf1MgoefbDxN6KEO5aK17TOHwFAYT9sjxzeKAiIWRUBgLxmZ9mPcnzZXtTcRQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.42", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz", + "integrity": "sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/gtag.js": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", + "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", + "license": "MIT" + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "license": "MIT" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdx": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.11.tgz", + "integrity": "sha512-HM5bwOaIQJIQbAYfax35HCKxx7a3KrK3nBtIqJgSOitivTD1y3oW9P3rxY9RkXYPUk7y/AjAohfHKmFpGE79zw==", + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.4.tgz", + "integrity": "sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==", + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.10.tgz", + "integrity": "sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==", + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "license": "MIT", + "dependencies": { + "@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.3", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.3.tgz", + "integrity": "sha512-A0D0aTXvjlqJ5ZILMz3rNfDBOx9hHxLZYv2by47Sm/pqW35zzjusrZTryatjN/Rf8Us2gZrJD+KeHbUSTux1Cw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.11", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.2.48", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz", + "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.11", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", + "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "license": "MIT", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT" + }, + "node_modules/@types/sax": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", + "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/send/node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT" + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/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/algoliasearch": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.1.tgz", + "integrity": "sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==", + "license": "MIT", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.22.1", + "@algolia/cache-common": "4.22.1", + "@algolia/cache-in-memory": "4.22.1", + "@algolia/client-account": "4.22.1", + "@algolia/client-analytics": "4.22.1", + "@algolia/client-common": "4.22.1", + "@algolia/client-personalization": "4.22.1", + "@algolia/client-search": "4.22.1", + "@algolia/logger-common": "4.22.1", + "@algolia/logger-console": "4.22.1", + "@algolia/requester-browser-xhr": "4.22.1", + "@algolia/requester-common": "4.22.1", + "@algolia/requester-node-http": "4.22.1", + "@algolia/transporter": "4.22.1" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.16.2.tgz", + "integrity": "sha512-Yl/Gu5Cq4Z5s/AJ0jR37OPI1H3+z7PHz657ibyaXgMOaWvPlZ3OACN13N+7HCLPUlB0BN+8BtmrG/CqTilowBA==", + "license": "MIT", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", + "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/astring": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", + "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "license": "MIT", + "bin": { + "astring": "bin/astring" + } + }, + "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.4.17", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.22.2", + "caniuse-lite": "^1.0.30001578", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "license": "MIT", + "dependencies": { + "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-polyfill-corejs2": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.8.tgz", + "integrity": "sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.5.0", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz", + "integrity": "sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0", + "core-js-compat": "^3.34.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz", + "integrity": "sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.5.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", + "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", + "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", + "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001690", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz", + "integrity": "sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio-select/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "license": "MIT" + }, + "node_modules/combine-promises": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", + "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/command-exists-promise": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/command-exists-promise/-/command-exists-promise-2.0.2.tgz", + "integrity": "sha512-T6PB6vdFrwnHXg/I0kivM3DqaCGZLjjYSOe0a5WgFKcz1sOnmOeIjnhQPXVXX3QjVbLyTJ85lJkX6lUpukTzaA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/configstore": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", + "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "license": "BSD-2-Clause", + "dependencies": { + "dot-prop": "^6.0.1", + "graceful-fs": "^4.2.6", + "unique-string": "^3.0.0", + "write-file-atomic": "^3.0.3", + "xdg-basedir": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/yeoman/configstore?sponsor=1" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "license": "MIT", + "engines": { + "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", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", + "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz", + "integrity": "sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", + "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.1.tgz", + "integrity": "sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ==", + "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", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "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/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", + "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "license": "MIT", + "dependencies": { + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/crypto-random-string/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.10.0.tgz", + "integrity": "sha512-LTSA/jWbwdMlk+rhmElbDR2vbtQoTBPr7fkJE+mxrHj+7ru0hUmHafDRzWIjIHTwpitWVaqY2/UWGRca3yUgRw==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-local-by-default": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz", + "integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==", + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-scope": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz", + "integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==", + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "license": "MIT", + "dependencies": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/css-select/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", + "license": "MIT", + "dependencies": { + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.14", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "license": "MIT" + }, + "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/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "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==", + "license": "MIT", + "peer": true + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "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", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT" + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", + "license": "MIT", + "dependencies": { + "address": "^1.0.1", + "debug": "4" + }, + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" + } + }, + "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/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "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", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz", + "integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.76", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz", + "integrity": "sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==", + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/emojilib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", + "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz", + "integrity": "sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.0.tgz", + "integrity": "sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", + "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", + "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.17.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", + "peer": true + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-attach-comments": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", + "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-build-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", + "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "estree-walker": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", + "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "astring": "^1.8.0", + "source-map": "^0.7.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-util-to-js/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/estree-util-value-to-estree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.0.1.tgz", + "integrity": "sha512-b2tdzTurEIbwRh+mKrEcaWfu1wgb8J1hVsgREg7FFiecWwK/PhO8X0kyc+0bIcKNtD4sqxIdNoRy6/p/TvECEA==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "is-plain-obj": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + } + }, + "node_modules/estree-util-visit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", + "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", + "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT", + "peer": true + }, + "node_modules/fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "license": "MIT", + "dependencies": { + "format": "^0.2.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "license": "MIT", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "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", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "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": "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/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "license": "MIT", + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "license": "ISC", + "peer": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/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/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/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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", + "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "11.0.25", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.0.25.tgz", + "integrity": "sha512-mRt7vQGzA7++wTgb+PW1TrlXXgndqR6hCiJ48fXr2X9alte2hPQiAq556HRwDCt0Q5X98MNvcSe4KUa27Gm5Lg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/fs-monkey": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", + "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==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "license": "ISC" + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "license": "BSD-2-Clause" + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "license": "MIT", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", + "engines": { + "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", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/@sindresorhus/is": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", + "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", + "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", + "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^8.0.0", + "property-information": "^6.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz", + "integrity": "sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-from-parse5": "^8.0.0", + "hast-util-to-parse5": "^8.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "parse5": "^7.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-estree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", + "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-attach-comments": "^3.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^0.4.0", + "unist-util-position": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz", + "integrity": "sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/inline-style-parser": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz", + "integrity": "sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==", + "license": "MIT" + }, + "node_modules/hast-util-to-jsx-runtime/node_modules/style-to-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz", + "integrity": "sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.2" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", + "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "web-namespaces": "^2.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", + "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "5.27.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.1.tgz", + "integrity": "sha512-29wAr6UU/oQpnTw5HoadwjUZnFQXGdOfj0LjZ4sVxzqwHh/QVkvr7m8y9WoR4iN3FRitVduTc6KdjcW38Npsug==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", + "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/html-webpack-plugin/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", + "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "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", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "license": "MIT" + }, + "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", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "license": "MIT", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", + "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "license": "MIT", + "engines": { + "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", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "license": "MIT", + "engines": { + "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-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", + "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/joi": { + "version": "17.12.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.1.tgz", + "integrity": "sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "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/json-stable-stringify-without-jsonify": { + "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==", + "license": "MIT", + "peer": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/latest-version": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", + "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "license": "MIT", + "dependencies": { + "package-json": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==", + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT", + "peer": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-cache/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/lucide-react": { + "version": "0.344.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.344.0.tgz", + "integrity": "sha512-6YyBnn91GB45VuVT96bYCOKElbJzUHqp65vX8cDcu55MQL9T969v4dhGClpljamuI/+KMO9P6w9Acq1CVQGvIQ==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdast-util-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", + "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-heading-range": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/mdast-util-heading-range/-/mdast-util-heading-range-2.1.5.tgz", + "integrity": "sha512-jXbFD0C+MfRkwsaze+btzG9CmVrxnc5kpcJLtx3SvSlPWnNdGMlDRHKDB9/TIPEq9nRHnkixppT8yvaUJ5agJg==", + "license": "MIT", + "dependencies": { + "mdast-util-to-string": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-heading-range/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", + "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.0.tgz", + "integrity": "sha512-A8AJHlR7/wPQ3+Jre1+1rq040fX9A4Q1jG8JxmSNp/PLPHg80A6475wxTp3KzHpApFH6yWxFotHrJQA3dXP6/w==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^5.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", + "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.6.0.tgz", + "integrity": "sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ==", + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz", + "integrity": "sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "license": "MIT", + "dependencies": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", + "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-mdx-jsx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz", + "integrity": "sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==", + "license": "MIT", + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "micromark-factory-mdx-expression": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdx-md": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", + "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", + "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", + "license": "MIT", + "dependencies": { + "acorn": "^8.0.0", + "acorn-jsx": "^5.0.0", + "micromark-extension-mdx-expression": "^3.0.0", + "micromark-extension-mdx-jsx": "^3.0.0", + "micromark-extension-mdx-md": "^2.0.0", + "micromark-extension-mdxjs-esm": "^3.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-mdxjs-esm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", + "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz", + "integrity": "sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-events-to-acorn": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-position-from-estree": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-events-to-acorn": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", + "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/acorn": "^4.0.0", + "@types/estree": "^1.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "estree-util-visit": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "vfile-message": "^4.0.0" + } + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/micromark/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.0.tgz", + "integrity": "sha512-CxmUYPFcTgET1zImteG/LZOy/4T5rTojesQXkSNBiquhydn78tfbCE9sjIjnJ/UcjNjOC1bphTCCW5rrS7cXAg==", + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "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/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT", + "peer": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", + "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.6.0", + "char-regex": "^1.0.2", + "emojilib": "^2.4.0", + "skin-tone": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", + "peer": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "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/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/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "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", + "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "license": "MIT", + "dependencies": { + "got": "^12.1.0", + "registry-auth-token": "^5.0.1", + "registry-url": "^6.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz", + "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==", + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", + "license": "ISC" + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "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/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "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/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "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-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "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==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.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_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-unused": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", + "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", + "license": "MIT", + "dependencies": { + "cosmiconfig": "^8.3.5", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-merge-idents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz", + "integrity": "sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==", + "license": "MIT", + "dependencies": { + "sort-css-media-queries": "2.1.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.16" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/postcss-zindex": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-tailwindcss": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.14.tgz", + "integrity": "sha512-Puaz+wPUAhFp8Lo9HuciYKM2Y2XExESjeT+9NQoVFXZsPPnc9VYss2SpxdQ6vbatmt8/4+SN0oe0I1cPDABg9Q==", + "license": "MIT", + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "@ianvs/prettier-plugin-sort-imports": "*", + "@prettier/plugin-pug": "*", + "@shopify/prettier-plugin-liquid": "*", + "@trivago/prettier-plugin-sort-imports": "*", + "@zackad/prettier-plugin-twig-melody": "*", + "prettier": "^3.0", + "prettier-plugin-astro": "*", + "prettier-plugin-css-order": "*", + "prettier-plugin-import-sort": "*", + "prettier-plugin-jsdoc": "*", + "prettier-plugin-marko": "*", + "prettier-plugin-organize-attributes": "*", + "prettier-plugin-organize-imports": "*", + "prettier-plugin-sort-imports": "*", + "prettier-plugin-style-order": "*", + "prettier-plugin-svelte": "*" + }, + "peerDependenciesMeta": { + "@ianvs/prettier-plugin-sort-imports": { + "optional": true + }, + "@prettier/plugin-pug": { + "optional": true + }, + "@shopify/prettier-plugin-liquid": { + "optional": true + }, + "@trivago/prettier-plugin-sort-imports": { + "optional": true + }, + "@zackad/prettier-plugin-twig-melody": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-css-order": { + "optional": true + }, + "prettier-plugin-import-sort": { + "optional": true + }, + "prettier-plugin-jsdoc": { + "optional": true + }, + "prettier-plugin-marko": { + "optional": true + }, + "prettier-plugin-organize-attributes": { + "optional": true + }, + "prettier-plugin-organize-imports": { + "optional": true + }, + "prettier-plugin-sort-imports": { + "optional": true + }, + "prettier-plugin-style-order": { + "optional": true + }, + "prettier-plugin-svelte": { + "optional": true + } + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", + "integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==", + "license": "MIT", + "dependencies": { + "@types/prismjs": "^1.26.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.0.0" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz", + "integrity": "sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", + "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "license": "MIT", + "dependencies": { + "escape-goat": "^4.0.0" + }, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "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", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "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", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.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/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "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", + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" + }, + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-json-view-lite": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.2.1.tgz", + "integrity": "sha512-Itc0g86fytOmKZoIoJyGgvNqohWSbh3NXIKNgH6W6FT9PC1ck4xas1tT3Rr/b3UlFXyA9Jjaw9QSXdZy2JwGMQ==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "license": "MIT", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.5.tgz", + "integrity": "sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==", + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router/node_modules/path-to-regexp": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-youtube": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/react-youtube/-/react-youtube-9.0.3.tgz", + "integrity": "sha512-NfLSlFRTGz5sanbt23Yfw+2TOhWZFMM8qBESb4qs5VxMcykVC1BsQhPcptdAKCFK5YOa0le/y8+lp/obrSZUjQ==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "3.1.3", + "prop-types": "15.8.1", + "youtube-player": "5.5.2" + }, + "engines": { + "node": ">= 14.x" + }, + "peerDependencies": { + "react": ">=0.14.1" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "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/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/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", + "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^2.1.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/registry-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", + "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/rehype-raw": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", + "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-raw": "^9.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-collapse": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/remark-collapse/-/remark-collapse-0.1.2.tgz", + "integrity": "sha512-x2lhtaT4nR1Tkp/hftoeiMHbdAntxu5Q9D6lymwMqUtoF2pg3bqNaa8NO/8yyOVhddYk0d0dkhGc+avGUf0lZA==", + "license": "MIT", + "dependencies": { + "mdast-util-heading-range": "^2.0.1", + "mdast-util-to-string": "^1.0.2" + } + }, + "node_modules/remark-collapse/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", + "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "micromark-extension-directive": "^3.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", + "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.2", + "emoticon": "^4.0.1", + "mdast-util-find-and-replace": "^3.0.1", + "node-emoji": "^2.1.0", + "unified": "^11.0.4" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz", + "integrity": "sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==", + "license": "MIT", + "dependencies": { + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", + "license": "MIT" + }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "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.1.1", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.1.1.tgz", + "integrity": "sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ==", + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0", + "postcss": "^8.4.21", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", + "license": "ISC" + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/search-insights": { + "version": "2.17.3", + "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", + "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", + "license": "MIT", + "peer": true + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", + "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", + "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "mime-types": "2.1.18", + "minimatch": "3.1.2", + "path-is-inside": "1.0.2", + "path-to-regexp": "3.3.0", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", + "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", + "license": "MIT" + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "license": "MIT", + "funding": { + "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.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sister": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sister/-/sister-3.0.2.tgz", + "integrity": "sha512-p19rtTs+NksBRKW9qn0UhZ8/TUI9BPw9lmtHny+Y3TinWlOa9jWh9xB0AtPSdmOy49NJJJSSe0Ey4C7h0TrcYA==", + "license": "BSD-3-Clause" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" + }, + "node_modules/sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "license": "MIT", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/skin-tone": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", + "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", + "license": "MIT", + "dependencies": { + "unicode-emoji-modifier-base": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", + "license": "MIT", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy-transport/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/spdy/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz", + "integrity": "sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "license": "MIT" + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/tailwind-merge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.1.tgz", + "integrity": "sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.27.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", + "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position-from-estree": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", + "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", + "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "license": "BSD-2-Clause", + "dependencies": { + "boxen": "^7.0.0", + "chalk": "^5.0.1", + "configstore": "^6.0.0", + "has-yarn": "^3.0.0", + "import-lazy": "^4.0.0", + "is-ci": "^3.0.1", + "is-installed-globally": "^0.4.0", + "is-npm": "^6.0.0", + "is-yarn-global": "^0.4.0", + "latest-version": "^7.0.0", + "pupa": "^3.1.0", + "semver": "^7.3.7", + "semver-diff": "^4.0.0", + "xdg-basedir": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", + "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "license": "MIT", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^7.0.1", + "chalk": "^5.2.0", + "cli-boxes": "^3.0.0", + "string-width": "^5.1.2", + "type-fest": "^2.13.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/camelcase": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", + "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.1.tgz", + "integrity": "sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" + }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/webpack": { + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.1.tgz", + "integrity": "sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==", + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "is-plain-object": "^5.0.0", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz", + "integrity": "sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==", + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "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", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "license": "MIT", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "license": "MIT" + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", + "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "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/yauzl": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.2.0.tgz", + "integrity": "sha512-Ow9nuGZE+qp1u4JIPvg+uCiUr7xGQWdff7JQSk5VGYTAZMDe2q8lxJ10ygv10qmSj031Ty/6FNJpLO4o1Sgc+w==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "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/youtube-player": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/youtube-player/-/youtube-player-5.5.2.tgz", + "integrity": "sha512-ZGtsemSpXnDky2AUYWgxjaopgB+shFHgXVpiJFeNB5nWEugpW1KWYDaHKuLqh2b67r24GtP6HoSW5swvf0fFIQ==", + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^2.6.6", + "load-script": "^1.0.0", + "sister": "^3.0.0" + } + }, + "node_modules/zustand": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.1.tgz", + "integrity": "sha512-XlauQmH64xXSC1qGYNv00ODaQ3B+tNPoy22jv2diYiP4eoDKr9LA+Bh5Bc3gplTrFdb6JVI+N4kc1DZ/tbtfPg==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "1.2.0" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/package.json b/package.json index e919abd..4ee1403 100755 --- a/package.json +++ b/package.json @@ -17,8 +17,8 @@ }, "dependencies": { "@crowdin/cli": "^3.7.8", - "@docusaurus/core": "3.1.1", - "@docusaurus/preset-classic": "3.1.1", + "@docusaurus/core": "^3.6.3", + "@docusaurus/preset-classic": "^3.6.3", "@emotion/react": "^11.11.4", "@emotion/styled": "^11.11.0", "@fortawesome/fontawesome-svg-core": "^6.5.1", @@ -55,6 +55,8 @@ "zustand": "^4.5.1" }, "devDependencies": { + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/preset-react": "^7.26.3", "@docusaurus/module-type-aliases": "3.0.0", "@docusaurus/types": "3.0.0", "dotenv": "^16.0.1" diff --git a/src/components/HomepageFeatures/index.jsx b/src/components/HomepageFeatures/index.jsx index 89826b8..c781620 100755 --- a/src/components/HomepageFeatures/index.jsx +++ b/src/components/HomepageFeatures/index.jsx @@ -1,92 +1,112 @@ -import React from 'react' -import clsx from 'clsx' -import styles from './styles.module.css' -import Link from '@docusaurus/Link' -import LogoSensebox from '@site/static/img/logo.svg' -import osem from '@site/static/img/osem.png' -import blockly from '@site/static/img/blockly.png' -import hardware from '@site/static/img/hardware.jpg' -import { useBoardStore } from '@site/src/lib/stores/store' +import React from 'react'; +import clsx from 'clsx'; +import styles from './styles.module.css'; +import Link from '@docusaurus/Link'; +import Translate, {translate} from '@docusaurus/Translate'; +import LogoSensebox from '@site/static/img/logo.svg'; +import osem from '@site/static/img/osem.png'; +import blockly from '@site/static/img/blockly.png'; +import hardware from '@site/static/img/hardware.jpg'; +import { useBoardStore } from '@site/src/lib/stores/store'; + +// Localisation function for the title +const translateTitle = (title) => { + const translations = { + ':edu S2': translate({ message: ':edu S2' }), + ':edu': translate({ message: ':edu' }), + ':bike': translate({ message: ':bike' }), + ':CO2 Ampel': translate({ message: ':CO2 Ampel' }), + ':home': translate({ message: ':home' }), + ':mini': translate({ message: ':mini' }), + 'openSenseMap': translate({ message: 'openSenseMap' }), + 'Blockly': translate({ message: 'Blockly' }), + 'Hardware Glossar': translate({ message: 'Hardware Glossar' }), + 'senseBox Dokumentation': translate({ message: 'senseBox Dokumentation' }), // Neue Zeile + }; + return translations[title] || title; + }; const FeatureList = [ { - title: ':edu S2', + title: translateTitle(':edu S2'), description: ( - <> + Die zweite Generation der senseBox:edu für den Einsatz im Bildungsbereich. Klicke hier für alle nötigen Informationen! - + ), to: '/docs/boards/mcus2/mcu-s2-overview?board=edus2', }, { - title: ':edu', + title: translateTitle(':edu'), description: ( - <> + Informationen zum Anschluss und zur Programmierung der senseBox:edu für den Einsatz im Bildungsbereich - + ), to: '/docs/boards/mcu/mcu-overview?board=edu', }, { - title: ':bike', + title: translateTitle(':bike'), description: ( - <> + Anleitung und Informationen zur senseBox:bike, der dazugehörigen App und der Installation der Fahrradhalterung - + ), to: '/docs/category/bike?board=bike', }, { - title: ':CO2 Ampel', + title: translateTitle(':CO2 Ampel'), description: ( - <> + Informationen zum Anschluss und Programmierung der Sensoren, Bees und weiteren Bauteilen für Bildungszwecke - + ), to: '/docs/products/co2Ampel/co2Ampel-overview?board=co2', }, { - title: ':home', + title: translateTitle(':home'), description: ( - <> + Aufstellungsort, Installation und alle weiteren Informationen zu Sensoren der senseBox:home findest du hier! - + ), to: '/docs/boards/mcu/mcu-overview?board=home', }, { - title: ':mini', + title: translateTitle(':mini'), description: ( - <> + Alle relevanten Informationen zur Miniaturversion der senseBox findest du hier! - + ), to: '/docs/boards/mini/mini-overview?board=mini', }, -] +]; const ThumbNailPreviewList = [ { - title: 'openSenseMap', + title: translateTitle('openSenseMap'), Image: osem, description: ( - <>Die openSenseMap als Internetplattform für offene Umweltdaten + + Die openSenseMap als Internetplattform für offene Umweltdaten + ), to: 'https://docs.opensensemap.org/', }, { - title: 'Blockly', + title: translateTitle('Blockly'), Image: blockly, description: ( - <> - Die frei verfügbare grafische Oberfläche zum Programmieren der senseBox{' '} - + + Die frei verfügbare grafische Oberfläche zum Programmieren der senseBox + ), onClick: () => { useBoardStore.setState({ board: 'Blockly' }) @@ -94,20 +114,20 @@ const ThumbNailPreviewList = [ to: '/docs/category/blockly-2', }, { - title: 'Hardware Glossar', + title: translateTitle('Hardware Glossar'), Image: hardware, description: ( - <> + Informationen zum Anschluss und zur Programmierung der Sensoren, Bees und weiteren Bauteilen - + ), onClick: () => { useBoardStore.setState({ board: 'Glossar' }) }, to: '/docs/category/glossar', }, -] +]; function ThumbailPreview({ Image, title, description, onClick, to }) { return ( @@ -128,10 +148,7 @@ function ThumbailPreview({ Image, title, description, onClick, to }) { function Feature({ title, description, to }) { const handleBoardChange = selectedBoard => { - // Verwende die setBoard-Funktion direkt, um das Board im Store zu aktualisieren useBoardStore.setState({ board: selectedBoard }) - - // Hier kannst du weitere Aktionen ausführen, wenn sich das Board ändert } return ( @@ -150,32 +167,33 @@ function Feature({ title, description, to }) { ) } + export default function HomepageFeatures() { - return ( -
-
-
-
-
-

senseBox Dokumentation

-

Der Platz für die Beschreibung der senseBox-Dokumentation.

-
-
- -
-
-
- {FeatureList.map((props, idx) => ( - - ))} -
-
-
-
- {ThumbNailPreviewList.map((props, idx) => ( - - ))} -
-
- ) -} + return ( +
+
+
+
+
+

{translateTitle('senseBox Dokumentation')}

+

Der Platz für die senseBox-Dokumentation.

+
+
+ +
+
+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+
+ {ThumbNailPreviewList.map((props, idx) => ( + + ))} +
+
+ ) + } \ No newline at end of file diff --git a/src/components/TutorialPorts/TutorialPorts_en.js b/src/components/TutorialPorts/TutorialPorts_en.js new file mode 100644 index 0000000..696f899 --- /dev/null +++ b/src/components/TutorialPorts/TutorialPorts_en.js @@ -0,0 +1,45 @@ +import React from 'react' +// MCU Ports +import i2cPort from '@site/static/img/en/mcu/ports/i2c-wire-port.png' +import uartPort from '@site/static/img/en/mcu/ports/uart-serial-port.png' +import ioPort from '@site/static/img/en/mcu/ports/io-port.png' +// MCU S2 Ports +import i2cPortS2 from '@site/static/img/en/mcus2/ports/i2c-wire-port.png' +import uartPortS2 from '@site/static/img/en/mcus2/ports/uart-serial-port.png' +import ioPortS2 from '@site/static/img/mcus2/ports/io-port.png' +import { useBoardStore } from '@site/src/lib/stores/store' + +const portImages = { + i2c: i2cPort, + uart: uartPort, + io: ioPort, +} + +const portImagesS2 = { + i2c: i2cPortS2, + uart: uartPortS2, + io: ioPortS2, +} + +function TutorialPorts({ port }) { + const board = useBoardStore(state => state.board) + + const imageSrc = board === ':edu S2' ? portImagesS2[port] : portImages[port] + + return ( +
+ {imageSrc ? ( +
+ {`${port} +

+ The component is connected to the {port.toUpperCase()} port. +

+
+ ) : ( +

Please specify a valid port type: i2c, uart, or io.

+ )} +
+ ) +} + +export default TutorialPorts \ No newline at end of file diff --git a/src/css/custom.css b/src/css/custom.css index 56b53d3..ac9a9ee 100755 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -25,9 +25,9 @@ html { font-family: 'BrixSlab-Regular', "Helvetica", "Arial", sans-serif; } -header { +/*header { display: none; -} +} */ @layer base { :root { diff --git a/static/img/en/blockly-bilder/display/blockly-display-1.svg b/static/img/en/blockly-bilder/display/blockly-display-1.svg new file mode 100644 index 0000000..97669ca --- /dev/null +++ b/static/img/en/blockly-bilder/display/blockly-display-1.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Initialize DisplayPrint on displayClear Display \ No newline at end of file diff --git a/static/img/en/blockly-bilder/display/blockly-display-2.svg b/static/img/en/blockly-bilder/display/blockly-display-2.svg new file mode 100644 index 0000000..2a4cafd --- /dev/null +++ b/static/img/en/blockly-bilder/display/blockly-display-2.svg @@ -0,0 +1,1321 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + + + diff --git a/static/img/en/blockly-bilder/display/blockly-display-3.svg b/static/img/en/blockly-bilder/display/blockly-display-3.svg new file mode 100644 index 0000000..37dc1f7 --- /dev/null +++ b/static/img/en/blockly-bilder/display/blockly-display-3.svg @@ -0,0 +1,1858 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + + +"> + + + + + + + + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + + + + + + + + + + Hello World! + + + + + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + + + + + + + 999 + + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + + + + + + Temperature/Humidity Sensor (HDC1080) + + + Value: + + + + Temperature in °C + + + + + + diff --git a/static/img/en/blockly-bilder/display/blockly-display-4.svg b/static/img/en/blockly-bilder/display/blockly-display-4.svg new file mode 100644 index 0000000..3e05898 --- /dev/null +++ b/static/img/en/blockly-bilder/display/blockly-display-4.svg @@ -0,0 +1 @@ +">000Zeichne Punktx-Koordinatey-KoordinateRadiusAusgefüllt  \ No newline at end of file diff --git a/static/img/en/blockly-bilder/display/blockly-display-5.svg b/static/img/en/blockly-bilder/display/blockly-display-5.svg new file mode 100644 index 0000000..85d1bf4 --- /dev/null +++ b/static/img/en/blockly-bilder/display/blockly-display-5.svg @@ -0,0 +1 @@ +">0000Zeichne Rechteckx-Koordinatey-KoordinateBreiteHöheAusgefüllt  \ No newline at end of file diff --git a/static/img/en/blockly-bilder/display/blockly-display-6.svg b/static/img/en/blockly-bilder/display/blockly-display-6.svg new file mode 100644 index 0000000..028c892 --- /dev/null +++ b/static/img/en/blockly-bilder/display/blockly-display-6.svg @@ -0,0 +1 @@ +">   0150505015Zeichne DiagrammTitleY-Achsen BeschriftungX-Achsen BeschriftungX-Wertebereich AnfangX-Wertebereich EndeY-Wertebereich AnfangY-Wertebereich EndeX-LinienabstandY-LinienabstandZeitabschnittWert \ No newline at end of file diff --git a/static/img/en/blockly-bilder/display/blockly-display-7.svg b/static/img/en/blockly-bilder/display/blockly-display-7.svg new file mode 100644 index 0000000..daff82b --- /dev/null +++ b/static/img/en/blockly-bilder/display/blockly-display-7.svg @@ -0,0 +1 @@ +">0150505015Zeichne DiagrammTitleY-Achsen BeschriftungX-Achsen BeschriftungX-Wertebereich AnfangX-Wertebereich EndeY-Wertebereich AnfangY-Wertebereich EndeX-LinienabstandY-LinienabstandZeitabschnittWertTemperaturTsTemperatur-/Luftfeuchtigkeitssensor (HDC1080)Messwert:Temperatur in °C \ No newline at end of file diff --git a/static/img/en/blockly-bilder/erster-sketch/blockly-es-1.svg b/static/img/en/blockly-bilder/erster-sketch/blockly-es-1.svg new file mode 100644 index 0000000..2bdd29b --- /dev/null +++ b/static/img/en/blockly-bilder/erster-sketch/blockly-es-1.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever: \ No newline at end of file diff --git a/static/img/en/blockly-bilder/erster-sketch/rgb-led-block-1.svg b/static/img/en/blockly-bilder/erster-sketch/rgb-led-block-1.svg new file mode 100644 index 0000000..42fd1cd --- /dev/null +++ b/static/img/en/blockly-bilder/erster-sketch/rgb-led-block-1.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:301Initialise RGB LED (WS2818)Port:on BoardBrightnessNumber \ No newline at end of file diff --git a/static/img/en/blockly-bilder/erster-sketch/rgb-led-block-2.svg b/static/img/en/blockly-bilder/erster-sketch/rgb-led-block-2.svg new file mode 100644 index 0000000..dc7974d --- /dev/null +++ b/static/img/en/blockly-bilder/erster-sketch/rgb-led-block-2.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:301Initialise RGB LED (WS2818)Port:on BoardBrightnessNumber0Set RGB-LED atPort:on BoardPositionColor \ No newline at end of file diff --git a/static/img/en/blockly-bilder/erster-sketch/rgb-led-block-3.svg b/static/img/en/blockly-bilder/erster-sketch/rgb-led-block-3.svg new file mode 100644 index 0000000..6f16ecb --- /dev/null +++ b/static/img/en/blockly-bilder/erster-sketch/rgb-led-block-3.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:301Initialise RGB LED (WS2818)Port:on BoardBrightnessNumberInterval: Interval500ms0Set RGB-LED atPort:on BoardPositionColorrandom colour \ No newline at end of file diff --git a/static/img/en/blockly-bilder/logik/blockly-entscheidungen-1.svg b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-1.svg new file mode 100644 index 0000000..e80e82a --- /dev/null +++ b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-1.svg @@ -0,0 +1,1204 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + if + + + do + + + + diff --git a/static/img/en/blockly-bilder/logik/blockly-entscheidungen-2.svg b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-2.svg new file mode 100644 index 0000000..c316b37 --- /dev/null +++ b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-2.svg @@ -0,0 +1,1405 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + if + + + do + + + + + + + Button + + + + is Pressed + + + + Pin: + + + + on Board + + + + + + + + + LED connected to + + + Pin: + + + + IO2 + + + + Status + + + + on + + + + + + diff --git a/static/img/en/blockly-bilder/logik/blockly-entscheidungen-3.svg b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-3.svg new file mode 100644 index 0000000..4d6c1f8 --- /dev/null +++ b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-3.svg @@ -0,0 +1,1598 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + if + + + do + + + else + + + + + + + Button + + + + is Pressed + + + + Pin: + + + + on Board + + + + + + + + + LED connected to + + + Pin: + + + + IO2 + + + + Status + + + + off + + + + + + + + LED connected to + + + Pin: + + + + IO3 + + + + Status + + + + on + + + + + + + + + + LED connected to + + + Pin: + + + + IO2 + + + + Status + + + + on + + + + + + diff --git a/static/img/en/blockly-bilder/logik/blockly-entscheidungen-4.svg b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-4.svg new file mode 100644 index 0000000..b597f68 --- /dev/null +++ b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-4.svg @@ -0,0 +1,2737 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + if + + + do + + + else + + + + + + + + < + + + + + + + + Temperature/Humidity Sensor (HDC1080) + + + Value: + + + + Temperature in °C + + + + + + + + + + 0 + + + + + + + + + LED connected to + + + Pin: + + + + IO2 + + + + Status + + + + on + + + + + + + + LED connected to + + + Pin: + + + + IO3 + + + + Status + + + + off + + + + + + + + LED connected to + + + Pin: + + + + IO4 + + + + Status + + + + off + + + + + + + + + + + if + + + do + + + else + + + + + + + + + + + Temperature/Humidity Sensor (HDC1080) + + + Value: + + + + Temperature in °C + + + + + + + + + + 0 + + + + + = + + + + + + + + + LED connected to + + + Pin: + + + + IO2 + + + + Status + + + + off + + + + + + + + LED connected to + + + Pin: + + + + IO3 + + + + Status + + + + on + + + + + + + + LED connected to + + + Pin: + + + + IO4 + + + + Status + + + + off + + + + + + + + + + + + + + + + if + + + do + + + + + + + + + + + Temperature/Humidity Sensor (HDC1080) + + + Value: + + + + Temperature in °C + + + + + + + + + + 0 + + + + + > + + + + + + + + + LED connected to + + + Pin: + + + + IO2 + + + + Status + + + + off + + + + + + + + LED connected to + + + Pin: + + + + IO3 + + + + Status + + + + off + + + + + + + + LED connected to + + + Pin: + + + + IO4 + + + + Status + + + + on + + + + + + + + + + diff --git a/static/img/en/blockly-bilder/logik/blockly-entscheidungen-5.svg b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-5.svg new file mode 100644 index 0000000..e364629 --- /dev/null +++ b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-5.svg @@ -0,0 +1 @@ +">= \ No newline at end of file diff --git a/static/img/en/blockly-bilder/logik/blockly-entscheidungen-6.svg b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-6.svg new file mode 100644 index 0000000..818b339 --- /dev/null +++ b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-6.svg @@ -0,0 +1,1188 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + and + + + + + diff --git a/static/img/en/blockly-bilder/logik/blockly-entscheidungen-7.svg b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-7.svg new file mode 100644 index 0000000..e58d086 --- /dev/null +++ b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-7.svg @@ -0,0 +1,1170 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + not + + + + diff --git a/static/img/en/blockly-bilder/logik/blockly-entscheidungen-8.svg b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-8.svg new file mode 100644 index 0000000..e158dc2 --- /dev/null +++ b/static/img/en/blockly-bilder/logik/blockly-entscheidungen-8.svg @@ -0,0 +1 @@ +">testewenn wahrwenn falsch \ No newline at end of file diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-1.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-1.svg new file mode 100644 index 0000000..d54965c --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-1.svg @@ -0,0 +1 @@ +">0 \ No newline at end of file diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-10.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-10.svg new file mode 100644 index 0000000..713ec66 --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-10.svg @@ -0,0 +1,1274 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + 100 + + + + constrain + + + low + + + high + + + + diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-11.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-11.svg new file mode 100644 index 0000000..e11adbd --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-11.svg @@ -0,0 +1,1266 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + 100 + + + + random integer from + + + to + + + + diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-12.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-12.svg new file mode 100644 index 0000000..5a3ffaa --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-12.svg @@ -0,0 +1 @@ +">Zufallszahl (0.0 -1.0) \ No newline at end of file diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-13.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-13.svg new file mode 100644 index 0000000..8f7c432 --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-13.svg @@ -0,0 +1,1206 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Map Value + + + from Min + + + from Max + + + to Min + + + to Max + + + + diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-14.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-14.svg new file mode 100644 index 0000000..e16d7e4 --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-14.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Initialize DisplayPrint on displayShow Text/NumberFont colorWhiteFontsize1x-Coordinates0y-Coordinates0ValueMap Valuefrom Minfrom Maxto Minto MaxLight Visible + UVValue:Illuminance in Lux0320000100 \ No newline at end of file diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-2.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-2.svg new file mode 100644 index 0000000..320863f --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-2.svg @@ -0,0 +1 @@ +">+ \ No newline at end of file diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-3.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-3.svg new file mode 100644 index 0000000..4605e11 --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-3.svg @@ -0,0 +1,1188 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + square root + + + + + diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-4.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-4.svg new file mode 100644 index 0000000..953d52c --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-4.svg @@ -0,0 +1 @@ +">sin \ No newline at end of file diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-5.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-5.svg new file mode 100644 index 0000000..d1b3e7f --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-5.svg @@ -0,0 +1 @@ +">π \ No newline at end of file diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-6.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-6.svg new file mode 100644 index 0000000..123eabb --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-6.svg @@ -0,0 +1,1197 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + is + + + + even + + + + + diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-7.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-7.svg new file mode 100644 index 0000000..2dd7616 --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-7.svg @@ -0,0 +1,1249 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + 1 + + + + change + + + + i + + + + by + + + + diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-8.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-8.svg new file mode 100644 index 0000000..6fc21ee --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-8.svg @@ -0,0 +1,1188 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + round + + + + + diff --git a/static/img/en/blockly-bilder/mathematik/blockly-mathematik-9.svg b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-9.svg new file mode 100644 index 0000000..db21645 --- /dev/null +++ b/static/img/en/blockly-bilder/mathematik/blockly-mathematik-9.svg @@ -0,0 +1,1179 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + remainder of + + + ÷ + + + + diff --git a/static/img/en/blockly-bilder/schleifen/blockly-schleifen-1.svg b/static/img/en/blockly-bilder/schleifen/blockly-schleifen-1.svg new file mode 100644 index 0000000..c3ae451 --- /dev/null +++ b/static/img/en/blockly-bilder/schleifen/blockly-schleifen-1.svg @@ -0,0 +1,1231 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + 10 + + + + repeat + + + times + + + do + + + + diff --git a/static/img/en/blockly-bilder/schleifen/blockly-schleifen-2.svg b/static/img/en/blockly-bilder/schleifen/blockly-schleifen-2.svg new file mode 100644 index 0000000..0b83bbd --- /dev/null +++ b/static/img/en/blockly-bilder/schleifen/blockly-schleifen-2.svg @@ -0,0 +1,1206 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + repeat + + + + while + + + + do + + + + diff --git a/static/img/en/blockly-bilder/schleifen/blockly-schleifen-3.svg b/static/img/en/blockly-bilder/schleifen/blockly-schleifen-3.svg new file mode 100644 index 0000000..5b3652a --- /dev/null +++ b/static/img/en/blockly-bilder/schleifen/blockly-schleifen-3.svg @@ -0,0 +1,1362 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + 10 + + + + + + + + + 1 + + + + count with + + + + j + + + + from + + + to + + + by + + + do + + + + diff --git a/static/img/en/blockly-bilder/sd-karte/blockly-sd-1.svg b/static/img/en/blockly-bilder/sd-karte/blockly-sd-1.svg new file mode 100644 index 0000000..f9e5852 --- /dev/null +++ b/static/img/en/blockly-bilder/sd-karte/blockly-sd-1.svg @@ -0,0 +1,1236 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Create file on SD-Card + + + filename + + + + Data + + + . + + + + csv + + + + + diff --git a/static/img/en/blockly-bilder/sd-karte/blockly-sd-2.svg b/static/img/en/blockly-bilder/sd-karte/blockly-sd-2.svg new file mode 100644 index 0000000..86c7b6c --- /dev/null +++ b/static/img/en/blockly-bilder/sd-karte/blockly-sd-2.svg @@ -0,0 +1,1288 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + +  Write Data to SD-Card + + + linebreak + + + + + + + + Open a file from SD-Card + + + + Data + + + . + + + + csv + + + + + diff --git a/static/img/en/blockly-bilder/sd-karte/blockly-sd-3.svg b/static/img/en/blockly-bilder/sd-karte/blockly-sd-3.svg new file mode 100644 index 0000000..15091df --- /dev/null +++ b/static/img/en/blockly-bilder/sd-karte/blockly-sd-3.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Create file on SD-CardfilenameData.csvInterval: Interval60000ms Write Data to SD-CardlinebreakTemperature/Humidity Sensor (HDC1080)Value:Temperature in °COpen a file from SD-CardData.csv \ No newline at end of file diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-0.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-0.svg new file mode 100644 index 0000000..7c20ba4 --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-0.svg @@ -0,0 +1,2614 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + ESP32-S2 MPU6050 + + + Value: + + + + X + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + ESP32-S2 MPU6050 + + + Value: + + + + Y + + + + + + + + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + ESP32-S2 MPU6050 + + + Value: + + + + Z + + + + + + + + + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + ESP32-S2 MPU6050 + + + Value: + + + + Temperature in °C + + + + + + + + diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-1.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-1.svg new file mode 100644 index 0000000..afca19d --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-1.svg @@ -0,0 +1,1876 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Temperature/Humidity Sensor (HDC1080) + + + Value: + + + + Temperature in °C + + + + + + + + + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Temperature/Humidity Sensor (HDC1080) + + + Value: + + + + humidity in % + + + + + + + + diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-10.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-10.svg new file mode 100644 index 0000000..53cc8b1 --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-10.svg @@ -0,0 +1,2357 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Button + + + + is Pressed + + + + Pin: + + + + on Board + + + + + + + + + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Button + + + + was Pressed + + + + Pin: + + + + on Board + + + + + + + + + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Button + + + + as Switch + + + + Pin: + + + + on Board + + + + + + + + diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-2.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-2.svg new file mode 100644 index 0000000..868fcd4 --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-2.svg @@ -0,0 +1,2313 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Airpressure/Temperature Sensor (BMP280) + + + Value: + + + + Temperature in °C + + + + + + + + + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Airpressure/Temperature Sensor (BMP280) + + + Value: + + + + Airpressure in hPa + + + + + + + + + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Airpressure/Temperature Sensor (BMP280) + + + Value: + + + + altitude in m + + + + Pressure at Sea Level + + + + 1013 + + + hPa + + + + + + + diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-3.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-3.svg new file mode 100644 index 0000000..222f6f6 --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-3.svg @@ -0,0 +1,1940 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Clear Display + + + + + + + + Light Visible + UV + + + Value: + + + + Illuminance in Lux + + + + + + + + + + + + + + + + + + + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Initialize Display + + + + + + + + Print on display + + + + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Clear Display + + + + + + + + Light Visible + UV + + + Value: + + + + UV-Light in µW/cm² + + + + + + + + diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-4.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-4.svg new file mode 100644 index 0000000..4a720ba --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-4.svg @@ -0,0 +1,2012 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + Initialize Display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Print on display + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Fine Particular Sensor + + + Value: + + + + PM2.5 + + + + in µg/m³ at + + + + Serial1 + + + + + + + + + + + + + + + + + + + + + + + + + + Initialize Display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Print on display + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Fine Particular Sensor + + + Value: + + + + PM10 + + + + in µg/m³ at + + + + Serial1 + + + + + + + + diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-5.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-5.svg new file mode 100644 index 0000000..4aa81b4 --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-5.svg @@ -0,0 +1,2012 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + Initialize Display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Print on display + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Soil Moisture and Temperature (SMT50) + + + Port: + + + + A + + + + Value: + + + + Temperature in °C + + + + + + + + + + + + + + + + + + + + + + + + + + Initialize Display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Print on display + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Soil Moisture and Temperature (SMT50) + + + Port: + + + + A + + + + Value: + + + + Soil Moisture + + + + + + + + diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-6.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-6.svg new file mode 100644 index 0000000..ed6e338 --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-6.svg @@ -0,0 +1,1940 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + Initialize Display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Print on display + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + GPS Modul + + + Value: + + + + latitude + + + + + + + + + + + + + + + + + + + + + + + + + + Initialize Display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Print on display + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + GPS Modul + + + Value: + + + + longitude + + + + + + + + diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-7.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-7.svg new file mode 100644 index 0000000..6c6a9fc --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-7.svg @@ -0,0 +1,2804 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + Initialize Display + + + + + + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Environmental sensor (BME680) + + + Value: + + + + Temperature in °C + + + + + + Print on display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + + + + + + + + + + + + + + + + Initialize Display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Print on display + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Environmental sensor (BME680) + + + Value: + + + + humidity in % + + + + + + + + + + + + + + + + + + + + + + + + + + Initialize Display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Print on display + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Environmental sensor (BME680) + + + Value: + + + + Airpressure in Pa + + + + + + + + + + + + + + + + + + + + + + + + + + Initialize Display + + + + Arduino run first: + + + Arduino loop forever: + + + + + + + Print on display + + + + + + + + + + + Clear Display + + + + Show Text/Number + + + Font color + + + + White + + + + Fontsize + + + + 1 + + + x-Coordinates + + + + 0 + + + y-Coordinates + + + + 0 + + + Value + + + + + + + Environmental sensor (BME680) + + + Value: + + + + Indoor Air Quality (IAQ) + + + + + + + + diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-8.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-8.svg new file mode 100644 index 0000000..0a53429 --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-8.svg @@ -0,0 +1,1043 @@ + + ">Initialize DisplayArduino run first:Arduino loop forever:Print on displayClear DisplayShow Text/NumberFont colorWhiteFontsize1x-Coordinates0y-Coordinates0ValueUltrasonic distance sensor at PortATriggerIO3EchoIO2Max distance250cm \ No newline at end of file diff --git a/static/img/en/blockly-bilder/sensoren/blockly-sensoren-9.svg b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-9.svg new file mode 100644 index 0000000..53d491a --- /dev/null +++ b/static/img/en/blockly-bilder/sensoren/blockly-sensoren-9.svg @@ -0,0 +1,1043 @@ + + ">Initialize DisplayArduino run first:Arduino loop forever:Print on displayClear DisplayShow Text/NumberFont colorWhiteFontsize1x-Coordinates0y-Coordinates0ValueMicrophonePin:IO2 \ No newline at end of file diff --git a/static/img/en/blockly-bilder/text/blockly-text-2.svg b/static/img/en/blockly-bilder/text/blockly-text-2.svg new file mode 100644 index 0000000..9982c60 --- /dev/null +++ b/static/img/en/blockly-bilder/text/blockly-text-2.svg @@ -0,0 +1,1191 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + + create text with + + + + diff --git a/static/img/en/blockly-bilder/text/blockly-text-3.svg b/static/img/en/blockly-bilder/text/blockly-text-3.svg new file mode 100644 index 0000000..031b0ad --- /dev/null +++ b/static/img/en/blockly-bilder/text/blockly-text-3.svg @@ -0,0 +1,1271 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + to + + + + item + + + + append text + + + + diff --git a/static/img/en/blockly-bilder/text/blockly-text-4.svg b/static/img/en/blockly-bilder/text/blockly-text-4.svg new file mode 100644 index 0000000..833eed8 --- /dev/null +++ b/static/img/en/blockly-bilder/text/blockly-text-4.svg @@ -0,0 +1,1170 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + length of + + + + diff --git a/static/img/en/blockly-bilder/text/blockly-text-5.svg b/static/img/en/blockly-bilder/text/blockly-text-5.svg new file mode 100644 index 0000000..ac6f9c0 --- /dev/null +++ b/static/img/en/blockly-bilder/text/blockly-text-5.svg @@ -0,0 +1,1170 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + is empty + + + + diff --git a/static/img/en/blockly-bilder/variablen/blockly-variablen-1.svg b/static/img/en/blockly-bilder/variablen/blockly-variablen-1.svg new file mode 100644 index 0000000..44da731 --- /dev/null +++ b/static/img/en/blockly-bilder/variablen/blockly-variablen-1.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:setintElementto \ No newline at end of file diff --git a/static/img/en/blockly-bilder/variablen/blockly-variablen-2.svg b/static/img/en/blockly-bilder/variablen/blockly-variablen-2.svg new file mode 100644 index 0000000..84bf48b --- /dev/null +++ b/static/img/en/blockly-bilder/variablen/blockly-variablen-2.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Print on displayShow Text/NumberFont colorWhiteFontsize1x-Coordinates0y-Coordinates0ValueintToreClear DisplayInitialize DisplaysetintToreto3 \ No newline at end of file diff --git a/static/img/en/blockly-bilder/variablen/blockly-variablen-3.svg b/static/img/en/blockly-bilder/variablen/blockly-variablen-3.svg new file mode 100644 index 0000000..334e7c8 --- /dev/null +++ b/static/img/en/blockly-bilder/variablen/blockly-variablen-3.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Initialize DisplaysetintToreto3ifdoButtonis PressedPin:on Board1changeTorebyPrint on displayClear DisplayShow Text/NumberFont colorWhiteFontsize1x-Coordinates0y-Coordinates0ValueintTore \ No newline at end of file diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-1.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-1.svg new file mode 100644 index 0000000..f6bf7c6 --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-1.svg @@ -0,0 +1,1518 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Initialize LoRa (OTAA) + + + Device EUI (lsb) + + + { + + + + DEVICE ID + + + } + + + Application EUI (lsb) + + + { + + + + APP ID + + + } + + + App Key (msb) + + + { + + + + APP KEY + + + } + + + Transmission interval in minutes + + + + 5 + + + + + + + + Initialize LoRa (ABP) + + + Network Session Key (msb) + + + { + + + + NWSKEY + + + } + + + App Session Key (msb) + + + { + + + + APPSKEY + + + } + + + Device Adress + + + + DEVADDR + + + Transmission interval in minutes + + + + 5 + + + + diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-10.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-10.svg new file mode 100644 index 0000000..e7756dd --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-10.svg @@ -0,0 +1,1198 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Concentration + + + Channel + + + + 1 + + + + diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-11.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-11.svg new file mode 100644 index 0000000..03fa28d --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-11.svg @@ -0,0 +1,1198 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Analog Value + + + Channel + + + + 1 + + + + diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-12.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-12.svg new file mode 100644 index 0000000..c044717 --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-12.svg @@ -0,0 +1,1217 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + X Value + + + Y Value + + + Z Value + + + Channel + + + + 1 + + + + diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-13.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-13.svg new file mode 100644 index 0000000..90af9a7 --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-13.svg @@ -0,0 +1,1217 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Latitude + + + Longitude + + + Altitude + + + Channel + + + + 1 + + + + diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-2.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-2.svg new file mode 100644 index 0000000..312a5c2 --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-2.svg @@ -0,0 +1,1232 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Send as Lora Message + + + + + + + Measurement + + + Bytes + + + + 2 + + + + + diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-3.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-3.svg new file mode 100644 index 0000000..50f79c2 --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-3.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Initialize LoRa (OTAA)Device EUI (lsb){DEVICE ID}Application EUI (lsb){APP ID}App Key (msb){APP KEY}Transmission interval in minutes5Send as Lora MessageMeasurementBytes2×Temperature/Humidity Sensor (HDC1080)Value:Temperature in °C100 \ No newline at end of file diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-4.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-4.svg new file mode 100644 index 0000000..0b6684e --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-4.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Initialize LoRa (OTAA)Device EUI (lsb){DEVICE ID}Application EUI (lsb){APP ID}App Key (msb){APP KEY}Transmission interval in minutes5Send as Lora MessageMeasurementBytes2++Temperature/Humidity Sensor (HDC1080)Value:Temperature in °C18771 \ No newline at end of file diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-5.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-5.svg new file mode 100644 index 0000000..2c46f9e --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-5.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Initialize LoRa (OTAA)Device EUI (lsb){DEVICE ID}Application EUI (lsb){APP ID}App Key (msb){APP KEY}Transmission interval in minutes5Send as Lora MessageMeasurementBytes3Light Visible + UVValue:Illuminance in Lux \ No newline at end of file diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-6.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-6.svg new file mode 100644 index 0000000..37e853d --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-6.svg @@ -0,0 +1,1198 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Temperature + + + Channel + + + + 1 + + + + diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-7.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-7.svg new file mode 100644 index 0000000..398689b --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-7.svg @@ -0,0 +1,1198 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Humidity + + + Channel + + + + 1 + + + + diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-8.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-8.svg new file mode 100644 index 0000000..f497ccc --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-8.svg @@ -0,0 +1,1198 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Pressure + + + Channel + + + + 1 + + + + diff --git a/static/img/en/blockly-bilder/web-lora/blockly-lora-9.svg b/static/img/en/blockly-bilder/web-lora/blockly-lora-9.svg new file mode 100644 index 0000000..d122446 --- /dev/null +++ b/static/img/en/blockly-bilder/web-lora/blockly-lora-9.svg @@ -0,0 +1,1198 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Luminosity + + + Channel + + + + 1 + + + + diff --git a/static/img/en/blockly-bilder/web-opensensemap/blockly-Web-oSeM-1.svg b/static/img/en/blockly-bilder/web-opensensemap/blockly-Web-oSeM-1.svg new file mode 100644 index 0000000..d7dc2a6 --- /dev/null +++ b/static/img/en/blockly-bilder/web-opensensemap/blockly-Web-oSeM-1.svg @@ -0,0 +1,1316 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + Connect to openSenseMap + + + SSL + + + + + + + Type + + + + Stationary + + + + senseBox ID + + + + senseBox ID + + + API Key + + + + access_token + + + Sensors + + + + + diff --git a/static/img/en/blockly-bilder/web-opensensemap/blockly-Web-oSeM-2.svg b/static/img/en/blockly-bilder/web-opensensemap/blockly-Web-oSeM-2.svg new file mode 100644 index 0000000..c5b5311 --- /dev/null +++ b/static/img/en/blockly-bilder/web-opensensemap/blockly-Web-oSeM-2.svg @@ -0,0 +1,1220 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Send measurement to openSenseMap + + + Phänomen + + + + sensorID + + + + + + + + + diff --git a/static/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-1.svg b/static/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-1.svg new file mode 100644 index 0000000..66ba514 --- /dev/null +++ b/static/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-1.svg @@ -0,0 +1,1248 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Connect to Wifi + + + Networkname + + + + SSID + + + Password + + + + Password + + + + + + + + + diff --git a/static/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-2.svg b/static/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-2.svg new file mode 100644 index 0000000..9d40ed0 --- /dev/null +++ b/static/img/en/blockly-bilder/web-wifi/blockly-Web-Wifi-2.svg @@ -0,0 +1,1199 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Initialize Wifi Access Point + + + Networkname + + + + SSID + + + + diff --git a/static/img/en/blockly-bilder/zeit/blockly-zeit-1.svg b/static/img/en/blockly-bilder/zeit/blockly-zeit-1.svg new file mode 100644 index 0000000..a89446e --- /dev/null +++ b/static/img/en/blockly-bilder/zeit/blockly-zeit-1.svg @@ -0,0 +1,1223 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + 1000 + + + + wait + + + milliseconds + + + + diff --git a/static/img/en/blockly-bilder/zeit/blockly-zeit-2.svg b/static/img/en/blockly-bilder/zeit/blockly-zeit-2.svg new file mode 100644 index 0000000..83636a5 --- /dev/null +++ b/static/img/en/blockly-bilder/zeit/blockly-zeit-2.svg @@ -0,0 +1,1223 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + + + + + + 100 + + + + wait + + + microseconds + + + + diff --git a/static/img/en/blockly-bilder/zeit/blockly-zeit-3.svg b/static/img/en/blockly-bilder/zeit/blockly-zeit-3.svg new file mode 100644 index 0000000..92a8d85 --- /dev/null +++ b/static/img/en/blockly-bilder/zeit/blockly-zeit-3.svg @@ -0,0 +1,1171 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + current elapsed Time (milliseconds) + + + + diff --git a/static/img/en/blockly-bilder/zeit/blockly-zeit-4.svg b/static/img/en/blockly-bilder/zeit/blockly-zeit-4.svg new file mode 100644 index 0000000..5ff7126 --- /dev/null +++ b/static/img/en/blockly-bilder/zeit/blockly-zeit-4.svg @@ -0,0 +1,1170 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + current elapsed Time (microseconds) + + + + diff --git a/static/img/en/blockly-bilder/zeit/blockly-zeit-5.svg b/static/img/en/blockly-bilder/zeit/blockly-zeit-5.svg new file mode 100644 index 0000000..dc3252b --- /dev/null +++ b/static/img/en/blockly-bilder/zeit/blockly-zeit-5.svg @@ -0,0 +1,1171 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + wait forever (end program) + + + + diff --git a/static/img/en/blockly-bilder/zeit/blockly-zeit-6.svg b/static/img/en/blockly-bilder/zeit/blockly-zeit-6.svg new file mode 100644 index 0000000..520f7cc --- /dev/null +++ b/static/img/en/blockly-bilder/zeit/blockly-zeit-6.svg @@ -0,0 +1,1218 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Interval:  + + + + Interval + + + + 10000 + + + ms + + + + diff --git a/static/img/en/hardware-bilder/absolut-gps/bmx-block.svg b/static/img/en/hardware-bilder/absolut-gps/bmx-block.svg new file mode 100644 index 0000000..c8cf59f --- /dev/null +++ b/static/img/en/hardware-bilder/absolut-gps/bmx-block.svg @@ -0,0 +1,1243 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Accelerometer + + + Direction + + + + X-Axis + + + + Range + + + + 2g + + + + + diff --git "a/static/img/en/hardware-bilder/bees/bluetooth-bee/phyphoxco2-messgera\314\210t.svg" "b/static/img/en/hardware-bilder/bees/bluetooth-bee/phyphoxco2-messgera\314\210t.svg" new file mode 100644 index 0000000..43df938 --- /dev/null +++ "b/static/img/en/hardware-bilder/bees/bluetooth-bee/phyphoxco2-messgera\314\210t.svg" @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Interval: Interval2000msSend valuessend to channel:1CO2 Sensor (Sensirion SCD30)Value:CO2 in ppmsend to channel:2CO2 Sensor (Sensirion SCD30)Value:Temperature in °CInitialise Phyphox device with name:CO2 Traffic LightCreate experimentTitleCO2 Traffic LightDescriptionForwards measurements of the CO2 Traffic LightWith graphs:TimestampChannel1Create GraphCO2 concentrationUnit x-axistUnit y-axisppmLabel x-axisTimeLabel y-axisConcentrationstyleLinex-axis valuey-axis valueTimestampCreate GraphTemperatureUnit x-axistUnit y-axis°CLabel x-axisTimeLabel y-axisTemperaturestyleLinex-axis valuey-axis valueChannel2 \ No newline at end of file diff --git a/static/img/en/hardware-bilder/bodenfeuchte-temperatursensor/block_bodenfeuchte_temperatur.svg b/static/img/en/hardware-bilder/bodenfeuchte-temperatursensor/block_bodenfeuchte_temperatur.svg new file mode 100644 index 0000000..f759a5a --- /dev/null +++ b/static/img/en/hardware-bilder/bodenfeuchte-temperatursensor/block_bodenfeuchte_temperatur.svg @@ -0,0 +1,1242 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Soil Moisture and Temperature (SMT50) + + + Port: + + + + A + + + + Value: + + + + Temperature in °C + + + + + diff --git a/static/img/en/hardware-bilder/co2/scd30-block.svg b/static/img/en/hardware-bilder/co2/scd30-block.svg new file mode 100644 index 0000000..d591ff7 --- /dev/null +++ b/static/img/en/hardware-bilder/co2/scd30-block.svg @@ -0,0 +1,1207 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + CO2 Sensor (Sensirion SCD30) + + + Value: + + + + CO2 in ppm + + + + + diff --git a/static/img/en/hardware-bilder/distanz/ultraschall-block.svg b/static/img/en/hardware-bilder/distanz/ultraschall-block.svg new file mode 100644 index 0000000..fd43841 --- /dev/null +++ b/static/img/en/hardware-bilder/distanz/ultraschall-block.svg @@ -0,0 +1,1306 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Ultrasonic distance sensor at Port + + + + A + + + + Trigger + + + + A1 + + + + Echo + + + + A2 + + + + Max distance + + + + 250 + + + cm + + + + diff --git a/static/img/en/hardware-bilder/feinstaub/block_feinstaubsensor.svg b/static/img/en/hardware-bilder/feinstaub/block_feinstaubsensor.svg new file mode 100644 index 0000000..e1360c1 --- /dev/null +++ b/static/img/en/hardware-bilder/feinstaub/block_feinstaubsensor.svg @@ -0,0 +1,1243 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Fine Particular Sensor + + + Value: + + + + PM2.5 + + + + in µg/m³ at + + + + Serial1 + + + + + diff --git a/static/img/en/hardware-bilder/gps/block_gps.svg b/static/img/en/hardware-bilder/gps/block_gps.svg new file mode 100644 index 0000000..2e73670 --- /dev/null +++ b/static/img/en/hardware-bilder/gps/block_gps.svg @@ -0,0 +1,1207 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + GPS Modul + + + Value: + + + + latitude + + + + + diff --git a/static/img/en/hardware-bilder/helligkeit-uv/block_helligkeit_uv.svg b/static/img/en/hardware-bilder/helligkeit-uv/block_helligkeit_uv.svg new file mode 100644 index 0000000..9ff8e13 --- /dev/null +++ b/static/img/en/hardware-bilder/helligkeit-uv/block_helligkeit_uv.svg @@ -0,0 +1,1207 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Light Visible + UV + + + Value: + + + + Illuminance in Lux + + + + + diff --git a/static/img/en/hardware-bilder/led-matrix/led-matrix-block.svg b/static/img/en/hardware-bilder/led-matrix/led-matrix-block.svg new file mode 100644 index 0000000..bad726b --- /dev/null +++ b/static/img/en/hardware-bilder/led-matrix/led-matrix-block.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:Initialise LED-MatrixPort:ABrightness: 20Show text/numberPort:AAuto-ScrollColorInputHello World! \ No newline at end of file diff --git a/static/img/en/hardware-bilder/luftdruck/block_luftdruck_temperatur.svg b/static/img/en/hardware-bilder/luftdruck/block_luftdruck_temperatur.svg new file mode 100644 index 0000000..b939fe3 --- /dev/null +++ b/static/img/en/hardware-bilder/luftdruck/block_luftdruck_temperatur.svg @@ -0,0 +1,1207 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Airpressure/Temperature Sensor (DPS310) + + + Value: + + + + Airpressure in hPa + + + + + diff --git a/static/img/en/hardware-bilder/mikro/mikro-block.svg b/static/img/en/hardware-bilder/mikro/mikro-block.svg new file mode 100644 index 0000000..6d38180 --- /dev/null +++ b/static/img/en/hardware-bilder/mikro/mikro-block.svg @@ -0,0 +1,1206 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Microphone + + + Pin: + + + + A1 + + + + + diff --git a/static/img/en/hardware-bilder/mpu6050/mcu-top-mpu.png b/static/img/en/hardware-bilder/mpu6050/mcu-top-mpu.png new file mode 100644 index 0000000..82a8e02 Binary files /dev/null and b/static/img/en/hardware-bilder/mpu6050/mcu-top-mpu.png differ diff --git a/static/img/en/hardware-bilder/mpu6050/mpu-6050-block.svg b/static/img/en/hardware-bilder/mpu6050/mpu-6050-block.svg new file mode 100644 index 0000000..dff7498 --- /dev/null +++ b/static/img/en/hardware-bilder/mpu6050/mpu-6050-block.svg @@ -0,0 +1,1206 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + ESP32-S2 MPU6050 + + + Value: + + + + X + + + + + diff --git a/static/img/en/hardware-bilder/photodiode/mcu-top-photodiode.png b/static/img/en/hardware-bilder/photodiode/mcu-top-photodiode.png new file mode 100644 index 0000000..c92475e Binary files /dev/null and b/static/img/en/hardware-bilder/photodiode/mcu-top-photodiode.png differ diff --git a/static/img/en/hardware-bilder/photodiode/photodiode_block.svg b/static/img/en/hardware-bilder/photodiode/photodiode_block.svg new file mode 100644 index 0000000..6fb9f9e --- /dev/null +++ b/static/img/en/hardware-bilder/photodiode/photodiode_block.svg @@ -0,0 +1,1206 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + ESP32-S2 Phododiode + + + Value: + + + + Light intensity + + + + + diff --git a/static/img/en/hardware-bilder/sps30/sps30-block.svg b/static/img/en/hardware-bilder/sps30/sps30-block.svg new file mode 100644 index 0000000..caa6fbf --- /dev/null +++ b/static/img/en/hardware-bilder/sps30/sps30-block.svg @@ -0,0 +1,1215 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Particulate Matter Sensor (Sensirion SPS30) + + + Value: + + + + PM1.0 + + + + in µg/m³ + + + + diff --git a/static/img/en/hardware-bilder/temperatur-luftfeuchte/block_temperatur_luftfeuchte.svg b/static/img/en/hardware-bilder/temperatur-luftfeuchte/block_temperatur_luftfeuchte.svg new file mode 100644 index 0000000..f5a531a --- /dev/null +++ b/static/img/en/hardware-bilder/temperatur-luftfeuchte/block_temperatur_luftfeuchte.svg @@ -0,0 +1,1214 @@ + + + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Temperature/Humidity Sensor (HDC1080) + + + Value: + + + + Temperature in °C + + + + + diff --git a/static/img/en/hardware-bilder/tof/tof_block.svg b/static/img/en/hardware-bilder/tof/tof_block.svg new file mode 100644 index 0000000..0aa41df --- /dev/null +++ b/static/img/en/hardware-bilder/tof/tof_block.svg @@ -0,0 +1,1207 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + ToF Distance Imager + + + Value: + + + + Closest distance in cm + + + + + diff --git a/static/img/en/hardware-bilder/umweltsensor/block_umweltsensor.svg b/static/img/en/hardware-bilder/umweltsensor/block_umweltsensor.svg new file mode 100644 index 0000000..5df6755 --- /dev/null +++ b/static/img/en/hardware-bilder/umweltsensor/block_umweltsensor.svg @@ -0,0 +1,1207 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Environmental sensor (BME680) + + + Value: + + + + Temperature in °C + + + + + diff --git a/static/img/en/hardware-bilder/wassertemperatur/wassertemperatur-block.svg b/static/img/en/hardware-bilder/wassertemperatur/wassertemperatur-block.svg new file mode 100644 index 0000000..e6e0f2a --- /dev/null +++ b/static/img/en/hardware-bilder/wassertemperatur/wassertemperatur-block.svg @@ -0,0 +1,1243 @@ + + + + .blocklyText, +.blocklyFlyoutLabelText { +font: normal 11pt sans-serif; +} +.blocklyText { +fill: #fff; +} +.blocklyNonEditableText>rect, +.blocklyEditableText>rect { +fill: #fff; +fill-opacity: .6; +stroke: none; +} +.blocklyNonEditableText>text, +.blocklyEditableText>text { +fill: #000; +} +.blocklyFlyoutLabelText { +fill: #000; +} +.blocklyText.blocklyBubbleText { +fill: #000; +} +.blocklyEditableText:not(.editing):hover>rect { +stroke: #fff; +stroke-width: 2; +} +.blocklyHtmlInput { +font-family: sans-serif; +font-weight: normal; +} +.blocklySelected>.blocklyPath { +stroke: #fc3; +stroke-width: 3px; +} +.blocklyHighlightedConnectionPath { +stroke: #fc3; +} +.blocklyPath { +fill-opacity: .5; +} +.blocklyPathLight, +.blocklyPathDark { +display: none; +} +.blocklyInsertionMarker>.blocklyPath { +fill-opacity: 0.2; +stroke: none; +} +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { +fill-opacity: 0.2; +stroke: none; +} +.blocklySvg { + background-color: #fff; + outline: none; + overflow: hidden; /* IE overflows by default. */ + position: absolute; + display: block; +} + +.blocklyWidgetDiv { + display: none; + position: absolute; + z-index: 99999; /* big value for bootstrap3 compatibility */ +} + +.injectionDiv { + height: 100%; + position: relative; + overflow: hidden; /* So blocks in drag surface disappear at edges */ + touch-action: none; +} + +.blocklyNonSelectable { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; +} + +.blocklyWsDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; +} + +/* Added as a separate rule with multiple classes to make it more specific + than a bootstrap rule that selects svg:root. See issue #1275 for context. +*/ +.blocklyWsDragSurface.blocklyOverflowVisible { + overflow: visible; +} + +.blocklyBlockDragSurface { + display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + overflow: visible !important; + z-index: 50; /* Display below toolbox, but above everything else. */ +} + +.blocklyBlockCanvas.blocklyCanvasTransitioning, +.blocklyBubbleCanvas.blocklyCanvasTransitioning { + transition: transform .5s; +} + +.blocklyTooltipDiv { + background-color: #ffffc7; + border: 1px solid #ddc; + box-shadow: 4px 4px 20px 1px rgba(0,0,0,.15); + color: #000; + display: none; + font: 9pt sans-serif; + opacity: .9; + padding: 2px; + position: absolute; + z-index: 100000; /* big value for bootstrap3 compatibility */ +} + +.blocklyDropDownDiv { + position: absolute; + left: 0; + top: 0; + z-index: 1000; + display: none; + border: 1px solid; + border-color: #dadce0; + background-color: #fff; + border-radius: 2px; + padding: 4px; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownDiv.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyDropDownContent { + max-height: 300px; /* @todo: spec for maximum height. */ + overflow: auto; + overflow-x: hidden; + position: relative; +} + +.blocklyDropDownArrow { + position: absolute; + left: 0; + top: 0; + width: 16px; + height: 16px; + z-index: -1; + background-color: inherit; + border-color: inherit; +} + +.blocklyDropDownButton { + display: inline-block; + float: left; + padding: 0; + margin: 4px; + border-radius: 4px; + outline: none; + border: 1px solid; + transition: box-shadow .1s; + cursor: pointer; +} + +.blocklyArrowTop { + border-top: 1px solid; + border-left: 1px solid; + border-top-left-radius: 4px; + border-color: inherit; +} + +.blocklyArrowBottom { + border-bottom: 1px solid; + border-right: 1px solid; + border-bottom-right-radius: 4px; + border-color: inherit; +} + +.blocklyResizeSE { + cursor: se-resize; + fill: #aaa; +} + +.blocklyResizeSW { + cursor: sw-resize; + fill: #aaa; +} + +.blocklyResizeLine { + stroke: #515A5A; + stroke-width: 1; +} + +.blocklyHighlightedConnectionPath { + fill: none; + stroke: #fc3; + stroke-width: 4px; +} + +.blocklyPathLight { + fill: none; + stroke-linecap: round; + stroke-width: 1; +} + +.blocklySelected>.blocklyPathLight { + display: none; +} + +.blocklyDraggable { + cursor: grab; + cursor: -webkit-grab; +} + +.blocklyDragging { + cursor: grabbing; + cursor: -webkit-grabbing; +} + + /* Changes cursor on mouse down. Not effective in Firefox because of + https://bugzilla.mozilla.org/show_bug.cgi?id=771241 */ +.blocklyDraggable:active { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Change the cursor on the whole drag surface in case the mouse gets + ahead of block during a drag. This way the cursor is still a closed hand. + */ +.blocklyDraggable { + cursor: grabbing; + cursor: -webkit-grabbing; +} + +.blocklyDragging.blocklyDraggingDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyDragging>.blocklyPath, +.blocklyDragging>.blocklyPathLight { + fill-opacity: .8; + stroke-opacity: .8; +} + +.blocklyDragging>.blocklyPathDark { + display: none; +} + +.blocklyDisabled>.blocklyPath { + fill-opacity: .5; + stroke-opacity: .5; +} + +.blocklyDisabled>.blocklyPathLight, +.blocklyDisabled>.blocklyPathDark { + display: none; +} + +.blocklyInsertionMarker>.blocklyPath, +.blocklyInsertionMarker>.blocklyPathLight, +.blocklyInsertionMarker>.blocklyPathDark { + fill-opacity: .2; + stroke: none; +} + +.blocklyMultilineText { + font-family: monospace; +} + +.blocklyNonEditableText>text { + pointer-events: none; +} + +.blocklyFlyout { + position: absolute; + z-index: 20; +} + +.blocklyText text { + cursor: default; +} + +/* + Don't allow users to select text. It gets annoying when trying to + drag a block and selected text moves instead. +*/ +.blocklySvg text, +.blocklyBlockDragSurface text { + user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + cursor: inherit; +} + +.blocklyHidden { + display: none; +} + +.blocklyFieldDropdown:not(.blocklyHidden) { + display: block; +} + +.blocklyIconGroup { + cursor: default; +} + +.blocklyIconGroup:not(:hover), +.blocklyIconGroupReadonly { + opacity: .6; +} + +.blocklyIconShape { + fill: #00f; + stroke: #fff; + stroke-width: 1px; +} + +.blocklyIconSymbol { + fill: #fff; +} + +.blocklyMinimalBody { + margin: 0; + padding: 0; +} + +.blocklyHtmlInput { + border: none; + border-radius: 4px; + height: 100%; + margin: 0; + outline: none; + padding: 0; + width: 100%; + text-align: center; + display: block; + box-sizing: border-box; +} + +/* Remove the increase and decrease arrows on the field number editor */ +input.blocklyHtmlInput[type=number]::-webkit-inner-spin-button, +input.blocklyHtmlInput[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; +} + +input[type=number] { + -moz-appearance: textfield; +} + +.blocklyMainBackground { + stroke-width: 1; + stroke: #c6c6c6; /* Equates to #ddd due to border being off-pixel. */ +} + +.blocklyMutatorBackground { + fill: #fff; + stroke: #ddd; + stroke-width: 1; +} + +.blocklyFlyoutBackground { + fill: #ddd; + fill-opacity: .8; +} + +.blocklyMainWorkspaceScrollbar { + z-index: 20; +} + +.blocklyFlyoutScrollbar { + z-index: 30; +} + +.blocklyScrollbarHorizontal, +.blocklyScrollbarVertical { + position: absolute; + outline: none; +} + +.blocklyScrollbarBackground { + opacity: 0; +} + +.blocklyScrollbarHandle { + fill: #ccc; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #bbb; +} + +/* Darken flyout scrollbars due to being on a grey background. */ +/* By contrast, workspace scrollbars are on a white background. */ +.blocklyScrollbarHandle { + fill: #bbb; +} + +.blocklyScrollbarBackground:hover+.blocklyScrollbarHandle, +.blocklyScrollbarHandle:hover { + fill: #aaa; +} + +.blocklyInvalidInput { + background: #faa; +} + +.blocklyVerticalMarker { + stroke-width: 3px; + fill: rgba(255,255,255,.5); + pointer-events: none; +} + +.blocklyComputeCanvas { + position: absolute; + width: 0; + height: 0; +} + +.blocklyNoPointerEvents { + pointer-events: none; +} + +.blocklyContextMenu { + border-radius: 4px; + max-height: 100%; +} + +.blocklyDropdownMenu { + border-radius: 2px; + padding: 0 !important; +} + +.blocklyMenuItem { + /* 28px on the left for icon or checkbox. */ + padding-left: 28px; +} + +/* BiDi override for the resting state. */ +.blocklyMenuItemRtl { + /* Flip left/right padding for BiDi. */ + padding-left: 5px; + padding-right: 28px; +} + +.blocklyMenu { + background: #fff; + border: 1px solid transparent; + box-shadow: 0 0 3px 1px rgba(0,0,0,.3); + font: normal 13px Arial, sans-serif; + margin: 0; + outline: none; + padding: 4px 0; + position: absolute; + overflow-y: auto; + overflow-x: hidden; + max-height: 100%; + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +.blocklyMenu.blocklyFocused { + box-shadow: 0 0 6px 1px rgba(0,0,0,.3); +} + +.blocklyMenu { + background: inherit; /* Compatibility with gapi, reset from goog-menu */ + border: inherit; /* Compatibility with gapi, reset from goog-menu */ + font: normal 13px "Helvetica Neue", Helvetica, sans-serif; + outline: none; + position: relative; /* Compatibility with gapi, reset from goog-menu */ + z-index: 20000; /* Arbitrary, but some apps depend on it... */ +} + +/* State: resting. */ +.blocklyMenuItem { + border: none; + color: #000; + cursor: pointer; + list-style: none; + margin: 0; + /* 7em on the right for shortcut. */ + min-width: 7em; + padding: 6px 15px; + white-space: nowrap; +} + +/* State: disabled. */ +.blocklyMenuItemDisabled { + color: #ccc; + cursor: inherit; +} + +/* State: hover. */ +.blocklyMenuItemHighlight { + background-color: rgba(0,0,0,.1); +} + +/* State: selected/checked. */ +.blocklyMenuItemCheckbox { + height: 16px; + position: absolute; + width: 16px; +} + +.blocklyMenuItemCheckbox { + background: url(/media/blockly/sprites.png) no-repeat -48px -16px; + float: left; + margin-left: -24px; + position: static; /* Scroll with the menu. */ +} + +.blocklyMenuItemCheckbox { + float: right; + margin-right: -24px; +} + + +.blocklyCommentForeignObject { + position: relative; + z-index: 0; +} + +.blocklyCommentRect { + fill: #E7DE8E; + stroke: #bcA903; + stroke-width: 1px; +} + +.blocklyCommentTarget { + fill: transparent; + stroke: #bcA903; +} + +.blocklyCommentTargetFocused { + fill: none; +} + +.blocklyCommentHandleTarget { + fill: none; +} + +.blocklyCommentHandleTargetFocused { + fill: transparent; +} + +.blocklyFocused>.blocklyCommentRect { + fill: #B9B272; + stroke: #B9B272; +} + +.blocklySelected>.blocklyCommentTarget { + stroke: #fc3; + stroke-width: 3px; +} + +.blocklyCommentDeleteIcon { + cursor: pointer; + fill: #000; + display: none; +} + +.blocklyCommentDeleteIcon { + display: block; +} + +.blocklyDeleteIconShape { + fill: #000; + stroke: #000; + stroke-width: 1px; +} + +.blocklyDeleteIconShape.blocklyDeleteIconHighlighted { + stroke: #fc3; +} + + +.blocklyCommentTextarea { + background-color: #fef49c; + border: 0; + display: block; + margin: 0; + outline: 0; + padding: 3px; + resize: none; + text-overflow: hidden; +} + + +.blocklyAngleCircle { + stroke: #444; + stroke-width: 1; + fill: #ddd; + fill-opacity: 0.8; +} + +.blocklyAngleMarks { + stroke: #444; + stroke-width: 1; +} + +.blocklyAngleGauge { + fill: #f88; + fill-opacity: 0.8; + pointer-events: none; +} + +.blocklyAngleLine { + stroke: #f00; + stroke-width: 2; + stroke-linecap: round; + pointer-events: none; +} + + +.blocklyColourTable { + border-collapse: collapse; + display: block; + outline: none; + padding: 1px; +} + +.blocklyColourTable>tr>td { + border: 0.5px solid #888; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + height: 20px; + padding: 0; + width: 20px; +} + +.blocklyColourTable>tr>td.blocklyColourHighlighted { + border-color: #eee; + box-shadow: 2px 2px 7px 2px rgba(0, 0, 0, 0.3); + position: relative; +} + +.blocklyColourSelected:hover { + border-color: #eee !important; + outline: 1px solid #333; + position: relative; +} + + +.blocklyHtmlTextAreaInput { + font-family: monospace; + resize: none; + overflow: hidden; + height: 100%; + text-align: left; +} + +.blocklyHtmlTextAreaInputOverflowedY { + overflow-y: scroll; +} + + +.blocklyFlyoutButton { + fill: #888; + cursor: default; +} + +.blocklyFlyoutButtonShadow { + fill: #666; +} + +.blocklyFlyoutButton:hover { + fill: #aaa; +} + +.blocklyFlyoutLabel { + cursor: default; +} + +.blocklyFlyoutLabelBackground { + opacity: 0; +} + + +.blocklyZoom>svg>image { + opacity: .4; +} + +.blocklyZoom>svg>image:hover { + opacity: .6; +} + +.blocklyZoom>svg>image:active { + opacity: .8; +} + + +.blocklyTreeRow:not(.blocklyTreeSelected):hover { + background-color: rgba(255, 255, 255, .2); +} + +.blocklyToolboxCategory { + margin: 1px 5px 1px 0; +} + +.blocklyToolboxCategory { + margin: 1px 0 1px 5px; +} + +.blocklyTreeRow { + height: 22px; + line-height: 22px; + margin-bottom: 3px; + padding-right: 8px; + white-space: nowrap; +} + +.blocklyTreeRow { + margin-left: 8px; + padding-right: 0; +} + +.blocklyTreeIcon { + background-image: url(/media/blockly/sprites.png); + height: 16px; + vertical-align: middle; + visibility: hidden; + width: 16px; +} + +.blocklyTreeIconClosed { + background-position: -32px -1px; +} + +.blocklyTreeIconClosed { + background-position: 0 -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: -32px -17px; +} + +.blocklyTreeSelected>.blocklyTreeIconClosed { + background-position: 0 -17px; +} + +.blocklyTreeIconOpen { + background-position: -16px -1px; +} + +.blocklyTreeSelected>.blocklyTreeIconOpen { + background-position: -16px -17px; +} + +.blocklyTreeLabel { + cursor: default; + font: 16px sans-serif; + padding: 0 3px; + vertical-align: middle; +} + +.blocklyTreeLabel { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyTreeLabel { + color: #fff; +} + + +.blocklyTreeSeparator { + border-bottom: solid #e5e5e5 1px; + height: 0; + margin: 5px 0; +} + +.blocklyTreeSeparator { + border-right: solid #e5e5e5 1px; + border-bottom: none; + height: auto; + margin: 0 5px 0 5px; + padding: 5px 0; + width: 0; +} + + +.blocklyToolboxDelete { + cursor: url("/media/blockly/handdelete.cur"), auto; +} + +.blocklyToolboxGrab { + cursor: url("/media/blockly/handclosed.cur"), auto; + cursor: grabbing; + cursor: -webkit-grabbing; +} + +/* Category tree in Toolbox. */ +.blocklyToolboxDiv { + background-color: #ddd; + overflow-x: visible; + overflow-y: auto; + padding: 4px 0 4px 0; + position: absolute; + z-index: 70; /* so blocks go under toolbox when dragging */ + -webkit-tap-highlight-color: transparent; /* issue #1345 */ +} + +.blocklyToolboxContents { + display: flex; + flex-wrap: wrap; + flex-direction: column; +} + +.blocklyToolboxContents:focus { + outline: none; +} + + +.blocklyModalOverlay { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: fixed; +} +.blocklyModalContainer { + background-color: #fff; + border: 1px solid gray; + font-family: Helvetica; + font-weight: 300; + padding: 1em; + width: 400px; + display: flex; + flex-direction: column; + justify-content: center; + box-shadow: 0px 10px 20px grey; + z-index: 100; + margin: 15% auto; +} +.blocklyModalHeader { + display: flex; + justify-content: space-between; + align-items: center; +} +.blocklyModalHeaderTitle { + margin-top: 0; + margin-bottom: 0; + font-size: 1.2em; + line-height: 1.25; +} +.blocklyModalBtn { + margin-left: auto; + height: fit-content; +} +.blocklyModalBtnClose:before { + content: "\2715"; +} +.blocklyModalBtn { + margin-right: 0.5em; + border: 1px solid gray; + font-weight: 500; + color: gray; + border-radius: 25px; +} +.blocklyModalBtnPrimary { + background-color: gray; + color: #fff; +} + + +.typedModalTitle { + font-weight: bold; + font-size: 1em; +} +.typedModalVariableInputContainer { + margin: 1em 0 1em 0; +} +.typedModalVariableLabel{ + margin-right: 0.5em; +} +.typedModalTypes ul{ + display: flex; + flex-wrap: wrap; + list-style-type: none; + padding: 0; +} +.typedModalTypes li { + margin-right: 1em; + display: flex; +} + + + /** Setup grid layout of DropDown */ + .fieldGridDropDownContainer.blocklyMenu { + display: grid; + grid-gap: 7px; + } + /* Change look of cells (add border, sizing, padding, and text color) */ + .blocklyMenuItem { + border: 1px solid rgba(1, 1, 1, 0.5); + border-radius: 4px; + color: white; + min-width: auto; + padding-left: 15px; /* override padding-left now that checkmark is hidden */ + } + /* Change look of selected cell */ + .blocklyMenuItemCheckbox { + display: none; /* Hide checkmark */ + } + .blocklyMenuItem.blocklyMenuItemSelected { + background-color: rgba(1, 1, 1, 0.25); + } + /* Change look of focus/highlighted cell */ + .blocklyMenuItem.blocklyMenuItemHighlight { + box-shadow: 0 0 0 4px hsla(0, 0%, 100%, .2); + } + .blocklyMenuItemHighlight { + /* Uses less selectors so as to not affect blocklyMenuItemSelected */ + background-color: inherit; + } + .fieldGridDropDownContainer { + margin: 7px; /* needed for highlight */ + } + + +.fieldSliderContainer { + align-items: center; + display: flex; + height: 32px; + justify-content: center; + width: 150px; +} +.fieldSlider { + -webkit-appearance: none; + background: transparent; /* override white in chrome */ + margin: 4px; + padding: 0; + width: 100%; +} +.fieldSlider:focus { + outline: none; +} +/* Webkit */ +.fieldSlider::-webkit-slider-runnable-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-webkit-slider-thumb { + -webkit-appearance: none; + background: #fff; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + margin-top: -7px; + width: 24px; +} +/* Firefox */ +.fieldSlider::-moz-range-track { + background: #ddd; + border-radius: 5px; + height: 10px; +} +.fieldSlider::-moz-range-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} +.fieldSlider::-moz-focus-outer { + /* override the focus border style */ + border: 0; +} +/* IE */ +.fieldSlider::-ms-track { + /* IE wont let the thumb overflow the track, so fake it */ + background: transparent; + border-color: transparent; + border-width: 15px 0; + /* remove default tick marks */ + color: transparent; + height: 10px; + width: 100%; + margin: -4px 0; +} +.fieldSlider::-ms-fill-lower { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-fill-upper { + background: #ddd; + border-radius: 5px; +} +.fieldSlider::-ms-thumb { + background: #fff; + border: none; + border-radius: 50%; + box-shadow: 0 0 0 4px rgba(255,255,255,.15); + cursor: pointer; + height: 24px; + width: 24px; +} + + +.zoomToFit { + opacity: 0.4; +} +.zoomToFit:hover { + opacity: 0.6; +} +.zoomToFit:active { + opacity: 0.8; +} + + +.blocklyBackpack { + opacity: 0.4; +} +.blocklyBackpackDarken { + opacity: 0.6; +} +.blocklyBackpack:active { + opacity: 0.8; +} +.blocklyPath { + fill-opacity: 1; + } + .blocklyPathDark { + display: flex; + } + .blocklyPathLight { + display: flex; + } + +"> + + + + + + + + + + + + + + Water Temperature + + + Port: + + + + A + + + + Index: + + + + 0 + + + + + diff --git a/static/img/en/mcu/led-block-2.svg b/static/img/en/mcu/led-block-2.svg new file mode 100644 index 0000000..2f92bce --- /dev/null +++ b/static/img/en/mcu/led-block-2.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:LED connected toPin:BUILTIN_1Statuson \ No newline at end of file diff --git a/static/img/en/mcu/led-block-3.svg b/static/img/en/mcu/led-block-3.svg new file mode 100644 index 0000000..5dc2b57 --- /dev/null +++ b/static/img/en/mcu/led-block-3.svg @@ -0,0 +1,1043 @@ + + ">Arduino run first:Arduino loop forever:LED connected toPin:BUILTIN_1Statuson1000waitmillisecondsLED connected toPin:BUILTIN_1Statusoff1000waitmilliseconds \ No newline at end of file diff --git a/static/img/en/mcu/mcu-battery-port.jpg b/static/img/en/mcu/mcu-battery-port.jpg new file mode 100644 index 0000000..06fac8b Binary files /dev/null and b/static/img/en/mcu/mcu-battery-port.jpg differ diff --git a/static/img/en/mcu/mcu-modus.png b/static/img/en/mcu/mcu-modus.png new file mode 100644 index 0000000..7414c7b Binary files /dev/null and b/static/img/en/mcu/mcu-modus.png differ diff --git a/static/img/en/mcu/mcu-usb-port.jpg b/static/img/en/mcu/mcu-usb-port.jpg new file mode 100644 index 0000000..a1adb11 Binary files /dev/null and b/static/img/en/mcu/mcu-usb-port.jpg differ diff --git a/static/img/en/mcu/ports/i2c-wire-port.png b/static/img/en/mcu/ports/i2c-wire-port.png new file mode 100644 index 0000000..af5ec73 Binary files /dev/null and b/static/img/en/mcu/ports/i2c-wire-port.png differ diff --git a/static/img/en/mcu/ports/io-port.png b/static/img/en/mcu/ports/io-port.png new file mode 100644 index 0000000..b9655c8 Binary files /dev/null and b/static/img/en/mcu/ports/io-port.png differ diff --git a/static/img/en/mcu/ports/uart-serial-port.png b/static/img/en/mcu/ports/uart-serial-port.png new file mode 100644 index 0000000..77d52ae Binary files /dev/null and b/static/img/en/mcu/ports/uart-serial-port.png differ diff --git a/static/img/en/mcu/sensebox-mcu-ports.jpg b/static/img/en/mcu/sensebox-mcu-ports.jpg new file mode 100644 index 0000000..9276e61 Binary files /dev/null and b/static/img/en/mcu/sensebox-mcu-ports.jpg differ diff --git a/static/img/en/mcus2/mcus2-ports.png b/static/img/en/mcus2/mcus2-ports.png new file mode 100644 index 0000000..22a6e7b Binary files /dev/null and b/static/img/en/mcus2/mcus2-ports.png differ diff --git a/static/img/en/mcus2/mcus2top.png b/static/img/en/mcus2/mcus2top.png new file mode 100644 index 0000000..0405194 Binary files /dev/null and b/static/img/en/mcus2/mcus2top.png differ diff --git a/static/img/en/mcus2/ports/i2c-wire-port.png b/static/img/en/mcus2/ports/i2c-wire-port.png new file mode 100644 index 0000000..1bc128f Binary files /dev/null and b/static/img/en/mcus2/ports/i2c-wire-port.png differ diff --git a/static/img/en/mcus2/ports/io-port.png b/static/img/en/mcus2/ports/io-port.png new file mode 100644 index 0000000..1739381 Binary files /dev/null and b/static/img/en/mcus2/ports/io-port.png differ diff --git a/static/img/en/mcus2/ports/uart-serial-port.png b/static/img/en/mcus2/ports/uart-serial-port.png new file mode 100644 index 0000000..b3106a9 Binary files /dev/null and b/static/img/en/mcus2/ports/uart-serial-port.png differ diff --git a/static/img/en/mcus2/sd-card-slot.png b/static/img/en/mcus2/sd-card-slot.png new file mode 100644 index 0000000..9e84cef Binary files /dev/null and b/static/img/en/mcus2/sd-card-slot.png differ diff --git a/static/img/en/mcus2/wifi-modul-s2.png b/static/img/en/mcus2/wifi-modul-s2.png new file mode 100644 index 0000000..4799b36 Binary files /dev/null and b/static/img/en/mcus2/wifi-modul-s2.png differ diff --git a/static/img/en/sensebox-home-bilder/home-schritt-2/osem-2.png b/static/img/en/sensebox-home-bilder/home-schritt-2/osem-2.png new file mode 100644 index 0000000..80506e1 Binary files /dev/null and b/static/img/en/sensebox-home-bilder/home-schritt-2/osem-2.png differ diff --git a/static/img/en/sensebox-home-bilder/home-schritt-2/osem-3.png b/static/img/en/sensebox-home-bilder/home-schritt-2/osem-3.png new file mode 100644 index 0000000..f43df25 Binary files /dev/null and b/static/img/en/sensebox-home-bilder/home-schritt-2/osem-3.png differ diff --git a/static/img/en/sensebox-home-bilder/home-schritt-2/osem-4.png b/static/img/en/sensebox-home-bilder/home-schritt-2/osem-4.png new file mode 100644 index 0000000..d821557 Binary files /dev/null and b/static/img/en/sensebox-home-bilder/home-schritt-2/osem-4.png differ diff --git a/static/img/en/sensebox-home-bilder/home-schritt-2/osem-5.png b/static/img/en/sensebox-home-bilder/home-schritt-2/osem-5.png new file mode 100644 index 0000000..00e3c5e Binary files /dev/null and b/static/img/en/sensebox-home-bilder/home-schritt-2/osem-5.png differ diff --git a/static/img/hardware-bilder/bodenfeuchte-temperatursensor/sensoren_bodenfeuchte_temperatur.png:Zone.Identifier b/static/img/hardware-bilder/bodenfeuchte-temperatursensor/sensoren_bodenfeuchte_temperatur.png_Zone.Identifier similarity index 100% rename from static/img/hardware-bilder/bodenfeuchte-temperatursensor/sensoren_bodenfeuchte_temperatur.png:Zone.Identifier rename to static/img/hardware-bilder/bodenfeuchte-temperatursensor/sensoren_bodenfeuchte_temperatur.png_Zone.Identifier diff --git a/static/img/hardware-bilder/luftdruck/Screen Shot 2024-04-25 at 11.46.52.png:Zone.Identifier b/static/img/hardware-bilder/luftdruck/Screen Shot 2024-04-25 at 11.46.52.png:Zone.Identifier deleted file mode 100644 index 053d112..0000000 --- a/static/img/hardware-bilder/luftdruck/Screen Shot 2024-04-25 at 11.46.52.png:Zone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -HostUrl=about:internet diff --git a/static/img/hardware-bilder/luftdruck/block-bmp280.png:Zone.Identifier b/static/img/hardware-bilder/luftdruck/block-bmp280.png:Zone.Identifier deleted file mode 100644 index 053d112..0000000 --- a/static/img/hardware-bilder/luftdruck/block-bmp280.png:Zone.Identifier +++ /dev/null @@ -1,3 +0,0 @@ -[ZoneTransfer] -ZoneId=3 -HostUrl=about:internet